Возможно ли с помощью kml и google maps

Я хочу знать, возможно ли это с картами Google. Я создаю 2 небольшие сетки на картах Google с файлом kml.

Как я могу узнать с помощью php, указан ли мой адрес в сетке 1 или 2. Нужна помощь, пожалуйста.


person nomie    schedule 10.02.2011    source источник


Ответы (1)


Я написал код именно для этого, но вместо сетки для районов Великобритании.

Мне пришлось читать файл KML, как XML, используя DOMDocument::load(), это позволяет вам читать файл KML и получать содержащиеся в нем точки долготы и широты. Имейте в виду, что мне пришлось немного изменить KML, чтобы это работало. Во-первых, после создания пользовательской карты в Google Maps щелкните правой кнопкой мыши и скопируйте ссылку Google Earth - это даст что-то вроде этого

http://maps.google.co.uk/maps/ms?ie=UTF8&hl=en&vps=1&jsv=314b&msa=0&output=nl

Вы должны изменить вывод на kml, посетить и сохранить вывод, я пропустил здесь часть этого URL, чтобы не отдавать мою карту!

http://maps.google.co.uk/maps/ms?ie=UTF8&hl=en&vps=1&jsv=314b&msa=0&output=kml

Затем мне пришлось удалить элемент <kml>, удалив следующие строки

<kml xmlns="http://earth.google.com/kml/2.2">

И

</kml>

Это оставит вас только с элементом <Document>, который содержит точку. Затем вы читаете это с помощью DOMDocument и перебираете его, чтобы получить содержащиеся в нем координаты. Например, вы можете затем перебирать метки и их координаты, создавая многоугольник, а затем пересекая его с помощью длинного. Я использовал этот сайт для кода полигона http://www.assemblysys.com/dataServices/php_pointinpolygon.php . В этом примере это класс 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;
    }
}
person Jake N    schedule 10.02.2011
comment
Я попробую это, но я новичок, и больше половины этого материала не понимаю... - person nomie; 10.02.2011