private static function printArray($val) { foreach ($val as $key => $value) { $array = $value; if (is_object($array)) { $array = get_object_vars($value); } $lat_long = GeoHelper::findLatLong($array); $coords = array(); if (!empty($array)) { $coordskey = GeoHelper::keyExists("coords", $array); if (!$coordskey) { $coordskey = GeoHelper::keyExists("coordinates", $array); } if ($lat_long) { $name = self::xmlgetelement($array); $extendeddata = self::getExtendedDataElement($array); } elseif ($coordskey) { if (is_array($array[$coordskey])) { if (!empty($array[$coordskey]['@text'])) { $array[$coordskey] = $array[$coordskey]['@text']; } } $coords = explode(";", $array[$coordskey]); unset($array[$coordskey]); $name = self::xmlgetelement($array); $extendeddata = self::getExtendedDataElement($array); } else { self::printArray($array); } if ($lat_long || count($coords) != 0) { $name = htmlspecialchars($key); if (!empty(self::$map_property) && !empty($array[self::$map_property])) { $name = $array[self::$map_property]; } $description = ''; if (!empty($key) && is_numeric($key)) { $description = "<![CDATA[<a href='" . \URL::to(self::$definition['collection_uri'] . '/' . self::$definition['resource_name']) . '/' . htmlspecialchars($key) . ".map'>" . \URL::to(self::$definition['collection_uri'] . '/' . self::$definition['resource_name']) . '/' . htmlspecialchars($key) . "</a>]]>"; } echo "<Placemark><name>" . $name . "</name><Description>" . $description . "</Description>"; echo $extendeddata; if ($lat_long) { // For data read from XML latitude and longitude will be an array of @value = 3.342... $lat_val = $array[$lat_long[0]]; $lon_val = $array[$lat_long[1]]; if (!empty($lat_long[2]) && !empty($array[$lat_long[2]])) { $z_val = $array[$lat_long[2]]; if (is_array($lat_val)) { $lat_val = reset($lat); } if (is_array($lon_val)) { $lon_val = reset($lon_val); } if (is_array($z_val)) { $z_val = reset($z_val); } if ($lat_val != 0 || $lon_val != 0) { echo "<Point><coordinates>" . $lon_val . "," . $lat_val . "," . $z_val . "</coordinates></Point>"; } } else { if (is_array($lat_val)) { $lat_val = reset($lat); } if (is_array($lon_val)) { $lon_val = reset($lon_val); } if ($lat_val != 0 || $lon_val != 0) { echo "<Point><coordinates>" . $lon_val . "," . $lat_val . "</coordinates></Point>"; } } } if (count($coords) > 0) { if (count($coords) == 1) { echo "<Polygon><outerBoundaryIs><LinearRing><coordinates>" . $coords[0] . "</coordinates></LinearRing></outerBoundaryIs></Polygon>"; } else { echo "<MultiGeometry>"; foreach ($coords as $coord) { echo "<LineString><coordinates>" . $coord . "</coordinates></LineString>"; } echo "</MultiGeometry>"; } } echo "</Placemark>"; } } } }