これに遭遇した他の人にとっては、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 で作成され、対処できることを願っています。