我需要帮助,谷歌让我很难过
我得到多边形http://geojson.io/#id=gist:anonymous/069b8a955897723ca256&map=4/58.75/48.03
它覆盖了很多。
我得到了geophp库https://github.com/phayes/geoPHP
得到的方法包括,掩护,掩护…
一切都是正常的,除了74.224074,96.428248对于这个多边形的包含,覆盖,覆盖等方法总是错误的。但这一定是真的。
请告诉我为什么。我头痛。

请告诉我,如何检查LAT液化天然气是否在多边形内。我用perl和php测试了大约3个库,编写了自己的代码,等等…但我得到的正确结果只是来自javascript中的google 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/usive/v3tool.html在地图上生成多边形。它以正确的方式(纬度,经度)
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,它是按“经度、纬度”顺序指定的。

08-18 18:11