public function parseKML($kml, $kmlId) { $doc = new DOMDocument("1.0"); $doc->preserveWhiteSpace = false; $doc->loadXML($kml); /* * Get geometry information only, store it in placemarkArray */ $placemarkTagArray = $doc->getElementsByTagName("Placemark"); if (count($placemarkTagArray) > 0) { $id = 0; foreach ($placemarkTagArray as $node) { $geometryArray = $this->getGeometryArrayFromPlacemarkOrMultigeometryNode($node); $metadataArray = $this->getMetadataFromPlacemarkNode($node); /* * For a placemark, the geometryArray should only contain 1 geometry! */ for ($i = 0; $i < count($geometryArray); $i++) { $currentPlacemark = new KMLPlacemark($geometryArray[$i]); foreach ($metadataArray as $key => $value) { $currentPlacemark->setProperty($key, $value); } $currentPlacemark->setProperty("Mapbender:kml", true); $currentPlacemark->setProperty("Mapbender:name", "unknown"); $currentPlacemark->setProperty("Mapbender:id", $kmlId); $currentPlacemark->setProperty("Mapbender:placemarkId", $id); // add description and name: $namesNode = $node->getElementsByTagName('name'); if ($namesNode->length > 0) { $name = $namesNode->item(0)->nodeValue; } $descriptionsNode = $node->getElementsByTagName('description'); if ($descriptionsNode->length > 0) { $description = $descriptionsNode->item(0)->nodeValue; } $currentPlacemark->setProperty("name", $name); $currentPlacemark->setProperty("description", $description); array_push($this->placemarkArray, $currentPlacemark); } $id++; } } else { $e = new mb_exception("class_kml.php: KMLOWSParser: No placemarks found in KML."); return false; } return true; }