X-Git-Url: https://git.openstreetmap.org./nominatim.git/blobdiff_plain/db3ced17bbfff00411f506d8c84419c875959d5e..5f09ba4e10b52b5154fb3e9211b8ec5fcfe82d91:/lib-php/website/details.php diff --git a/lib-php/website/details.php b/lib-php/website/details.php index 91440b54..98fb6ef7 100644 --- a/lib-php/website/details.php +++ b/lib-php/website/details.php @@ -1,4 +1,12 @@ getPreferredLanguages(); $sPlaceId = $oParams->getString('place_id'); $sOsmType = $oParams->getSet('osmtype', array('N', 'W', 'R')); -$iOsmId = $oParams->getInt('osmid', -1); +$iOsmId = $oParams->getInt('osmid', 0); $sClass = $oParams->getString('class'); $bIncludeKeywords = $oParams->getBool('keywords', false); @@ -30,7 +38,7 @@ $oDB->connect(); $sLanguagePrefArraySQL = $oDB->getArraySQL($oDB->getDBQuotedList($aLangPrefOrder)); -if ($sOsmType && $iOsmId > 0) { +if ($sOsmType && $iOsmId !== 0) { $sSQL = 'SELECT place_id FROM placex WHERE osm_type = :type AND osm_id = :id'; $aSQLParams = array(':type' => $sOsmType, ':id' => $iOsmId); // osm_type and osm_id are not unique enough @@ -53,7 +61,7 @@ if ($sOsmType && $iOsmId > 0) { // Be nice about our error messages for broken geometry - if (!$sPlaceId) { + if (!$sPlaceId && $oDB->tableExists('import_polygon_error')) { $sSQL = 'SELECT '; $sSQL .= ' osm_type, '; $sSQL .= ' osm_id, '; @@ -81,29 +89,35 @@ if ($sOsmType && $iOsmId > 0) { exit; } } -} - -if ($sPlaceId === false) userError('Please select a place id'); + if ($sPlaceId === false) { + throw new \Exception('No place with that OSM ID found.', 404); + } +} else { + if ($sPlaceId === false) { + userError('Required parameters missing. Need either osmtype/osmid or place_id.'); + } +} $iPlaceID = (int)$sPlaceId; if (CONST_Use_US_Tiger_Data) { $iParentPlaceID = $oDB->getOne('SELECT parent_place_id FROM location_property_tiger WHERE place_id = '.$iPlaceID); - if ($iParentPlaceID) $iPlaceID = $iParentPlaceID; + if ($iParentPlaceID) { + $iPlaceID = $iParentPlaceID; + } } // interpolated house numbers $iParentPlaceID = $oDB->getOne('SELECT parent_place_id FROM location_property_osmline WHERE place_id = '.$iPlaceID); -if ($iParentPlaceID) $iPlaceID = $iParentPlaceID; +if ($iParentPlaceID) { + $iPlaceID = $iParentPlaceID; +} // artificial postcodes $iParentPlaceID = $oDB->getOne('SELECT parent_place_id FROM location_postcode WHERE place_id = '.$iPlaceID); -if ($iParentPlaceID) $iPlaceID = $iParentPlaceID; - -if (CONST_Use_Aux_Location_data) { - $iParentPlaceID = $oDB->getOne('SELECT parent_place_id FROM location_property_aux WHERE place_id = '.$iPlaceID); - if ($iParentPlaceID) $iPlaceID = $iParentPlaceID; +if ($iParentPlaceID) { + $iPlaceID = $iParentPlaceID; } $hLog = logStart($oDB, 'details', $_SERVER['QUERY_STRING'], $aLangPrefOrder); @@ -140,11 +154,10 @@ $sSQL .= " WHERE place_id = $iPlaceID"; $aPointDetails = $oDB->getRow($sSQL, null, 'Could not get details of place object.'); if (!$aPointDetails) { - userError('Unknown place id.'); + throw new \Exception('No place with that place ID found.', 404); } $aPointDetails['localname'] = $aPointDetails['localname']?$aPointDetails['localname']:$aPointDetails['housenumber']; -$aPointDetails['rank_search_label'] = getSearchRankLabel($aPointDetails['rank_search']); // only used in HTML format // Get all alternative names (languages, etc) $sSQL = 'SELECT (each(name)).key,(each(name)).value FROM placex '; @@ -193,7 +206,7 @@ if ($bIncludeLinkedPlaces) { $aLinkedLines = $oDB->getAll($sSQL); } -// All places this is an imediate parent of +// All places this is an immediate parent of $aHierarchyLines = false; if ($bIncludeHierarchy) { $sSQL = 'SELECT obj.place_id, osm_type, osm_id, class, type, housenumber,';