]> git.openstreetmap.org Git - nominatim.git/commitdiff
Merge branch 'feature/polygon-simplification' of https://github.com/a1exsh/Nominatim
authorSarah Hoffmann <lonvia@denofr.de>
Thu, 30 Apr 2015 19:26:11 +0000 (21:26 +0200)
committerSarah Hoffmann <lonvia@denofr.de>
Thu, 30 Apr 2015 19:26:11 +0000 (21:26 +0200)
lib/Geocode.php
website/search.php

index 5f4a01740a00490912c93626424f7b34b7ace640..212eebb97cc2a3b04f8a5369755fe6cc79163cc9 100644 (file)
@@ -12,6 +12,7 @@
                protected $bIncludePolygonAsGeoJSON = false;
                protected $bIncludePolygonAsKML = false;
                protected $bIncludePolygonAsSVG = false;
+               protected $fPolygonSimplificationThreshold = 0.0;
 
                protected $aExcludePlaceIDs = array();
                protected $bDeDupe = true;
                        $this->bIncludePolygonAsSVG = $b;
                }
 
+               function setPolygonSimplificationThreshold($f)
+               {
+                       $this->fPolygonSimplificationThreshold = $f;
+               }
+
                function setDeDupe($bDeDupe = true)
                {
                        $this->bDeDupe = (bool)$bDeDupe;
                                        if ($this->bIncludePolygonAsKML) $sSQL .= ",ST_AsKML(geometry) as askml";
                                        if ($this->bIncludePolygonAsSVG) $sSQL .= ",ST_AsSVG(geometry) as assvg";
                                        if ($this->bIncludePolygonAsText || $this->bIncludePolygonAsPoints) $sSQL .= ",ST_AsText(geometry) as astext";
-                                       $sSQL .= " from placex where place_id = ".$aResult['place_id'];
+                                       $sFrom = " from placex where place_id = ".$aResult['place_id'];
+                                       if ($this->fPolygonSimplificationThreshold > 0)
+                                       {
+                                               $sSQL .= " from (select place_id,centroid,ST_SimplifyPreserveTopology(geometry,".$this->fPolygonSimplificationThreshold.") as geometry".$sFrom.") as plx";
+                                       }
+                                       else
+                                       {
+                                               $sSQL .= $sFrom;
+                                       }
+
                                        $aPointPolygon = $this->oDB->getRow($sSQL);
                                        if (PEAR::IsError($aPointPolygon))
                                        {
index a9e20d4eb47e564fa4889b42312869ecd8b3462e..bf27ef9a8157e734536b60196f35f009cf3d19ba 100755 (executable)
                $oGeocode->setIncludePolygonAsSVG($bAsSVG);
        }
 
+       // Polygon simplification threshold (optional)
+       $fThreshold = 0.0;
+       if (isset($_GET['polygon_threshold'])) $fThreshold = (float)$_GET['polygon_threshold'];
+       $oGeocode->setPolygonSimplificationThreshold($fThreshold);
+
        $oGeocode->loadParamArray($_GET);
 
        if (CONST_Search_BatchMode && isset($_GET['batch']))