Производительность Gmap с большим количеством маркеров? - PullRequest
0 голосов
/ 05 января 2019

Я использую версию Gmap.NET для WinForm. Я создаю 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 отдельном наложении, чтобы я мог скрыть 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

Ответы [ 2 ]

0 голосов
/ 08 января 2019

Просто измените свой код следующим образом:

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: О, вы нашли ответ, ура!

0 голосов
/ 07 января 2019

Для всех, кто такой нуб, как я, и у которого такая же проблема, вот решение ...

Убедитесь, что у вас нет кода для добавления слоев внутри оператора цикла. Я создавал 300+ слоев с 300+ маркерами, назначенными каждому слою.

Если у вас есть только 1 слой, а затем добавлены сотни маркеров, у вас все будет хорошо, если вы не зацикливаете добавление слоев. Глупая ошибка!

...