]> git.openstreetmap.org Git - nominatim.git/blobdiff - website/reverse.php
Merge branch 'patch-1' of https://github.com/Firefishy/Nominatim
[nominatim.git] / website / reverse.php
index aac99c0d1151cc45521743b762f2b1c3502f6826..c155fa573030fa54cb5a71629727b808dc2be972 100755 (executable)
@@ -28,8 +28,8 @@
        $bShowAddressDetails = true;
        if (isset($_GET['addressdetails'])) $bShowAddressDetails = (bool)$_GET['addressdetails'];
 
        $bShowAddressDetails = true;
        if (isset($_GET['addressdetails'])) $bShowAddressDetails = (bool)$_GET['addressdetails'];
 
-        // Prefered language
-        $aLangPrefOrder = getPrefferedLangauges();
+        // Preferred language
+        $aLangPrefOrder = getPreferredLanguages();
         $sLanguagePrefArraySQL = "ARRAY[".join(',',array_map("getDBQuoted",$aLangPrefOrder))."]";
 
        $hLog = logStart($oDB, 'reverse', $_SERVER['QUERY_STRING'], $aLangPrefOrder);
         $sLanguagePrefArraySQL = "ARRAY[".join(',',array_map("getDBQuoted",$aLangPrefOrder))."]";
 
        $hLog = logStart($oDB, 'reverse', $_SERVER['QUERY_STRING'], $aLangPrefOrder);
@@ -69,7 +69,7 @@
                        18 => 30, // or >, Building
                        19 => 30, // or >, Building
                        );
                        18 => 30, // or >, Building
                        19 => 30, // or >, Building
                        );
-               $iMaxRank = isset($aZoomRank[$_GET['zoom']])?$aZoomRank[$_GET['zoom']]:28;
+               $iMaxRank = (isset($_GET['zoom']) && isset($aZoomRank[$_GET['zoom']]))?$aZoomRank[$_GET['zoom']]:28;
 
                // Find the nearest point
                $fSearchDiam = 0.0001;
 
                // Find the nearest point
                $fSearchDiam = 0.0001;
                        $sSQL .= ' WHERE ST_DWithin('.$sPointSQL.', geometry, '.$fSearchDiam.')';
                        $sSQL .= ' and rank_search != 28 and rank_search >= '.$iMaxRank;
                        $sSQL .= ' and (name is not null or housenumber is not null)';
                        $sSQL .= ' WHERE ST_DWithin('.$sPointSQL.', geometry, '.$fSearchDiam.')';
                        $sSQL .= ' and rank_search != 28 and rank_search >= '.$iMaxRank;
                        $sSQL .= ' and (name is not null or housenumber is not null)';
-                       $sSQL .= ' and class not in (\'waterway\')';
+                       $sSQL .= ' and class not in (\'waterway\',\'railway\',\'tunnel\',\'bridge\')';
                        $sSQL .= ' and (ST_GeometryType(geometry) not in (\'ST_Polygon\',\'ST_MultiPolygon\') ';
                        $sSQL .= ' OR ST_DWithin('.$sPointSQL.', ST_Centroid(geometry), '.$fSearchDiam.'))';
                        $sSQL .= ' ORDER BY ST_distance('.$sPointSQL.', geometry) ASC limit 1';
 //var_dump($sSQL);
                        $aPlace = $oDB->getRow($sSQL);
                        $sSQL .= ' and (ST_GeometryType(geometry) not in (\'ST_Polygon\',\'ST_MultiPolygon\') ';
                        $sSQL .= ' OR ST_DWithin('.$sPointSQL.', ST_Centroid(geometry), '.$fSearchDiam.'))';
                        $sSQL .= ' ORDER BY ST_distance('.$sPointSQL.', geometry) ASC limit 1';
 //var_dump($sSQL);
                        $aPlace = $oDB->getRow($sSQL);
-                       $iPlaceID = $aPlace['place_id'];
-                       $iParentPlaceID = $aPlace['parent_place_id'];
-                       if (PEAR::IsError($iPlaceID))
+                       if (PEAR::IsError($aPlace))
                        {
                                failInternalError("Could not determine closest place.", $sSQL, $iPlaceID); 
                        }
                        {
                                failInternalError("Could not determine closest place.", $sSQL, $iPlaceID); 
                        }
+                       $iPlaceID = $aPlace['place_id'];
+                       $iParentPlaceID = $aPlace['parent_place_id'];
                }
 
                // The point we found might be too small - use the address to find what it is a child of
                }
 
                // The point we found might be too small - use the address to find what it is a child of
                        $aAddress = getAddressDetails($oDB, $sLanguagePrefArraySQL, $iPlaceID, $aPlace['country_code']);
                }
                $aClassType = getClassTypes();
                        $aAddress = getAddressDetails($oDB, $sLanguagePrefArraySQL, $iPlaceID, $aPlace['country_code']);
                }
                $aClassType = getClassTypes();
-                $sAddressType = '';
-                if (isset($aClassType[$aPlace['class'].':'.$aPlace['type'].':'.$aPlace['admin_level']]))
-                        $sAddressType = $aClassType[$aPlace['class'].':'.$aPlace['type'].':'.$aPlace['admin_level']]['simplelabel'];
-                elseif (isset($aClassType[$aPlace['class'].':'.$aPlace['type']]))
-                        $sAddressType = $aClassType[$aPlace['class'].':'.$aPlace['type']]['simplelabel'];
-                else $sAddressType = $aPlace['class'];
-                $aPlace['addresstype'] = $sAddressType;
+               $sAddressType = '';
+               $sClassType = $aPlace['class'].':'.$aPlace['type'].':'.$aPlace['admin_level'];
+               if (isset($aClassType[$sClassType]) && isset($aClassType[$sClassType]['simplelabel']))
+               {
+                       $sAddressType = $aClassType[$aClassType]['simplelabel'];
+               }
+               else
+               {
+                       $sClassType = $aPlace['class'].':'.$aPlace['type'];
+                       if (isset($aClassType[$sClassType]) && isset($aClassType[$sClassType]['simplelabel']))
+                               $sAddressType = $aClassType[$sClassType]['simplelabel'];
+                       else $sAddressType = $aPlace['class'];
+               }
+               $aPlace['addresstype'] = $sAddressType;
 
        }
        include(CONST_BasePath.'/lib/template/address-'.$sOutputFormat.'.php');
 
        }
        include(CONST_BasePath.'/lib/template/address-'.$sOutputFormat.'.php');