0

これらのマーカーは両方とも、ポリライン上で右クリック メソッドを処理することによって Google マップに配置されました。つまり、次のようになります。

google.maps.event.addListener(polyline, 'rightclick', myMethodThatHandlesIt);

問題は、C# 空間 Geography.Intersects() を介してポイント (最初のポイント) を見つけようとしていたことですが、交差しません。

ズームに完全に依存しているようです。(ズームアウトされた) ポリラインを右クリックして作成された一番上のものは、実際のポリラインから 1 km 以上離れています。

2 つの線端の間のように、マーカーが線上に配置されていることを確認する方法はありますか?

悲しいよグーグル

4

2 に答える 2

1

より良いユーザー エクスペリエンスを提供するため、マーカー、線、および図形のヒット ボックスは、実際のアイテムよりも若干大きくなっています。したがって、閉じるをクリックするとカウントされます。それは精度には役立ちません。

ポリラインの場合、実際のポリラインの終了点を見つけるには、線へのスナップ機能を実装する必要があります。この回答はいくつかのガイダンスを提供します:緯度経度に最も近いポリライン内のポイントを見つける

于 2013-10-04T11:08:23.350 に答える
0

これに遭遇した他の人にとっては、Javascriptでそれを行うクリーンな方法を理解できず、最終的には必要ありませんでした. マーカーは少しずれている可能性がありますが、線と交差する点として保持する必要があります。したがって、マーカーの位置を保存する前に変更するには、次の方法があります。

私は、メソッドを持つ Microsoft.SqlServer.Types.SqlGeography を使用することにしました

Geography.ShortestLineTo(OtherGeography)

1 つはユーザーのマーカーの位置、もう 1 つはルート/ポリライン/ラインストリングに最も近い交点です。

新しいラインの終点は、ルート上でユーザーがポリライン上で右クリックした場所に最も近いポイントです。

        public static System.Data.Spatial.DbGeography GetClosestPointOnRoute(System.Data.Spatial.DbGeography line, System.Data.Spatial.DbGeography point)
    {
        SqlGeography sqlLine = SqlGeography.Parse(line.AsText()).MakeValid(); //the linestring
        SqlGeography sqlPoint = SqlGeography.Parse(point.AsText()).MakeValid(); //the point i want on the line

        SqlGeography shortestLine = sqlPoint.ShortestLineTo(sqlLine); //find the shortest line from the linestring to point

        //lines have a start, and an end
        SqlGeography start = shortestLine.STStartPoint();
        SqlGeography end = shortestLine.STEndPoint();

        DbGeography newGeography = DbGeography.FromText(end.ToString(), 4326);

        var distance = newGeography.Distance(line);

        return newGeography;
    }

さらに、 Issue 5887が Googleland で作成され、対処できることを願っています。

于 2013-10-05T18:02:44.380 に答える