1

TGMDirection を使用して、クリックした 2 つのマーカー間のルートを表示します。ここと同じ考え方ですが、Delphi では GMLib 1.8 を使用しています: http://www.geocodezip.com/inventoresdegaragem_com_dbteste_indexB.html

最初の方向 エラーなしで表示されます。別のマーカーをもう一度クリックするとポップアップが表示され、スクリプト エラー: 行: 539 文字: 9 エラー: プロパティの値を取得できません close: object is null or undefined Code: 0 URL: about: blank

アイデアはありますか?私が使用するコードは次のとおりです。

procedure TForm1.GMMarker1DblClick(Sender: TObject; LatLng: TLatLng;
Index: Integer; LinkedComponent: TLinkedComponent);
begin
  if legcount = 0 then
  begin
    marker1index :=Index;
    legcount:=legcount+1;
  end
  else if legcount = 1 then 
  begin
    legcount:=0;
    marker2index :=Index;

    GMDirection1.DirectionsRequest.Origin.LatLng := GMMarker1.Items[marker1index].Position;
    GMDirection1.DirectionsRequest.Destination.LatLng := GMMarker1.Items[marker2index].Position;
    GMDirection1.Execute;

    if GMDirection1.DirectionsResult[routenr].Status = dsOK then 
    begin

      GMDirection1.Free;
    end;
    routenr:=routenr+1;
  end;
end;
4

2 に答える 2

2

InfoWindowCloseAll JavaScript 関数にバグが見つかりました。この問題を解決するには、2 つのオプションがあります。

1.- 簡単: マーカーを作成するときに、Marker.InfoWindow.CloseOtherBeforeOpen プロパティを False に設定します。

2.- 複雑: HTML コードを変更し、リソースとコンポーネントを再コンパイルする必要があります。これを行うには、.\Resources\map.html をテキスト エディター (Notepad++ など) で開き、InfoWindowCloseAll 関数を検索して、次のコードで変更します。

function InfoWindowCloseAll() {
  for (i = 0; i < linkedCompList.length; i++) {
    if (linkedCompList[i] instanceof google.maps.InfoWindow) {
      linkedCompList[i].close();
      linkedCompList[i].GMLibIWIsOpen = false;
    }
    else {
      if (!(linkedCompList[i] instanceof google.maps.DirectionsRenderer)) {
        linkedCompList[i].GMLibInfoWin.close();
        linkedCompList[i].GMLibInfoWin.GMLibIWIsOpen = false;
      }
    }
  }
}

変更を保存し、.\Resources\rc.cmd でリソースをコンパイルします。ここで、GMLib コンポーネントとアプリケーションを再コンパイルします。

よろしく

于 2012-11-27T22:43:14.453 に答える
0

これを行うのは非常に簡単です。3 つの GMLib コンポーネント (TGMMap、TGMMarker、TGMDirection) と TWebBrowser をリンクする必要があります。GMDirection1.HiddeOthers プロパティを false に設定し、OnClick GMMap イベントにこのコード行を挿入します。

procedure TForm1.GMMap1Click(Sender: TObject; LatLng: TLatLng; X, Y: Real);
begin
  GMMarker1.Add(LatLng.Lat, LatLng.Lng);
  if GMMarker1.Count mod 2 = 0 then
  begin
    GMDirection1.DirectionsRequest.Origin.LatLng.Assign(GMMarker1[GMMarker1.Count -   2].Position);
    GMDirection1.DirectionsRequest.Destination.LatLng.Assign(GMMarker1[GMMarker1.Count - 1].Position);
    GMDirection1.Execute;
  end;
end;

それだけです;-)

よろしく

于 2012-11-27T15:16:00.450 に答える