2

私は自分の質問に答えています(うまくいけばあなたの利益のために)が、これが問題です:

ポリラインを使用して世界地図を作成しました (Google maps API v3)。これらの行の一部は、IDL (国際日付変更線) にまたがっています。いくつかの行に方向矢印を配置したいのですが、各行の中央に 1 つの矢印があります。IDL にまたがる線では、2 つの端点を平均して計算された矢印の中心: (latlng1.lat()+latlng2.lat()/2)、(latlng1.lng()+latlng2.lng()/2)実際の線の中心ではなく、マップ上に浮動矢印を残して、世界中を反対方向に線を引きます。

私は最初に、線の逆を取得し、どちらが使用されたかを何らかの方法で決定するための式を探しました。しかし、それは地図表示に依存しすぎています。最初に線の端点をピクセルに変換すると、線の端点から中心を取得できるかどうかまで確認しましたが、データ変換は結果に影響しませんでした。

そこで、ポリラインで交差メソッドを探して、チェックするポイントを渡すことを考えました-そうでない場合は、逆の線から中心点を見つけます(180-center.lng()になると思います)が、そこにポリラインの交差方法ではありません。境界にはいくつかの交差/包含メソッドがあるため、境界オブジェクトを調べ始めました。

したがって、比較的文書化されていない問題に対する非常に簡単な解決策を次に示します。

(境界を取得する関数の功績は、ty の Ben Appleton に帰属します):

function getBoundsForPoly(poly) {
  var bounds = new google.maps.LatLngBounds;
  poly.getPath().forEach(function(latLng) {
  bounds.extend(latLng);
  });
  return bounds;
}

var poly_bounds = MapAbstraction.get_poly_bounds(line);
var center_point =poly_bounds.getCenter();

次に、center_point をマーカー作成ツールに渡して、どの方向に描かれたかを気にせずに、線の実際の中心に矢印を生成できます。

4

0 に答える 0