我正在使用Gmap.NET的WinForm版本。我正在做的是为每个标记创建1个叠加层,然后将其添加到地图控件中。这大大减少了我程序中的延迟。现在唯一的问题是,如果我想隐藏一个覆盖图,则我有多个覆盖图,并且必须使用索引号来隐藏该1个覆盖图。
这就是我将标记添加到地图中的目的。我为每个标记创建1个叠加层:(伪代码)
For (int i = 0; i >= dataset.rows.count; i++)
{
for each row in dataset
create overlay("stores")
add overlay to map
create marker(GPS from dataset)
addMarkerToOverlay
}
现在,如果我想隐藏某些商店,也许是来自其他州的商店,我将不得不做MapControl.Overlays(index).IsVisible = False
。
这是一个问题,因为我有100多个叠加层。
如果我创建1个单一叠加层并将所有标记添加到其中,则WinForm几乎冻结和滞后,以致无法使用。
我想知道是否还有其他人曾经使用过Gmaps.NET,或者是否知道有什么方法可以提高性能?将所有标记放在一个单一的叠加层上会很好,因此我可以隐藏1个可以隐藏所有标记的叠加层。
这是我的真实代码:
Dim i As Integer = (DS.Tables(0).Rows.Count - 1)
Do While (i >= 0)
Dim lat As Double = DS.Tables(0).Rows(i)(1)
Dim lng As Double = DS.Tables(0).Rows(i)(2)
Dim StoreOverlay As GMapOverlay = New GMapOverlay("Stores")
map.Overlays.Add(StoreOverlay)
Dim marker As GMapPoint
marker = New GMapPoint(New PointLatLng(lat, lng), 15)
StoreOverlay.Markers.Add(marker)
i = (i - 1)
Loop
答案 0 :(得分:3)
对于像我这样的菜鸟并且遇到相同问题的其他人,这是解决方案...
确保您没有在循环语句内添加层的代码。我正在创建300多个图层,并为每个图层分配了300多个标记。
如果您只有1层,然后在其上添加数百个标记,那么只要您也没有循环添加这些层,就可以了。愚蠢的错误!
答案 1 :(得分:0)
只需将您的代码更改为此:
create overlay("stores")
For (int i = 0; i >= dataset.rows.count; i++)
{
for each row in dataset
add overlay to map
create marker(GPS from dataset)
addMarkerToOverlay
}
只需将创建叠加层置于for循环之外即可。
PS:哦,您找到答案了,欢呼!