[英]Is it possible with kml and google maps
I want to know if this is possible with google maps. 我想知道使用谷歌地图是否可行。 I create a 2 small grids on google maps with kml file.
我在带有kml文件的Google地图上创建了2个小网格。
How can I find out using php of if my address is listed in grid 1 or 2. Need help please. 如何使用php找出我的地址是否列在网格1或2中。
I wrote code for doing exactly this, but rather than grids, for areas of the UK. 我写的代码就是这样做的,而不是为英国地区的网格做的。
I had to read the KML file like XML using DOMDocument::load()
, this enables you to read the KML file and get the longitude and latitude points it contains. 我必须使用
DOMDocument::load()
读取XML之类的KML文件,这使您能够读取KML文件并获取其包含的经度和纬度点。 Bear in mind though that I had to change the KML slightly for this to work. 请记住,尽管我必须稍微更改KML才能起作用。 Firstly after building your custom map in Google Maps right click and copy the Google Earth link - this will give something like this
首先,在Google地图中构建自定义地图后,右键单击并复制Google Earth链接-这样会得到类似的结果
http://maps.google.co.uk/maps/ms?ie=UTF8&hl=en&vps=1&jsv=314b&msa=0&output=nl
http://maps.google.co.uk/maps/ms?ie=UTF8&hl=zh-CN&vps=1&jsv=314b&msa=0&output=nl
You should change the output to kml
, visit then save the output, I have ommitted part of this URL here as not to give away my map! 您应该将输出更改为
kml
,访问然后保存输出,在此我省略了该URL的一部分,以免丢失我的地图!
http://maps.google.co.uk/maps/ms?ie=UTF8&hl=en&vps=1&jsv=314b&msa=0&output=kml
http://maps.google.co.uk/maps/ms?ie=UTF8&hl=zh-CN&vps=1&jsv=314b&msa=0&output=kml
I then had to remove the <kml>
element be removing the following lines 然后,我必须删除
<kml>
元素,然后删除以下几行
<kml xmlns="http://earth.google.com/kml/2.2">
And 和
</kml>
This will leave you with just the <Document>
element which contains the point. 这将只剩下包含该点的
<Document>
元素。 You then read this using DOMDocument and iterate over it to get the coordinates it contains. 然后,您可以使用DOMDocument读取此内容并对其进行迭代以获取其包含的坐标。 For example you can then iterate over the Placemarks and their coordinates, creating a polygin and then intersecting that with the long.
例如,您然后可以遍历地标及其坐标,创建polygin,然后将其与long相交。 I used this site for the polygon code http://www.assemblysys.com/dataServices/php_pointinpolygon.php .
我将此网站用于多边形代码http://www.assemblysys.com/dataServices/php_pointinpolygon.php 。 It is a Util class in this example:
在此示例中,它是一个Util类:
$dom = new DOMDocument();
$dom->load(APPLICATION_PATH . self::REGIONS_XML);
$xpath = new DOMXpath($dom);
$result = $xpath->query("/Document/Placemark");
foreach($result as $i => $node)
{
$name = $node->getElementsByTagName("name")->item(0)->nodeValue;
$polygon = array();
// For each coordinate
foreach($node->getElementsByTagName("coordinates") as $j => $coord)
{
// Explode and parse coord to get meaningful data from it
$coords = explode("\n" , $coord->nodeValue);
foreach($coords as $k => $coordData)
{
if(strlen(trim($coordData)) < 1)
continue;
$explodedData = explode("," , trim($coordData));
// Add the coordinates to the polygon array for use in the
// polygon Util class. Note that the long and lat are
// switched here because the polygon class expected them
// a specific way around
$polygon[] = $explodedData[1] . " " . $explodedData[0];
}
}
// This is your address point
$point = $lat . " " . $lng;
// Determine the location of $point in relation to $polygon
$location = $pointLocation->pointInPolygon($point, $polygon);
// $location will be a string, this is documented in the polygon link
if($location == "inside" || $location == "boundary")
{
// If location is inside or on the boundary of this Placemark then break
// and $name will contain the name of the Placemark
break;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.