对于遇到此问题的其他任何人,我无法找到一种干净的 Javascript 方法,最终我不需要这样做。制造商可能有点偏离,但我需要将其坚持为与线相交的点。因此,在我存储之前,可以使用以下方法来更改标记位置。
我选择使用具有以下方法的 Microsoft.SqlServer.Types.SqlGeography
Geography.ShortestLineTo(OtherGeography)
这给出了一条带有两个点的新线,一个在用户的标记位置,另一个在距离路线/折线/线串最近的交叉点。
新线的末端是路径上最接近用户右键单击折线的点。
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;
}
此外,问题 5887是在 Googleland 中创建的,希望能够解决。