Я использую Delphi Berlin с компонентами Google Map GMLib v3 на 64-разрядной машине разработки Windows 10. Я хотел бы иметь возможность анимировать местоположения при нажатии на маркер или сетку при использовании функции LoadFromDataSet компонента GMMarker. Я не уверен, как это сделать.Как оживить маркеры с использованием GMLib и LoadFromDataset
Приложение моего ERP пытается проверить введенный адрес путем геокодирования введенного адреса и захвата возвращаемой широты и долготы, а затем сохранить эти значения в базе данных. Когда геокодирование возвращает несколько значений, я показываю экран с сеткой и карту, показывающую местоположения результатов геокодирования.
выполнить это, сначала добавляя все результаты к компоненту Listview, а затем обрабатывать каждый ListView пункт и добавить GMMarker для каждого случая следующим образом:
for I := 0 to ListView.Items.Count-1 do
begin
GMMarker1.Add(StrToFloat(ListView.Items[I].SubItems[2]),StrToFloat(ListView.Items[I].SubItems[1]),ListView.Items[I].Caption);
end;
Я тогда в состоянии получить доступ к методу анимации bounce и поместить Listview с помощью индекса GMMarker при нажатии маркера следующим образом:
procedure TfrmGeoCodeAdd.GMMarker1Click(Sender: TObject; LatLng: TLatLng;Index: Integer; LinkedComponent: TLinkedComponent);
begin
inherited;
if ListView.ItemIndex = Index then
HandleAnimation(Index)
else
ListView.ItemIndex := Index;
end;
procedure TfrmGeoCodeAdd.HandleAnimation(Index: integer);
begin
inherited;
if (AnimationIndex >= 0) then
begin
GMMarker1[AnimationIndex].Animation.Bounce := False;
end;
if (AnimationIndex = index) then
AnimationIndex := -1
else
begin
if GMMarker1[Index].Animation.Bounce then
GMMarker1[Index].Animation.Bounce := False
else
GMMarker1[Index].Animation.Bounce := True;
AnimationIndex := Index;
end;
end;
Это очень хорошо работает, когда я загружаю места в отдельные GMMarkers. Однако, как только база данных будет обновлена, я хочу выполнить аналогичную задачу, показывая все местоположения доставки на определенный день на карте google. Для этого я использую функцию LoadfromDataset в GMMarker следующим образом:
GMMarker1.LoadFromDataSet(cdsDeliveries, 'Latitude', 'Longitude', 'SO_NO', 'Marker', True);
GMMarker1.ZoomToPoints;
Это также работает очень хорошо, и производит следующую карту:
У меня есть проблема, что когда LoadFromDataSet является используемый, GMMarker.Count равен 1, хотя на карте есть множество маркеров. Поэтому я предполагаю, что должен использовать свойство VisualObjects GMMarker. Однако GMMarker.VisualObjects.Count также 1.
Мой вопрос:
Как я могу получить доступ к Animation.Bounce свойству маркеров на экране, когда я использую функцию GMMarkers.LoadFromDataset?
Любая помощь очень ценится.
Леонард