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>";
}
}
}
}