【发布时间】:2014-03-26 00:36:20
【问题描述】:
我需要一些帮助,谷歌让我很难过
我得到了多边形http://geojson.io/#id=gist:anonymous/069b8a955897723ca256&map=4/58.75/48.03 它涵盖了很多。 我得到了geoPHP库https://github.com/phayes/geoPHP 哪些得到的方法包含、覆盖、覆盖...
一切正常,除了像 74.224074、96.428248 这样的点对于该多边形的 contains、coveredBy、covers 等方法始终为 false。但一定是真的。
请告诉我为什么。我头疼。
或
请告诉我,如何检查纬度 lng 是否在多边形内。我在 perl 和 php 中测试了大约 3 个库,制作了我自己的代码等......但我只从 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/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));
【问题讨论】:
标签: php node.js geolocation