]> git.openstreetmap.org Git - nominatim.git/blobdiff - website/details.php
move error messages to consistent 'userError' function and return 400 Bad Request
[nominatim.git] / website / details.php
index a4cb8b960072e4fde4fa7124c2c3bbb6126cdfc2..c92e3f77ce3849b3d7b9206a8dc52f57bcee793c 100755 (executable)
        if (isset($_GET['osmtype']) && isset($_GET['osmid']) && (int)$_GET['osmid'] && ($_GET['osmtype'] == 'N' || $_GET['osmtype'] == 'W' || $_GET['osmtype'] == 'R'))
        {
                $_GET['place_id'] = $oDB->getOne("select place_id from placex where osm_type = '".$_GET['osmtype']."' and osm_id = ".(int)$_GET['osmid']." order by type = 'postcode' asc");
+
+               // Be nice about our error messages for broken geometry
+               if (!$_GET['place_id'])
+               {
+                       $sErrorMessage = $oDB->getOne("select ST_IsValidReason(geometry) from place where osm_type = '".$_GET['osmtype']."' and osm_id = ".(int)$_GET['osmid']." order by type = 'postcode' asc");
+                       if (!PEAR::isError($sErrorMessage) && $sErrorMessage) {
+                               echo "Problem with geometry: ";
+                               echo $sErrorMessage;
+                               exit;
+                       }
+               }
        }
 
        if (!isset($_GET['place_id']))
@@ -33,7 +44,7 @@
        $iParentPlaceID = $oDB->getOne('select parent_place_id from location_property_aux where place_id = '.$iPlaceID);
        if ($iParentPlaceID) $iPlaceID = $iParentPlaceID;
 
-       $aLangPrefOrder = getPrefferedLangauges();
+       $aLangPrefOrder = getPreferredLanguages();
        $sLanguagePrefArraySQL = "ARRAY[".join(',',array_map("getDBQuoted",$aLangPrefOrder))."]";
 
        $hLog = logStart($oDB, 'details', $_SERVER['QUERY_STRING'], $aLangPrefOrder);
@@ -43,7 +54,7 @@
        //$oDB->query($sSQL);
 
        // Get the details for this point
-       $sSQL = "select place_id, osm_type, osm_id, class, type, name, admin_level, housenumber, street, isin, postcode, country_code, importance,";
+       $sSQL = "select place_id, osm_type, osm_id, class, type, name, admin_level, housenumber, street, isin, postcode, country_code, importance, wikipedia,";
        $sSQL .= " parent_place_id, rank_address, rank_search, get_searchrank_label(rank_search) as rank_search_label, get_name_by_language(name,$sLanguagePrefArraySQL) as localname, ";
        $sSQL .= " ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') as isarea,ST_GeometryType(geometry) as geotype, ST_Y(ST_Centroid(geometry)) as lat,ST_X(ST_Centroid(geometry)) as lon ";
        $sSQL .= " from placex where place_id = $iPlaceID";
        // Address
        $aAddressLines = getAddressDetails($oDB, $sLanguagePrefArraySQL, $iPlaceID, $aPointDetails['country_code'], true);
 
+       // Linked places
+       $sSQL = "select placex.place_id, osm_type, osm_id, class, type, housenumber, admin_level, rank_address, ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') as isarea, st_distance(geometry, placegeometry) as distance, ";
+       $sSQL .= " get_name_by_language(name,$sLanguagePrefArraySQL) as localname, length(name::text) as namelength ";
+       $sSQL .= " from placex, (select geometry as placegeometry from placex where place_id = $iPlaceID) as x";
+       $sSQL .= " where linked_place_id = $iPlaceID";
+       $sSQL .= " order by rank_address asc,rank_search asc,get_name_by_language(name,$sLanguagePrefArraySQL),housenumber";
+       $aLinkedLines = $oDB->getAll($sSQL);
+
        // All places this is an imediate parent of
        $sSQL = "select placex.place_id, osm_type, osm_id, class, type, housenumber, admin_level, rank_address, ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') as isarea, st_distance(geometry, placegeometry) as distance, ";
        $sSQL .= " get_name_by_language(name,$sLanguagePrefArraySQL) as localname, length(name::text) as namelength ";
        $sSQL .= " from placex, (select geometry as placegeometry from placex where place_id = $iPlaceID) as x";
        $sSQL .= " where parent_place_id = $iPlaceID";
-//     $sSQL .= " and type != 'postcode'";
        $sSQL .= " order by rank_address asc,rank_search asc,get_name_by_language(name,$sLanguagePrefArraySQL),housenumber";
        $aParentOfLines = $oDB->getAll($sSQL);