【问题标题】:Check coordinate point between two points检查两点之间的坐标点
【发布时间】:2013-07-27 16:51:21
【问题描述】:

我需要验证坐标 LAT/LNG 点是否在其他两点之间(如道路的线段)。 我关注了THIS topic,但没有成功。

function inRange(start, point, end) {
    start_x = start.lat();
    start_y = start.lng();
    end_x = end.lat();
    end_y = end.lng();
    point_x = point.lat();
    point_y = point.lng();

    var dx = end_x - start_x;
    var dy = end_y - start_y;
    var innerProduct = (point_x - start_x)*dx + (point_y - start_y)*dy;
    return 0 <= innerProduct && innerProduct <= dx*dx + dy*dy;
}


function checkRange(start, point, end){
    var x1 = start.lat();
    var y1 = start.lng();
    var x2 = end.lat();
    var y2 = end.lng();
    var x = point.lat();
    var y = point.lng();

    if (x1 == x2) {  // special case
        return y1 < y2 ? (y1 <= y && y <= y2) : (y2 <= y && y <= y1);
    }

    var m = (y2 - y1) / (x2 - x1);
    var r1 = x1 + m * y1;
    var r2 = x2 + m * y2;
    var r = x + m * y;
    return r1 < r2 ? (r1 <= r && r <= r2) : (r2 <= r && r <= r1);
}
  • 第一次测试

开始:(44.4963217, 11.327993300000003)

结束:(44.4973624, 11.32760170000006)

点(44.4958434、11.328122000000008)

InRange == 假(确定) 所以Point成为新的起点

  • 第二次测试

开始:(44.4958434, 11.328122000000008)

结束:(44.4973624, 11.32760170000006)

点:(44.4966928, 11.32781620000003)

InRange == 假(错误) Point2 在开始/结束之间,但函数返回 false :(

【问题讨论】:

  • 我觉得你把这件事弄得太复杂了。暂时忘记“特殊情况”:return (point.lat() &lt; end.lat() &amp;&amp; point.lat() &gt; start.lat() &amp;&amp; point.lng() &lt; end.lng() &amp;&amp; point.lng &gt; start.lng()); 返回什么?
  • 您在第二次测试中的经度点不在起点经度和终点经度之间。 (11.32781620000003 &lt; 11.32760170000006 &amp;&amp; 11.32781620000003 &gt; 11.328122000000008) 返回 false。
  • 是的,但如果您查看 GMaps,您会发现第二个测试点位于起点和终点之间的道路上。
  • 那是学术性的。关键是您的方法正在按照应有的方式响应您传递给它的变量。那么,问题在于 GMaps 渲染或位置计算。

标签: javascript google-maps coordinates


【解决方案1】:

您的方法正在响应,因为它应该给出您传递的数据:

var start_lng = 11.328122000000008;

var end_lng = 11.32760170000006; // This longitude is less than the point longitude.

var point_lng = 11.32781620000003; // This longitude more than the end longitude.

【讨论】:

  • 同意这一点。关于这个问题的工作算法有什么想法吗?
  • 您必须更详细地了解如何获取数据以及为什么您期望它会有所不同。你在哪里绘制这些坐标?有没有一种工具可以让你在任何时候看到在 GMaps 上渲染的所有三个坐标?
  • 我们正在使用 GoogleMaps 开发 CityNotifier。用户可以在地图上通知事件,我使用交通通知来绘制 heatmpap 叠加层。 Here 是项目站点。我使用THIS 站点从坐标检查点。我回答你的问题吗? :)
  • 是的,这一切都说得通。不幸的是,我要去参加一个婚礼派对,所以我暂时无法寻找。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-10
  • 2021-08-04
  • 1970-01-01
  • 2014-01-16
  • 2011-05-09
相关资源
最近更新 更多