X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/946f35e7ff04801da791528a18c81e858590c534..4057b21e1f73e539d4b0c581200b8365691e63f6:/website/reverse.php diff --git a/website/reverse.php b/website/reverse.php index aac99c0d..a0f5cea6 100755 --- a/website/reverse.php +++ b/website/reverse.php @@ -1,4 +1,6 @@ 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; @@ -95,18 +97,18 @@ $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 @@ -134,23 +136,31 @@ $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');