gpt4 book ai didi

php - 多边形中的geoPHP点

转载 作者:可可西里 更新时间:2023-11-01 00:14:12 30 4
gpt4 key购买 nike

我需要一些帮助,谷歌让我很伤心

我得到多边形 http://geojson.io/#id=gist:anonymous/069b8a955897723ca256&map=4/58.75/48.03它涵盖了很多。我得到了 geoPHP 库 https://github.com/phayes/geoPHP其中得到的方法包含、覆盖、覆盖……

一切正常,除了像 74.224074、96.428248 这样的点对于此多边形的方法包含、覆盖、覆盖等始终为假。但这一定是真的。

请告诉我为什么。我头疼。

请告诉我,如何检查经纬度是否在多边形内。我在 perl 和 php 中测试了大约 3 个库,制作了我自己的代码,等等......但是我只从 javascript 中的谷歌 containsLocation 获得了正确的结果。但我必须在服务器端使用它,而不是在浏览器中。如果有机会在 nodejs 中使用 containsLocation 那就太好了。

谢谢

A little code for geoPHP:
$a='JSON FROM LINK';
$b=geoPHP::load("POINT(74.224074 96.428248)","wkt");
$a=geoPHP::load($a, 'json');
$result=$a->contains($b);

var_dump($result);

它会是假的

编辑:我想我明白了。GeoJson 以错误的方式制作坐标,经度,纬度。但必须是纬度、经度。如果可行,将尝试然后写在这里

回答:

使用这个 www.birdtheme.org/useful/v3tool.html 在 map 上制作多边形。它以正确的方式(纬度,经度)

geoPHP 的工作代码:

    include_once('geoPHP.inc');
$addr=file_get_contents('https://maps.googleapis.com/maps/api/geocode/json?address='.urlencode($_GET['address']).'&sensor=false');
foreach($addr->{results} as $addr1)
{
if(array_key_exists("geometry",$addr1)){
$lat=$addr1->{geometry}->{location}->{lat};
$lng=$addr1->{geometry}->{location}->{lng};



break;
}
}
$point1 = geoPHP::load("POINT($lat $lng)","wkt");

$ya200=geoPHP::load("POLYGON((41.51 12.3, 38.27 28.83, 32.55 41.84, 27.6 55.55, 29.54 71.37, 33.43 83.32, 36.6 94.92, 36.6 99.49, 35.17 111.45, 32.55 124.8, 35.17 130.78, 39.64 142.73, 43.58 152.58, 45.83 166.29, 56.17 163.83, 63.07 159.26, 68.66 154.69, 72.18 148.71, 75.93 140.63, 78.49 129.02, 80.3 114.26, 80.98 100.2, 81.2 87.54, 80.87 73.83, 79.62 59.41, 76.27 40.43, 71.07 28.13, 67.2 23.2, 63.55 20.04, 59.01 17.23, 54.16 15.12, 48.46 13.36,41.51 12.3))","wkt");


var_dump($ya200->contains($point1));

最佳答案

我是 geoPHP 库 ( https://geophp.net) 的维护者。你有你的纬度和经度混淆。 WKT 指定 x 首先出现,然后是 y,然后(可选)z。这是有道理的,因为我们通常按 XYZ 顺序做事。

在数学中,横轴是 X,纵轴是 Y。如果我们想像一个地球仪覆盖在一张坐标纸上,并指定了 X 和 Y 轴,我们可以看到经度是横轴,对应X,纬度是纵轴,对应Y。所以把它读成“经度,纬度”是完全有道理的。

遗憾的是,这种合理的方法与历史上水手和其他制图师在地球上描述坐标的方式背道而驰。历史上它经常被描述为“纬度、经度”。

这种历史与数学约定的冲突是您在不同系统中看到不同约定的原因。在 Google Maps API 中是“纬度、经度”,而在 OpenLayers 中是“经度、纬度”。

在这种特殊情况下,您使用的是按“经度、纬度”顺序指定的 WKT。

关于php - 多边形中的geoPHP点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22649239/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com