检查纬度和经度的公式在没有 Google Maps Api 的区域内

Posted

技术标签:

【中文标题】检查纬度和经度的公式在没有 Google Maps Api 的区域内【英文标题】:Formula to Check Latitude & Longitude is within Area without 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 试过了,我想离线 【参考方案1】:

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

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

【讨论】:

【参考方案2】:

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

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

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

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

    检查点 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) 来解决您的问题。

您需要做的就是:

    插入多边形的坐标

    询问图书馆是这个多边形内的任何带 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

【讨论】:

以上是关于检查纬度和经度的公式在没有 Google Maps Api 的区域内的主要内容,如果未能解决你的问题,请参考以下文章

使用 Bing 或 Google Maps API 获取用户的位置(纬度、经度)

使用地理编码器和 android Google Maps API v2 获取纬度和经度

在 Google Maps API 中使用地址而不是经度和纬度

使用地理编码器和Android Google Maps API v2获取经度和纬度

Android Google Maps V2 当前位置 纬度 经度 NullPointerException

PHP 使用Google Maps API获取纬度和经度