通过在折线上处理右键单击方法,将这两个标记都放置在Google地图上,即:
google.maps.event.addListener(polyline, 'rightclick', myMethodThatHandlesIt);
问题在于我试图通过C#spatial Geography.Intersects()来定位点(第一个位于顶部),而且它不相交。
它完全取决于它看起来的变焦。再次通过右键单击(缩小的)折线创建的顶部距离实际折线超过1千米。
有没有办法确保将标记放在线上,就像在两个线端之间一样?
答案 0 :(得分:1)
因为它提供了更好的用户体验,所以标记,线条和形状的命中框略大于实际项目。因此,如果您单击关闭,则计数。这对精确度没有帮助。
对于折线,您需要实现对齐线功能以查找实际折线上的闭合点。这个答案提供了一些指导:Find a point in a polyline which is closest to a latlng
答案 1 :(得分:0)
对于遇到这种情况的任何其他人,我无法找到一种干净的方式在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;
}
另外{4}}是在Googleland创建的,希望可以解决。