From: Arno Renevier Date: Thu, 27 Oct 2011 08:03:39 +0000 (+0200) Subject: merge linestrings for gpx containting multiple trkseg elements. X-Git-Tag: v.0.3.7~1 X-Git-Url: https://dev.renevier.net/?p=syj.git;a=commitdiff_plain;h=7504b7ccb77a798b20f4dbb003a90bcaee702124 merge linestrings for gpx containting multiple trkseg elements. --- diff --git a/application/controllers/PathController.php b/application/controllers/PathController.php index 394da69..af9d104 100644 --- a/application/controllers/PathController.php +++ b/application/controllers/PathController.php @@ -77,6 +77,18 @@ class PathController extends Zend_Controller_Action throw new Syj_Exception_InvalidGeomUpload(); } + // merge linestrings for gpx containting multiple trkseg elements. + if ($classname == 'gisconverter\\GPX' && $geom::name == 'GeometryCollection') { + $geomstring = ""; + foreach (array_filter($geom->components, function ($geom) { + return $geom::name == "LineString"; + }) as $linestring) { + $geomstring .= str_replace("", "", + str_replace("", "", $linestring->toGPX())); + } + $geom = $decoder->geomFromText("" . $geomstring . ""); + } + if ($geom::name != "LineString") { throw new Syj_Exception_InvalidGeomUpload(); } diff --git a/public/js/syj.js b/public/js/syj.js index 7864fe9..8f5f509 100644 --- a/public/js/syj.js +++ b/public/js/syj.js @@ -372,7 +372,7 @@ var SYJView = { this.messenger.setMessage(SyjStrings.uploadFileError, "warn"); }.bind(this); reader.onload = function(evt) { - var data = null, results = null, engine = null, vector = null, i = 0, formats = ['KML', 'GPX', 'GeoJSON']; + var data = null, results = null, engine = null, vector = null, i = 0, format = null, formats = ['KML', 'GPX', 'GeoJSON']; $("geom_upload_container").removeClassName("disabled"); $("geom_upload").disabled = false; @@ -383,7 +383,8 @@ var SYJView = { data = evt.target.result; for (i = 0; i < formats.length; i++) { - engine = new OpenLayers.Format[formats[i]]({ internalProjection: Mercator, externalProjection: WGS84 }); + format = formats[i]; + engine = new OpenLayers.Format[format]({ internalProjection: Mercator, externalProjection: WGS84 }); try { results = engine.read(data); } catch(e) { @@ -402,6 +403,12 @@ var SYJView = { readerror(); return; } + // merge linestrings for gpx containting multiple trkseg elements. + if (format === 'GPX') { + for (i = 1; i < results.length; i++) { + vector.geometry.addComponents(results[i].geometry.components); + } + } this.viewLayer.addFeatures([vector]); this.map.zoomToExtent(this.viewLayer.getDataExtent());