LatLngの位置(ユーザの現在の位置)とベアリング(ポリゴンの中心から)があります。私はその場所が現在ポリゴンの内部にあることを知っています。ポリゴンの中心とユーザーの位置からベアリングを得ることができます。LatLngの位置と方位を与えられたポリゴンの端の位置を計算する
センターからのベアリングを与えられたポリゴンの端にあるポイントを知る必要があります。私はこれを中心線とポリゴンの境界線の交点と想定していますが、Google Maps APIやオンラインの例でヘルパーは表示されません。
これはJavaでGoogle Maps SDKを使用して書かれていますが、私はすべての言語、特にJavascriptのソリューションに感謝します。
以下の粗く描かれた図は、その問題を(願わくばに)より明確に示しています。
ここでは(ない)中心位置とユーザの位置とjsfiddleです。
function initialize() {
var map = new google.maps.Map(document.getElementById("map"), {
zoom: 4,
center: new google.maps.LatLng(22.7964, 79.8456),
mapTypeId: google.maps.MapTypeId.HYBRID
});
var coords = [
new google.maps.LatLng(18.979026, 72.949219), //Mumbai
new google.maps.LatLng(28.613459, 77.255859), //Delhi
new google.maps.LatLng(22.512557, 88.417969), //Kolkata
new google.maps.LatLng(12.940322, 77.607422), //Bengaluru
];
metros = new google.maps.Polygon({
paths: coords,
strokeColor: "#0000FF",
strokeOpacity: 0.8,
strokeWeight: 2,
fillColor: "#0000FF",
fillOpacity: 0.26
});
userPos = new google.maps.LatLng(21.1952534, 81.2680344);
userMarker = new google.maps.Marker({
position: userPos,
map: map
});
centrePos = new google.maps.LatLng(22.049832, 78.9022019);
centreMarker = new google.maps.Marker({
position: centrePos,
map: map
});
heading = google.maps.geometry.spherical.computeHeading(centrePos, userPos);
metros.setMap(map);
var metros;
var userMarker;
var centreMarker;
var heading;
}
ありがとうございました!非常に役立ちます。私は 'computeOffset'がおそらく私たちが探していたものだと思っていますが、これは私たちに与えられた許容範囲内の読みを与えるだけです。即ち、1mの精度でポリゴンの中心から10mの距離にある。トレードオフは、計算時間と精度の間の反復内のステップ/許容距離です。 これは、モバイルデバイス上で実行する必要があります。移動するとユーザーの位置が変わるたびに更新されるため、リアルタイムで実行する必要があります。私たちは100msの位置更新と漸進的な反復でこれを行うことがどれほど費用がかかるかをテストしなければならないと思います。 –
もう一つのアイデアもありました。可能であれば、ローカルプロジェクションで作業する方がはるかに高速で簡単です(例: UTMまたはState Planarを使用することができます。このようにして、すべての計算は単なるユークリッドのジオメトリであり、おそらくあなた自身で行うことができます。もちろん、世界中の場所をサポートする必要がある場合、これはおそらくそれが価値よりも面倒です。 – sovemp
残念ながら、私たちはヨーロッパ各地のコンテンツを扱っているため、米国特有の解決策では実際には行けません。とにかく思ってくれてありがとう。 –