Мне было интересно, может ли кто-нибудь помочь мне.
У меня есть файл KML (Google Maps XML), и мне нужно извлечь координаты в двумерный массив.
Формат файла следующий:
<?xml version="1.0" encoding="UTF-8"?>
<kml
xmlns="http://earth.google.com/kml/2.1">
<Document>
<Placemark>
<name>Im a name</name>
<Point>
<coordinates>138.611798,-34.926053</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Im a name</name>
<Point>
<coordinates>138.611798,-34.926053</coordinates>
</Point>
</Placemark>
<Placemark>
<name>Im a name</name>
<Point>
<coordinates>138.611798,-34.926053</coordinates>
</Point>
</Placemark>
[...]
Мне нужно иметь возможность вернуть массив в следующем формате:
Array
(
[0] => Array
(
[0] => 138.611798
[1] => -34.926053
)
[1] => Array
(
[0] => 138.611798
[1] => -34.926053
)
Мой KML-файл будет содержать несколько точек, поэтому мне нужно сделать это автоматически.
Любая помощь могла бы быть полезна.
Спасибо
Вы можете просто использовать SimpleXML, чтобы получить нужные значения и поместить их в массив. Пример:
$data = array();
$xml = simplexml_load_file('path/to/file.kml');
foreach($xml->Document->Placemark as $placemark) {
list($x, $y) = explode(',', $placemark->Point->coordinates); // explode coordinates by comma
$data[] = array($x, $y);
}
echo '<pre>';
print_r($data);
Вы можете использовать XPath для этого. Только не забудьте установить пространство имен.
$xml = simplexml_load_file('kml.xml');
$xml->registerXPathNamespace('ns', 'http://earth.google.com/kml/2.1');
$names = $xml->xpath('//ns:coordinates');
$coordinates = array();
foreach($names as $name) {
$coordinates[] = explode( ',', $name );
}
print_r( $coordinates );