Gmap performance with a lot of markers?
我使用的是gmap.net的winform版本。我要做的是为每个标记创建一个覆盖,然后将其添加到我的地图控件中。这大大减少了我的程序中的延迟。现在唯一的问题是,如果我想隐藏一个覆盖,我有多个覆盖,我必须使用一个索引号来隐藏1个覆盖。
这是我要做的,以添加我的标记到我的地图。我为每个标记创建一个覆盖:(伪代码)
1 2 3 4 5 6 7 8 | 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 } |
现在,如果我想把某些商店藏起来,也许是从另一个州藏起来,我就得把它们藏起来。这是个问题,因为我有100多个覆盖。如果我创建一个单一的覆盖,并添加我的所有标记到它,WinForm几乎冻结和滞后太多,以至于无法使用。
我想知道是否还有其他人以前和gmaps.net合作过,或者知道我可以提高性能的任何方法?最好是将所有标记放在一个单独的覆盖上,这样我可以隐藏一个覆盖,它将隐藏所有标记。
这是我的真实代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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 |
对于像我这样一个笨手笨脚,有同样问题的人来说,这是解决办法……
确保没有在循环语句中添加层的代码。我创建了300+层,每个层都有300+个标记。
如果只有一个图层,然后在上面添加数百个标记,那么只要不循环添加图层,就可以了。愚蠢的错误!
只需将代码更改为:
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循环之外。
附言:哦,你找到答案了,干杯!