- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的应用程序中,用户可以加载一个文本文件(以分号分隔),该文件描述了要在 Bing map 上转换为 [Push] Pins 的位置特征,或者加载预先存在的 map 数据(来自本地数据库)到同样的目的。
在从数据库加载的情况下,它工作得很好, map 上会为数据库中的每个相应记录显示一个 Pin,例如:
但是,当我从文本文件的内容中填充数据库,然后根据这些值创建 Pin 图时, map 上只会显示 pin 的一个子集——实际上通常只是前两个!
但是,当我从数据库加载相同的 map 时,所有内容都按原样显示。
从文本文件生成新记录后,我检查了数据库,所有记录确实都在那里(包括坐标(纬度和经度值)。两种情况下的代码似乎相同。但它没有显示所有针...
文本文件内容是这样的(这就是创建上面显示的 map 的原因):
Paris, France;;Paris;France;75000
Florence, Italy;;Florence;Italy;50100
Chelsea, London, England;23 Tedworth Square;Chelsea London;England;SW3 4DY
Kaltenleutgeben, Austria;;Kaltenleutgeben;Austria;2380
Vienna, Austria;;Vienna;Austria;1010
Weggis, Switzerland;;Weggis;Switzerland;6006
Heidelberg, Germany;;Heidelberg;Germany;69115
Munich, Germany;;Munich;Germany;80331
为了深入了解细节,以下是从文本文件加载 map 数据的主窗体中的代码,例如上面显示的那个:
private void toolStripMenuItemCreateMapAndLocsFromFile_Click(object sender, EventArgs e)
{
bool pushpinsAdded = false;
string _currentMap = string.Empty;
RemoveCurrentPushpins();
using (var frmCre8MapAndLocsFromFile = new mdlDlgCreateMapAndLocsFromTSVFile())
{
if (frmCre8MapAndLocsFromFile.ShowDialog() == DialogResult.OK)
{
_currentMap = mdlDlgCreateMapAndLocsFromTSVFile.CurrentMap;
foreach (Pushpin pin in frmCre8MapAndLocsFromFile.Pins)
{
this.userControl11.myMap.Children.Add(pin);
pushpinsAdded = true; // redundant after the first assignment
}
}
}
if (pushpinsAdded)
{
RightsizeZoomLevelForAllPushpins();
}
lblMapName.Text = currentMap;
lblMapName.Visible = true;
}
这是来自 mdlDlgCreateMapAndLocsFromTSVFile 的相关代码(是的,它的名字有误,因为我从 TSV 切换到了 SCSV),它在上面被调用:
private void btnOpenTSVFile_Click(object sender, EventArgs e)
{
string pathToFile = string.Empty;
string line = string.Empty;
int counter = 0;
openTSVFileDlg.Filter = "scsv files (*.scsv)|*.scsv|txt files (*.txt)|*.txt|All files (*.*)|*.*";
if (openTSVFileDlg.ShowDialog() == DialogResult.OK)
{
pathToFile = openTSVFileDlg.FileName;
fileNameOnly = Path.GetFileName(pathToFile);
fileNameOnly = Path.ChangeExtension(fileNameOnly, null);
CurrentMap = fileNameOnly;
if (SCSVFileAlreadyLoaded(fileNameOnly))
{
MessageBox.Show(String.Format("The file/table {0} has already been loaded/populated", fileNameOnly));
return;
}
StreamReader file = new StreamReader(pathToFile);
while ((line = file.ReadLine()) != null)
{
if (counter == 0)
{
InsertMapRecord(fileNameOnly);
}
counter++;
InsertMapDetailRecord(fileNameOnly, line);
}
}
}
InsertMapDetailRecord() 是将图钉添加到列表中的方法,它是:
private void InsertMapDetailRecord(string fileNameOnly, string line)
{
string keyRecordElements = string.Empty;
string[] lineElements;
lineElements = line.Split(';');
string locationName = lineElements[0].Trim();
string address = lineElements[1].Trim();
string city = lineElements[2].Trim();
string st8 = lineElements[3].Trim();
string zip = lineElements[4].Trim();
keyRecordElements = string.Format("{0} {1} {2} {3}", address, city, st8, zip).Trim();
if (MissingValues(lineElements))
{
MessageBox.Show("Could not insert record - one or more key values missing");
return;
}
if (InsertIntoCartographerDetail(fileNameOnly, locationName, address, city, st8, zip))
{
AddPushpin(keyRecordElements, locationName);
}
else
{
MessageBox.Show("insert failed");
}
}
AddPushpin() 是:
private async void AddPushpin(string _fullAddress, string _location)
{
iContentCounter = iContentCounter + 1;
// from https://stackoverflow.com/questions/65752688/how-can-i-retrieve-latitude-and-longitude-of-a-postal-address-using-bing-maps
var request = new GeocodeRequest();
request.BingMapsKey = "Gr8GooglyMoogly";
request.Query = _fullAddress;
var result = await request.Execute();
if (result.StatusCode == 200)
{
var toolkitLocation = (result?.ResourceSets?.FirstOrDefault())
?.Resources?.FirstOrDefault()
as BingMapsRESTToolkit.Location;
var latitude = toolkitLocation.Point.Coordinates[0];
var longitude = toolkitLocation.Point.Coordinates[1];
var mapLocation = new Microsoft.Maps.MapControl.WPF.Location(latitude, longitude);
this.Pin = new Pushpin() { Location = mapLocation, ToolTip = _location, Content = iContentCounter
};
if (null == this.Pins)
{
this.Pins = new List<Pushpin>();
}
this.Pins.Add(Pin); // specific to this form
UpdateDetailRecWithCoords(_location, latitude, longitude);
this.DialogResult = DialogResult.OK;
}
}
同样,就填充数据库而言,这完成了它应该做的事情,包括详细信息表的纬度和经度字段,但是在模式对话框关闭时焦点传递回主窗体后, map 上只显示两个图钉。
private void loadExistingMapToolStripMenuItem_Click(object sender, EventArgs e)
{
bool pushpinsAdded = false;
RemoveCurrentPushpins();
using (var frmLoadExistingMap = new mdlDlgFrm_LoadExistingMap())
{
if (frmLoadExistingMap.ShowDialog() == DialogResult.OK)
{
foreach (Pushpin pin in frmLoadExistingMap.Pins)
{
this.userControl11.myMap.Children.Add(pin);
pushpinsAdded = true;
}
}
}
if (pushpinsAdded)
{
RightsizeZoomLevelForAllPushpins();
}
lblMapName.Text = currentMap;
lblMapName.Visible = true;
}
这是来自 mdlDlgFrm_LoadExistingMap 表单的代码,其中:
private void btnLoadSelectedMap_Click(object sender, EventArgs e)
{
string latitudeAsStr = string.Empty;
string longitudeAsStr = string.Empty;
List<MapDetails> lstMapDetails = new List<MapDetails>();
MapDetails md;
const int LOC_NAME = 0;
const int ADDRESS = 1;
const int CITY = 2;
const int ST8 = 3;
const int ZIP = 4;
const int NOTES = 5;
const int LATITUDE = 6;
const int LONGITUDE = 7;
mapName = cmbxMaps.Text.Trim();
if (mapName == string.Empty)
{
MessageBox.Show("Select a map from the combo box");
cmbxMaps.Focus();
return;
}
try
{
Form1.currentMap = mapName;
string qry = "SELECT LocationName, Address1, City, StateOrSo, PostalCode, " +
"MapDetailNotes, Latitude, Longitude " +
"FROM CartographerDetail " +
"WHERE FKMapName = @FKMapName";
var con = new SqliteConnection(connStr);
con.Open();
SqliteCommand cmd = new SqliteCommand(qry, con);
cmd.Parameters.AddWithValue("@FKMapName", mapName);
var reader = cmd.ExecuteReader();
while (reader.Read())
{
md = new MapDetails();
md.LocationName = reader.GetValue(LOC_NAME).ToString().Trim();
md.Address = reader.GetValue(ADDRESS).ToString().Trim();
md.City = reader.GetValue(CITY).ToString().Trim();
md.StateOrSo = reader.GetValue(ST8).ToString().Trim();
md.PostalCode = reader.GetValue(ZIP).ToString().Trim();
md.MapDetailNotes = reader.GetValue(NOTES).ToString();
latitudeAsStr = reader.GetValue(LATITUDE).ToString();
if (string.IsNullOrEmpty(latitudeAsStr))
{
md.Latitude = 0.0;
}
else
{
md.Latitude = Convert.ToDouble(reader.GetValue(LATITUDE).ToString());
}
longitudeAsStr = reader.GetValue(LONGITUDE).ToString();
if (string.IsNullOrEmpty(longitudeAsStr))
{
md.Longitude = 0.0;
}
else
{
md.Longitude = Convert.ToDouble(reader.GetValue(LONGITUDE).ToString());
}
lstMapDetails.Add(md);
}
AddPushpinsToListOfPushpins(lstMapDetails);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
this.Close();
}
// AddPushpins (plural)
private void AddPushpinsToListOfPushpins(List<MapDetails> lstMapDetails)
{
string fullAddress;
foreach (MapDetails _md in lstMapDetails)
{
fullAddress = string.Format("{0} {1} {2} {3}", _md.Address, _md.City, _md.StateOrSo, _md.PostalCode).Trim();
AddPushpinToListOfPushpins(_md.LocationName, fullAddress, _md.MapDetailNotes, _md.Latitude, _md.Longitude);
}
}
// AddPushpin (singular)
private async void AddPushpinToListOfPushpins(string location, string fullAddress, string mapDetailNotes, double latitude, double longitude)
{
iContentCounter = iContentCounter + 1;
string toolTip = string.Empty;
// if already have the record, including the coordinates, no need to make the REST call
if ((latitude != 0.0) && (longitude != 0.0))
{
if (mapDetailNotesExist(location))
{
toolTip = String.Format("{0}{1}{2}{1}{3},{4}{1}{5}", location, Environment.NewLine, fullAddress, latitude, longitude, mapDetailNotes.Trim());
}
else
{
toolTip = String.Format("{0}{1}{2}{1}{3},{4}", location, Environment.NewLine, fullAddress, latitude, longitude);
}
var _mapLocation = new Microsoft.Maps.MapControl.WPF.Location(latitude, longitude);
this.Pins.Add(new Pushpin()
{
Location = _mapLocation,
ToolTip = toolTip,
Content = iContentCounter
});
}
else
{
// from https://stackoverflow.com/questions/65752688/how-can-i-retrieve-latitude-and-longitude-of-a-postal- address-using-bing-maps
var request = new GeocodeRequest();
request.BingMapsKey = "Gr8GooglyMoogly";
request.Query = fullAddress;
var result = await request.Execute();
if (result.StatusCode == 200)
{
var toolkitLocation = (result?.ResourceSets?.FirstOrDefault())
?.Resources?.FirstOrDefault()
as BingMapsRESTToolkit.Location;
var _latitude = toolkitLocation.Point.Coordinates[0];
var _longitude = toolkitLocation.Point.Coordinates[1];
var mapLocation = new Microsoft.Maps.MapControl.WPF.Location(_latitude, _longitude);
this.Pins.Add(new Pushpin()
{
Location = mapLocation,
ToolTip = String.Format("{0}{1}{2}{1}{3},{4}{1}{5}", location, Environment.NewLine, fullAddress, _latitude, _longitude, mapDetailNotes),
Content = iContentCounter
});
UpdateLocationWithCoordinates(location, _latitude, _longitude);
}
}
}
在我看来,无论是从文件创建 map 还是从数据库加载 map ,创建 Pin 图然后在 map 中显示它们的代码都是相同的。那么为什么行为不同呢?
July 15 & 16, 1895 - Music Hall, Cleveland, Ohio;; Cleveland;Ohio;44101
July 18, 1895 - Soo Opera House or Hotel Iroquois, Sault Ste. Marie, Michigan;;Sault Ste. Marie;Michigan;49783
July 19, 1895 - Casino Room, Grand Hotel, Mackinac, Michigan;;Mackinac;Michigan;49757
July 20, 1895 - Grand Opera House, Petoskey, Michigan;;Petoskey;Michigan;49770
July 22, 1895 - First Methodist Church, Duluth, Minnesota;;Duluth;Minnesota;55802
July 23, 1895 - Hotel West & Reception and Supper, Minneapolis, Minnesota;;Minneapolis;Minnesota;55111
July 24, 1895 - People's Church, St. Paul, Minnesota;;St. Paul;Minnesota;55101
July 27, 1895 - Luncheon and Manitoba Club Supper, Winnipeg, Canada;;Winnipeg;Canada;R0G 0A1
...我一开始就得到了这个(只有一个子集,并且所有这些都具有相同的内容编号):
最佳答案
以下是我认为您需要应用的修复程序:
AddPushpin
签名到 async Task AddPushpin(...)
InsertMapDetailRecord
将调用更改为 await AddPushpin(...);
InsertMapDetailRecord
签名到 async Task InsertMapDetailRecord(...)
btnOpenTSVFile_Click
签名到 async void btnOpenTSVFile_Click
btnOpenTSVFile_Click
换电话 InsertMapDetailRecord
至 await InsertMapDetailRecord()
AddPushpin
方法,删除 this.DialogResult = DialogResult.OK;
btnOpenTSVFile_Click
, 添加 this.DialogResult = DialogResult.OK;
在 while 循环结束之后。 void M(...)
你想调用一个方法
DoSomething(...)
返回
Task
,将调用更改为
await DoSomething(...);
.然后如果方法
M
是一个事件处理器,把签名改成
async void M(...)
, 否则如果是正常方法,则将签名更改为
async Task M(...)
.
AddPushpin
, 您正在设置
DialogResult
OK,这意味着在添加第一个图钉后,包含对话框(
mdlDlgCreateMapAndLocsFromTSVFile
)将关闭,您开始查看 Pins 属性(仍在场景后面被填充,然后在添加前几个图钉后有机会被添加到 Pins 属性,您处理
mdlDlgCreateMapAndLocsFromTSVFile
并且不会再向 map 添加图钉。
关于c# - 为什么在某个特定场景中,Bing map 上仅显示我的一部分 Pin 图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66147896/
我仅在 WIN7 PC 上收到此通知,仅使用 IE。 Firefox 总是很好,旧版 Windows 上的 IE 似乎也不错。这让我大吃一惊,我不知道为什么 IE 认为 SSL 证书有问题。有没有人以
概述 对于我产品的新版本 v1.9.0,我创建了一个新的 MSI 安装程序。该应用程序的先前版本是 v1.7.0。 卸载旧版本然后安装新版本工作正常。 但是当我尝试使用 v1.9.0 安装程序更新旧版
该网站有一个全高图像启动。更多内容位于首屏下方,图像底部有一个“滚动”元素,以提示用户发现其余内容。单击后,我成功地使网站向下滚动 300 像素。然而,我想顺利地做到这一点。这是我当前的代码: w
var i = 0; function Myfunc() { var newdiv = document.createElement('div'); var el = document
这纯粹是为了学习目的;我知道 CSS 将是这种情况下的首选方法。 我知道在 JavaScript 中,您可以使用内联事件处理将鼠标悬停在图像上,如下所示: 我知道您可以在您的站点中安装 jQuery
我只想从curl请求中获取 header curl -I www.google.com 一切都很棒。现在我想这样做,但也传递发布数据: curl -I -d'test=test' www.google
以下代码旨在更改一个字段的颜色: Untitled Document var bkColor =
我正在使用 grep 递归搜索目录,并使用以下参数希望只返回第一个匹配项。不幸的是,它返回了不止一个——事实上,我上次查看时返回了两个。似乎我有太多的争论,尤其是没有得到想要的结果。 :-/ # gr
我只想搜索当前目录中的所有文件。我试过这个 grep foo * 但我收到此错误 grep: bar: Is a directory 我也尝试过这个 grep -r foo 但这也在搜索子目录。 最佳
我正在构建一个销售点应用程序,我想打印一张收据。问题是我使用的打印机无法打印纯文本的任何图形,我在 javafx 中只能找到使用 Print API 打印节点或使用像 jasper 这样都包含图形的报
是否有任何操作系统在完全加载时仅提供用于控制台应用程序执行的 java 环境?理想情况下,它会在加载时自动启动程序 最佳答案 这是一个名称为:JavaOS 的东西 从我的角度来看,更好的方法是安装一个
在工作中,我们有一个每晚执行 mysql 数据转储的脚本。对于开发,我们通常需要使用来自最近转储的数据。一段时间以来,我们一直每天都进行数据库还原,但现在我们已经到了每天还原花费近一个小时的地步。有没
我的移动模式菜单有问题。 onClick 它淡出。我想保留此设置,但我不希望它在单击下拉部分时淡出。这是链接:http://jsfiddle.net/zLLzrs6b/3/感谢您的帮助! html:
经过大量研究和反复试验,我谦虚地向各位 CSS 专家寻求帮助。这就是我需要的: 我有两张图片:titlelogo 和 newlogo。 在全屏模式下,newlogo 需要在左边,titlelogo 在
这个问题在这里已经有了答案: Exclusive CSS selector (3 个答案) 关闭 3 年前。 我的文档结构如下: ... ... something something someth
我有一个具有以下要求的表: 所有列的宽度必须可变 所有列的宽度不得超过必要的宽度 所有单元格必须保留空白(white-space:pre/pre-wrap) 当(且仅当)超过最大定义宽度 (1000p
我正在寻找一个正则表达式来仅匹配具有特殊 字符且大小为4+ 的数字 字符串。我对此处发布的问题做了一些评论: 测试网站: http://regexlib.com/RETester.aspx 1- re
我正在为我的元素开发一个纯 CSS 灯箱解决方案。我用谷歌搜索了它,但到目前为止只找到了部分解决方案。 我正在寻找这些功能: 显示任意宽任意高的内容(无固定高/宽) 垂直居中和水平居中 如果内容宽度和
出于各种原因,我目前正在尝试使用 HTML/CSS 创建网格布局(我知道 Bootstrap 等,但在这种情况下没有选择,而且我无法添加标记元素)。 我有以下代码(容器 div,每次都有一个带有 ul
有没有办法使用String.format()格式化 double 以仅获取小数? System.out.println(String.format("%.2f", 1.23456d)); 正如预期的那
我是一名优秀的程序员,十分优秀!