xml — PHP Как извлечь расширенные данные из файла kml

Я использую следующий PHP для извлечения координат из файла kml:

$xml = simplexml_load_file('data.kml');
$data = $xml->Document->Folder->Placemark;

foreach ($data as $record) {
$coordinates = $record->MultiGeometry->Polygon->outerBoundaryIs->LinearRing->coordinates[0];
}

Это прекрасно работает для координат. Но как я могу Extact ExtendedData?

Файл kml, который я использую:

<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns:gx="http://www.google.com/kml/ext/2.2" xmlns:atom="http://www.w3.org/2005/Atom" xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>pc4_single_vlak</name>
<visibility>1</visibility>
<Schema name="pc4_single_vlak" id="kml_schema_ft_pc4_single_vlak">
<SimpleField type="xsd:string" name="pc4">
<displayName>pc4</displayName>
</SimpleField>
<SimpleField type="xsd:string" name="woonplaats">
<displayName>woonplaats</displayName>
</SimpleField>
<SimpleField type="xsd:string" name="wplnaam_uniek">
<displayName>wplnaam_uniek</displayName>
</SimpleField>
<SimpleField type="xsd:string" name="gemeente">
<displayName>gemeente</displayName>
</SimpleField>
<SimpleField type="xsd:string" name="provincie">
<displayName>provincie</displayName>
</SimpleField>
</Schema>
<Folder id="kml_ft_pc4_single_vlak">
<name>pc4_single_vlak</name>
<Placemark id="kml_1">
<name>kml_1</name>
<snippet></snippet>
<ExtendedData>
<SchemaData schemaUrl="#kml_schema_ft_pc4_single_vlak">
<SimpleData name="pc4">4001</SimpleData>
<SimpleData name="woonplaats">Tiel</SimpleData>
<SimpleData name="wplnaam_uniek">Tiel</SimpleData>
<SimpleData name="gemeente">Tiel</SimpleData>
<SimpleData name="provincie">Gelderland</SimpleData>
</SchemaData>
</ExtendedData>
<MultiGeometry>
<Polygon>
<outerBoundaryIs>
<LinearRing>
<coordinates>...</coordinates>
</LinearRing>
</outerBoundaryIs>
</Polygon>
</MultiGeometry>
</Placemark>
</Folder>
</Document>
</kml>

Я перепробовал разные вещи, но не могу заставить его работать.

0

Решение

Я не уверен, где сбой, но, надеюсь, это обеспечит некоторую ясность.

Давайте возьмем родителя ExtendedData:

echo $record->ExtendedData;

Никаких атрибутов, только дочерние, давайте получим schemaUrl из первого дочернего элемента SchemaData:

echo $record->ExtendedData->SchemaData[0]['schemaUrl'];

Получая атрибуты, вы обращаетесь к ним как к индексу элемента.

Вот рабочий пример

0

Другие решения

Я нашел решение своего вопроса :). Я думаю, это не лучший способ сделать это. Но я использовал следующий код, чтобы добраться до различных полей SimpleData:

echo $record->ExtendedData->SchemaData->SimpleData[0];
echo $record->ExtendedData->SchemaData->SimpleData[1];
echo $record->ExtendedData->SchemaData->SimpleData[2];

Энц ..

Снова. Я уверен, что есть лучшее решение для этого. Если кто-то знает, пожалуйста, прокомментируйте!

0

По вопросам рекламы [email protected]