我需要帮助,谷歌让我感到沮丧。
我有一个多边形http://geojson.io/#id=gist:anonymous/069b8a955897723ca256&map=4/58.75/48.03 它覆盖了很大的面积。 我有一个叫做geoPHP的库https://github.com/phayes/geoPHP 其中包含contains、covers、coveredBy等方法...
一切都正常,除了像74.224074, 96.428248这样的点总是对于这个多边形的 contains、coveredBy、covers等方法为false。但它必须是true。
请告诉我为什么。我头痛得要命。
或者
请告诉我,如何检查纬度和经度是否在多边形内。我尝试过3个Perl和PHP库,编写自己的代码等...但我只从Google的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在地图上绘制多边形。 它以正确的方式制作(纬度,经度)
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));