]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib/Geocode.php
Check for positive polygon simplification threshold
[nominatim.git] / lib / Geocode.php
index a7adb2b98a06fe1f3fd6d05ae053f4621dcbcb13..6781ceecb9993bccdf89b746795ab9a7d8c68763 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;
 
                                preg_match_all('/\\[([\\w ]*)\\]/u', $sQuery, $aSpecialTermsRaw, PREG_SET_ORDER);
                                $aSpecialTerms = array();
-                               if (isset($aStructuredQuery['amenity']) && $aStructuredQuery['amenity'])
+                               if (isset($this->aStructuredQuery['amenity']) && $this->aStructuredQuery['amenity'])
                                {
-                                       $aSpecialTermsRaw[] = array('['.$aStructuredQuery['amenity'].']', $aStructuredQuery['amenity']);
-                                       unset($aStructuredQuery['amenity']);
+                                       $aSpecialTermsRaw[] = array('['.$this->aStructuredQuery['amenity'].']', $this->aStructuredQuery['amenity']);
+                                       unset($this->aStructuredQuery['amenity']);
                                }
                                foreach($aSpecialTermsRaw as $aSpecialTerm)
                                {
                                        foreach($aDatabaseWords as $aToken)
                                        {
                                                // Very special case - require 2 letter country param to match the country code found
-                                               if ($bStructuredPhrases && $aToken['country_code'] && !empty($aStructuredQuery['country'])
-                                                               && strlen($aStructuredQuery['country']) == 2 && strtolower($aStructuredQuery['country']) != $aToken['country_code'])
+                                               if ($bStructuredPhrases && $aToken['country_code'] && !empty($this->aStructuredQuery['country'])
+                                                               && strlen($this->aStructuredQuery['country']) == 2 && strtolower($this->aStructuredQuery['country']) != $aToken['country_code'])
                                                {
                                                        continue;
                                                }
 
                                if (CONST_Debug) var_Dump($aGroupedSearches);
 
-                               if (CONST_Search_TryDroppedAddressTerms && sizeof($aStructuredQuery) > 0)
+                               if (CONST_Search_TryDroppedAddressTerms && sizeof($this->aStructuredQuery) > 0)
                                {
                                        $aCopyGroupedSearches = $aGroupedSearches;
                                        foreach($aCopyGroupedSearches as $iGroup => $aSearches)
                                        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))
                                        {