2017-04-24 18 views
1

LatLngの位置(ユーザの現在の位置)とベアリング(ポリゴンの中心から)があります。私はその場所が現在ポリゴンの内部にあることを知っています。ポリゴンの中心とユーザーの位置からベアリングを得ることができます。LatLngの位置と方位を与えられたポリゴンの端の位置を計算する

センターからのベアリングを与えられたポリゴンの端にあるポイントを知る必要があります。私はこれを中心線とポリゴンの境界線の交点と想定していますが、Google Maps APIやオンラインの例でヘルパーは表示されません。

これはJavaでGoogle Maps SDKを使用して書かれていますが、私はすべての言語、特にJavascriptのソリューションに感謝します。

以下の粗く描かれた図は、その問題を(願わくばに)より明確に示しています。

Polygon with user location and centre

ここでは(ない)中心位置とユーザの位置と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; 
} 

答えて

2

あなたが与えられたポイントが一定の許容範囲内で、多角形の辺上にある場合に返されるisLocationOnEdge(point:LatLng, poly:Polygon|Polyline, tolerance?:number)を使用することができますドキュメントによります。見出しにcomputeOffsetを使用すると、必要なものが見つかるまで、パスに沿ってポイントをテストすることができます。

私はクライアント側の技術に多大な幸運をもたらしたわけではありません。私の好みの方法は通常、PostGISのような空間データベースを利用したサーバーコールで、すべての分析をオフロードすることができます。 ESRIのJavaScript apiを見ることができます。

+0

ありがとうございました!非常に役立ちます。私は 'computeOffset'がおそらく私たちが探していたものだと思っていますが、これは私たちに与えられた許容範囲内の読みを与えるだけです。即ち、1mの精度でポリゴンの中心から10mの距離にある。トレードオフは、計算時間と精度の間の反復内のステップ/許容距離です。 これは、モバイルデバイス上で実行する必要があります。移動するとユーザーの位置が変わるたびに更新されるため、リアルタイムで実行する必要があります。私たちは100msの位置更新と漸進的な反復でこれを行うことがどれほど費用がかかるかをテストしなければならないと思います。 –

+0

もう一つのアイデアもありました。可能であれば、ローカルプロジェクションで作業する方がはるかに高速で簡単です(例: UTMまたはState Planarを使用することができます。このようにして、すべての計算は単なるユークリッドのジオメトリであり、おそらくあなた自身で行うことができます。もちろん、世界中の場所をサポートする必要がある場合、これはおそらくそれが価値よりも面倒です。 – sovemp

+0

残念ながら、私たちはヨーロッパ各地のコンテンツを扱っているため、米国特有の解決策では実際には行けません。とにかく思ってくれてありがとう。 –

関連する問題