]> git.openstreetmap.org Git - nominatim.git/blobdiff - lib/ReverseGeocode.php
fix large viewbox computation
[nominatim.git] / lib / ReverseGeocode.php
index 5648fedf26d83b2c053c924a0ad9ac24e45b35f9..60f3544916c09a4ee7b755f4da7244c873bdc175 100644 (file)
@@ -113,9 +113,8 @@ class ReverseGeocode
             $sSQL .= ' FROM placex';
             $sSQL .= ' WHERE osm_type = \'N\'';
             $sSQL .= ' AND country_code = \''.$sCountryCode.'\'';
-            $sSQL .= ' AND rank_search > 4';
-            $sSQL .= ' AND rank_search <= ' .min(25, $iMaxRank);
-            $sSQL .= ' AND type != \'postcode\'';
+            $sSQL .= ' AND rank_search between 5 and ' .min(25, $iMaxRank);
+            $sSQL .= ' AND class = \'place\' AND type != \'postcode\'';
             $sSQL .= ' AND name IS NOT NULL ';
             $sSQL .= ' and indexed_status = 0 and linked_place_id is null';
             $sSQL .= ' AND ST_DWithin('.$sPointSQL.', geometry, 5.0)) p ';
@@ -194,13 +193,12 @@ class ReverseGeocode
                 // using rank_search because of a better differentiation
                 // for place nodes at rank_address 16
                 $sSQL .= ' AND rank_search > '.$iRankSearch;
-                $sSQL .= ' AND rank_search <= ' .$iMaxRank;
+                $sSQL .= ' AND rank_search <= '.$iMaxRank;
                 $sSQL .= ' AND class = \'place\'';
                 $sSQL .= ' AND type != \'postcode\'';
                 $sSQL .= ' AND name IS NOT NULL ';
                 $sSQL .= ' AND indexed_status = 0 AND linked_place_id is null';
-                // preselection through bbox
-                $sSQL .= ' AND (SELECT geometry FROM placex WHERE place_id = '.$iPlaceID.') && geometry';
+                $sSQL .= ' AND ST_DWithin('.$sPointSQL.', geometry, reverse_place_diameter('.$iRankSearch.'::smallint))';
                 $sSQL .= ' ORDER BY distance ASC,';
                 $sSQL .= ' rank_address DESC';
                 $sSQL .= ' limit 500) as a';