PHP如何从kml文件中提取扩展数据

时间:2014-10-14 16:21:04

标签: php xml dom 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];
}

这适用于坐标。但是我怎样才能扩展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>

我尝试了各种各样的事情,但我无法让它发挥作用。

2 个答案:

答案 0 :(得分:0)

我不确定打嗝在哪里,但希望这提供了一些清晰度。

让我们获取ExtendedData父级:

echo $record->ExtendedData;

但是没有属性,只有子节点,让我们从第一个SchemaData子节点获取schemaUrl:

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

获取属性时,可以将它们作为元素的索引进行访问。

Here's a working example

答案 1 :(得分:0)

我找到了自己的问题的解决方案:)。我认为这不是最好的方法。但是我使用下面的代码来获取不同的SimpleData字段:

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

ENZ ..

再次。我相信有更好的解决方案。如果有人知道,请发表评论!