--- /tmp/kml/kml.module 2007-09-21 03:27:06.000000000 +1000
+++ kml.module 2008-06-28 21:11:53.000000000 +1000
@@ -688,21 +688,50 @@ function kml_format_placemark($item, $li
$output .= " ". $timestamp ."\n";
}
}
+
+ // Strip any geometry information from args
+ $geometrys = array();
+ $force_multi = FALSE;
+
+ // Handle MultiGeometry on it's own.
+ if ($args['MultiGeometry']) {
+ $geometrys[] = $args['MultiGeometry'] . "\n";
+ unset($args['MultiGeometry']);
+ $force_multi = TRUE;
+ }
+
+ $geo_types = array('Point', 'LineString', 'LinearRing', 'Polygon', 'Model');
+ foreach ($geo_types as $geo_type) {
+ if ($args[$geo_type]) {
+ $geometrys[] = "<$geo_type>" . $args[$geo_type] . "$geo_type>\n";
+ unset($args[$geo_type]);
+ }
+ }
// Coordinate information
$lat = $item->location['latitude'];
$long = $item->location['longitude'];
if ($lat && $long) {
- $output .= " \n";
+ $point = " \n";
$pointelements = array('altitudeMode', 'extrude'); // elements that extend Point
foreach ($pointelements as $pointelement) {
if ($args[$pointelement]) {
- $output .= " <$pointelement>". $args[$pointelement] ."$pointelement>\n";
+ $point .= " <$pointelement>". $args[$pointelement] ."$pointelement>\n";
unset($args[$pointelement]);
}
}
- $output .= ' '. $long .','. $lat .','. $alt ."\n";
- $output .= " \n";
+ $point .= ' '. $long .','. $lat .','. $alt ."\n";
+ $point .= " \n";
+ $geometrys[] = $point;
+ }
+ if ($force_multi or count($geometrys) > 1) {
+ $output .= "\n";
+ while ($geometrys) {
+ $output .= array_shift($geometrys);
+ }
+ $output .= "\n";
+ } else if (count($geometrys)) {
+ $output .= array_shift($geometrys);
}
// Address information. Needs city and country at a minimum.