4

ポリラインのリストがあります。グーグルマップポリラインをクリックしたときと同じように、クリックした場所に情報ウィンドウを表示したいのですが、この機能で問題なく動作します。

function mapsInfoWindow(polyline, content) {
    google.maps.event.addListener(polyline, 'click', function(event) {            
        infowindow.content = content;
        infowindow.position = event.latLng;
        infowindow.open(map);
    });
}

リストをクリックすると(同じ関数を使用して)問題が発生します。イベントには明らかにlatLngがありませんが、とにかくポリラインの中央に情報ウィンドウを表示したいのですが、前に述べたグーグルマップのリンクのリストをクリックします。

LatLngBounds();を試しました しかし、それは私が必要とする中央ではなく、ポリラインが作成する領域の実際の中心を与えます。

それを行う方法はありますか?

4

5 に答える 5

5

つまり、これは(ビットハッキー)ソリューションです。

http://www.geocodezip.com/scripts/v3_epoly.jsライブラリを使用してから、ポリラインの全長を数え(さまざまな方法)、半分に分割して、epolyの.GetPointsAtDistance()関数を呼び出します。

これはLatLngポイントを返すはずですが、2つのポイントを返すか、そのポイントを何らかの形で「壊れた」状態にするなど、少し奇妙な動作をすることがあります。したがって、あなたができる最も安全なことはおそらくこれです:

var pointInHalf = polyline.GetPointsAtDistance(polylineLength);
var pointCoordinate = new google.maps.LatLng(pointInHalf[0].lat(), pointInHalf[0].lng());

まあ、何もないよりはましだ。

于 2011-12-19T17:19:58.850 に答える
4

http://www.geocodezip.com/v3_polyline_example_geodesic_proj.htmlから

延長なしで、ポリラインが直線であると仮定します。

緯度/経度座標を点平面(x、y)位置に変換し、2つの間の平均を計算することができます。これにより、中央のピクセル位置が得られます。次に、この位置をマッププロット用のlatlngに戻すことができます。

var startLatLng = startMarker.getPosition(); 
var endLatLng = endMarker.getPosition(); 
var startPoint = projection.fromLatLngToPoint(startLatLng); 
var endPoint = projection.fromLatLngToPoint(endLatLng); 
// Average 
var midPoint = new google.maps.Point( 
    (startPoint.x + endPoint.x) / 2, 
    (startPoint.y + endPoint.y) / 2); 
// Unproject 
var midLatLng = projection.fromPointToLatLng(midPoint); 
var midMarker = createMarker(midLatLng, "text");

投影の変更に関する詳細情報http://code.google.com/apis/maps/documentation/javascript/reference.html#Projection

于 2012-02-01T03:36:56.913 に答える
2

したがって、最初に、距離を計算するジオメトリライブラリを使用する必要があります。JS呼び出しにlibrary=geometryを追加します。例:

<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?libraries=geometry"></script>

ポリラインの始点と終点がわかっているとすると、次のことができるはずです。

var inBetween = google.maps.geometry.spherical.interpolate(startLatlng, endLatlng, 0.5);  
infowindow.position = inBetween;

開始点と終了点がわからない場合は、polyline.getPath()から計算できます。

于 2011-10-19T13:30:32.110 に答える
2

ポリラインの座標を取得するには、次のようにする必要があります。

var widePath = new google.maps.Polyline({
path: waypointsCoordinates,
strokeColor: '#3366FF',
strokeOpacity: 0.0,
editable: true,
draggable: true,                       
strokeWeight: 3
});

そして、やります:

var latLng [];
latLng = widePath.getPath().getArray();
于 2015-09-11T17:23:07.607 に答える
2

少し古いかもしれませんが、クリックでインフォボックスを追加してみませんか?

infowindow.setPosition(event.latLng);
infowindow.open(this.getMap());

それがクリックの場合です。

于 2016-03-21T16:15:26.453 に答える