]> git.openstreetmap.org Git - nominatim.git/blobdiff - website/reverse.php
Merge remote-tracking branch 'upstream/master'
[nominatim.git] / website / reverse.php
index 253b84a59357e7368d3d1087573050ea3e0a49cf..d43b05348640782f8bf2d83bcf3c574c8fce67cd 100755 (executable)
@@ -1,4 +1,6 @@
 <?php
+       @define('CONST_ConnectionBucket_PageType', 'Reverse');
+
        require_once(dirname(dirname(__FILE__)).'/lib/init-website.php');
        require_once(CONST_BasePath.'/lib/log.php');
 
@@ -44,8 +46,8 @@
        $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);
@@ -85,7 +87,7 @@
                        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;
                        $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 .= ' OR ST_DWithin('.$sPointSQL.', centroid, '.$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); 
                        }
+                       $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
                $sSQL .= " get_address_by_language(place_id, $sLanguagePrefArraySQL) as langaddress,";
                $sSQL .= " get_name_by_language(name, $sLanguagePrefArraySQL) as placename,";
                $sSQL .= " get_name_by_language(name, ARRAY['ref']) as ref,";
-               $sSQL .= " st_y(st_centroid(geometry)) as lat, st_x(st_centroid(geometry)) as lon";
+               $sSQL .= " st_y(centroid) as lat, st_x(centroid) as lon";
                $sSQL .= " from placex where place_id = $iPlaceID ";
-//var_dump($sSQL);
+
                $aPlace = $oDB->getRow($sSQL);
+//var_dump($sSQL, $aPlace); exit;
 
                if ($bShowAddressDetails)
                {
                        $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');