【问题标题】:Formula to Check Latitude & Longitude is within Area without Google Maps Api检查纬度和经度的公式在没有 Google Maps Api 的区域内
【发布时间】:2014-03-05 08:33:28
【问题描述】:

我有this 示例地图:

我制作边界多边形形状,

-6.875165174925262, 107.56293296813965
-6.882663904407988, 107.66730308532715
-6.980818117491586, 107.67210960388184
-6.97093546084682, 107.54508018493652

如何检查给定的 (Lat, Lng) -6.935884,107.611592 是否在该边界多边形内?

我需要在没有 Google Maps API 的情况下执行此操作,因为该程序将处于离线状态,并且必须比 Google API 的免费服务所允许的更频繁地检查。

我可以使用任何几何公式吗?尽可能使用 PHP 或 Python。

【问题讨论】:

  • 你已经尝试了什么?
  • 我用 Google API 试过了,我想离线

标签: javascript php python


【解决方案1】:

我终于得到了答案... Detect Point in Polygon

这个功能对我有很大帮助......而且效果很好...... 其他函数有时会给出错误的结果,无论是指向多边形内部还是外部

【讨论】:

    【解决方案2】:

    我不是 javascript 人,但看起来像是学校里的平面几何,假设你有带角的多边形

    A(x1, y1), B(x2, y2), C(x3, y3), D(x4, y4)

    如果您想检查点 E(X,Y) 是否位于多边形区域上,您可以这样做

    1. 像这样构造 AB、BC、CD、DA 各行的方程 y - y1 = m(x - x1) where m=(x1-x2)/(y1 - y2) where A(x1, y1) and B(x1, y2)

    2. 检查点 E(X, Y) 是否像这样位于直线的对应边上

    if (Y > m(X - x1) + y1)
    {
       // resides on the upper area
    }
    else (Y < m(X - x1) + y1)
    {
       // resides on the below area
    }
    else
    {
       // resides right on the line
    }
    

    【讨论】:

    • 那么如何输入给定的 long lat 呢?你能用样本 long lat 解释一下吗?
    • long 和 lat 与点 A(x1, y1) 的坐标相同,例如
    【解决方案3】:

    您可以尝试使用这个 PHP 库 (https://github.com/xopbatgh/sb-polygon-pointer) 来解决您的问题。

    您需要做的就是:

    1. 插入多边形的坐标

    2. 询问图书馆是这个多边形内的任何带 lat/lng 的点

    $polygonBox = [
        [55.761515, 37.600375],
        [55.759428, 37.651156],
        [55.737112, 37.649566],
        [55.737649, 37.597301],
    ];
    
    $sbPolygonEngine = new sbPolygonEngine($polygonBox);
    
    $isCrosses = $sbPolygonEngine->isCrossesWith(55.746768, 37.625605);
    
    // $isCrosses is boolean
    
    

    【讨论】:

      猜你喜欢
      • 2013-03-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-10
      • 1970-01-01
      • 1970-01-01
      • 2012-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多