- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我需要一些帮助,谷歌让我很伤心
我得到多边形 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/
我正在使用 GeoPHP获取我的 GeoJson 多边形的面积。 下面是我的功能。 /** * gets the areas in acres for field geojson polygons
我想读取mysql POINT列并将其转换为WKT。正如您所知,MySQL 中 GEOMETRY 的数据格式是 WKB,因此要使用 GeoPHP 进行转换,您应该: $wkb_reader = new
我是一名优秀的程序员,十分优秀!