mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-26 11:08:13 +00:00
only return polygon if &polygon_geojson=1 is set
This commit is contained in:
committed by
Sarah Hoffmann
parent
45bc511955
commit
0eb71cdce8
@@ -38,7 +38,7 @@ $aPlaceDetails['lon'] = (float) $aPointDetails['lon'];
|
|||||||
|
|
||||||
$aPlaceDetails['geometry'] = json_decode($aPointDetails['asgeojson']);
|
$aPlaceDetails['geometry'] = json_decode($aPointDetails['asgeojson']);
|
||||||
|
|
||||||
$funcMapAddressLines = function($aFull) {
|
$funcMapAddressLines = function ($aFull) {
|
||||||
$aMapped = [
|
$aMapped = [
|
||||||
'localname' => $aFull['localname'],
|
'localname' => $aFull['localname'],
|
||||||
'place_id' => (int) $aFull['place_id'],
|
'place_id' => (int) $aFull['place_id'],
|
||||||
@@ -53,7 +53,7 @@ $funcMapAddressLines = function($aFull) {
|
|||||||
return $aMapped;
|
return $aMapped;
|
||||||
};
|
};
|
||||||
|
|
||||||
$funcMapKeywords = function($aFull) {
|
$funcMapKeywords = function ($aFull) {
|
||||||
$aMapped = [
|
$aMapped = [
|
||||||
'id' => (int) $aFull['word_id'],
|
'id' => (int) $aFull['word_id'],
|
||||||
'token' => $aFull['word_token']
|
'token' => $aFull['word_token']
|
||||||
@@ -62,29 +62,29 @@ $funcMapKeywords = function($aFull) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
if ($aAddressLines) {
|
if ($aAddressLines) {
|
||||||
$aPlaceDetails['address'] = array_map($funcLines, $aAddressLines);
|
$aPlaceDetails['address'] = array_map($funcMapAddressLines, $aAddressLines);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($aLinkedLines) {
|
if ($aLinkedLines) {
|
||||||
$aPlaceDetails['linked_places'] = array_map($funcLines, $aLinkedLines);
|
$aPlaceDetails['linked_places'] = array_map($funcMapAddressLines, $aLinkedLines);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($bIncludeKeywords) {
|
if ($bIncludeKeywords) {
|
||||||
$aPlaceDetails['keywords'] = array();
|
$aPlaceDetails['keywords'] = array();
|
||||||
|
|
||||||
if ($aPlaceSearchNameKeywords) {
|
if ($aPlaceSearchNameKeywords) {
|
||||||
$aPlaceDetails['keywords']['name'] = array_map($funcKeywords, $aPlaceSearchNameKeywords);
|
$aPlaceDetails['keywords']['name'] = array_map($funcMapKeywords, $aPlaceSearchNameKeywords);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($aPlaceSearchAddressKeywords) {
|
if ($aPlaceSearchAddressKeywords) {
|
||||||
$aPlaceDetails['keywords']['address'] = array_map($funcKeywords, $aPlaceSearchAddressKeywords);
|
$aPlaceDetails['keywords']['address'] = array_map($funcMapKeywords, $aPlaceSearchAddressKeywords);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($bIncludeChildPlaces) {
|
if ($bIncludeChildPlaces) {
|
||||||
$aPlaceDetails['parentof'] = array_map($funcLines, $aParentOfLines);
|
$aPlaceDetails['parentof'] = array_map($funcMapAddressLines, $aParentOfLines);
|
||||||
|
|
||||||
if ($bGroupParents) {
|
if ($bGroupChildPlaces) {
|
||||||
$aGroupedAddressLines = [];
|
$aGroupedAddressLines = [];
|
||||||
foreach ($aParentOfLines as $aAddressLine) {
|
foreach ($aParentOfLines as $aAddressLine) {
|
||||||
if ($aAddressLine['type'] == 'yes') $sType = $aAddressLine['class'];
|
if ($aAddressLine['type'] == 'yes') $sType = $aAddressLine['class'];
|
||||||
|
|||||||
43
test/bdd/api/details/params.feature
Normal file
43
test/bdd/api/details/params.feature
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
@APIDB
|
||||||
|
Feature: Object details
|
||||||
|
Testing different parameter options for details API.
|
||||||
|
|
||||||
|
Scenario: JSON Details
|
||||||
|
When sending json details query for W78099902
|
||||||
|
Then the result is valid json
|
||||||
|
And result has attributes geometry
|
||||||
|
And result has not attributes keywords,address,linked_places,parentof
|
||||||
|
|
||||||
|
Scenario: JSON Details with keywords
|
||||||
|
When sending json details query for W78099902
|
||||||
|
| keywords |
|
||||||
|
| 1 |
|
||||||
|
Then the result is valid json
|
||||||
|
And result has attributes keywords
|
||||||
|
|
||||||
|
Scenario: JSON Details with addressdetails
|
||||||
|
When sending json details query for W78099902
|
||||||
|
| addressdetails |
|
||||||
|
| 1 |
|
||||||
|
Then the result is valid json
|
||||||
|
And result has attributes address
|
||||||
|
|
||||||
|
Scenario: JSON Details with linkedplaces
|
||||||
|
When sending json details query for R123924
|
||||||
|
| linkedplaces |
|
||||||
|
| 1 |
|
||||||
|
Then the result is valid json
|
||||||
|
And result has attributes linked_places
|
||||||
|
|
||||||
|
Scenario: JSON Details with childplaces
|
||||||
|
When sending json details query for W78099902
|
||||||
|
| childplaces |
|
||||||
|
| 1 |
|
||||||
|
Then the result is valid json
|
||||||
|
And result has attributes parentof
|
||||||
|
|
||||||
|
Scenario: JSON Details with linkedplaces
|
||||||
|
When sending json details query for R123924
|
||||||
|
| linkedplaces |
|
||||||
|
| 1 |
|
||||||
|
Then the result is valid json
|
||||||
@@ -3,15 +3,30 @@ Feature: Object details
|
|||||||
Check details page for correctness
|
Check details page for correctness
|
||||||
|
|
||||||
Scenario Outline: Details via OSM id
|
Scenario Outline: Details via OSM id
|
||||||
When sending details query for <object>
|
When sending <format> details query for <object>
|
||||||
Then the result is valid html
|
Then the result is valid <format>
|
||||||
|
|
||||||
Examples:
|
Examples:
|
||||||
| object |
|
| format | object |
|
||||||
| 492887 |
|
| html | 492887 |
|
||||||
| N4267356889 |
|
| json | 492887 |
|
||||||
| W230804120 |
|
| html | N4267356889 |
|
||||||
| R123924 |
|
| json | N4267356889 |
|
||||||
|
| html | W230804120 |
|
||||||
|
| json | W230804120 |
|
||||||
|
| html | R123924 |
|
||||||
|
| json | R123924 |
|
||||||
|
|
||||||
|
Scenario Outline: Details via unknown OSM id
|
||||||
|
When sending <format> details query for <object>
|
||||||
|
Then a HTTP 400 is returned
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
| format | object |
|
||||||
|
| html | 1 |
|
||||||
|
| json | 1 |
|
||||||
|
| html | R1 |
|
||||||
|
| json | R1 |
|
||||||
|
|
||||||
Scenario: Details with keywords
|
Scenario: Details with keywords
|
||||||
When sending details query for W78099902
|
When sending details query for W78099902
|
||||||
@@ -19,35 +34,3 @@ Feature: Object details
|
|||||||
| 1 |
|
| 1 |
|
||||||
Then the result is valid html
|
Then the result is valid html
|
||||||
|
|
||||||
Scenario: JSON Details
|
|
||||||
When sending json details query for W78099902
|
|
||||||
Then the result is valid json
|
|
||||||
And result has not attributes place_search_name_keywords,place_search_address_keywords,address_lines,linked_lines,parentof_lines
|
|
||||||
|
|
||||||
Scenario: JSON Details with keywords
|
|
||||||
When sending json details query for W78099902
|
|
||||||
| keywords |
|
|
||||||
| 1 |
|
|
||||||
Then the result is valid json
|
|
||||||
And result has attributes place_search_name_keywords,place_search_address_keywords
|
|
||||||
|
|
||||||
Scenario: JSON Details with addressdetails
|
|
||||||
When sending json details query for W78099902
|
|
||||||
| addressdetails |
|
|
||||||
| 1 |
|
|
||||||
Then the result is valid json
|
|
||||||
And result has attributes address_lines
|
|
||||||
|
|
||||||
Scenario: JSON Details with linkedplaces
|
|
||||||
When sending json details query for R123924
|
|
||||||
| linkedplaces |
|
|
||||||
| 1 |
|
|
||||||
Then the result is valid json
|
|
||||||
And result has attributes linked_lines
|
|
||||||
|
|
||||||
Scenario: JSON Details with childplaces
|
|
||||||
When sending json details query for W78099902
|
|
||||||
| childplaces |
|
|
||||||
| 1 |
|
|
||||||
Then the result is valid json
|
|
||||||
And result has attributes parentof_lines
|
|
||||||
|
|||||||
@@ -23,7 +23,8 @@ $bIncludeKeywords = $oParams->getBool('keywords');
|
|||||||
$bIncludeAddressDetails = $oParams->getBool('addressdetails', $sOutputFormat == 'html');
|
$bIncludeAddressDetails = $oParams->getBool('addressdetails', $sOutputFormat == 'html');
|
||||||
$bIncludeLinkedPlaces = $oParams->getBool('linkedplaces', $sOutputFormat == 'html');
|
$bIncludeLinkedPlaces = $oParams->getBool('linkedplaces', $sOutputFormat == 'html');
|
||||||
$bIncludeChildPlaces = $oParams->getBool('childplaces', $sOutputFormat == 'html');
|
$bIncludeChildPlaces = $oParams->getBool('childplaces', $sOutputFormat == 'html');
|
||||||
$bGroupParents = $oParams->getBool('group_parents', false);
|
$bGroupChildPlaces = $oParams->getBool('group_childplaces', false);
|
||||||
|
$bIncludePolygonAsGeoJSON = $oParams->getBool('polygon_geojson', $sOutputFormat == 'html');
|
||||||
|
|
||||||
$oDB =& getDB();
|
$oDB =& getDB();
|
||||||
|
|
||||||
@@ -108,17 +109,22 @@ $sSQL .= ' rank_search, ';
|
|||||||
$sSQL .= ' get_searchrank_label(rank_search) AS rank_search_label,';
|
$sSQL .= ' get_searchrank_label(rank_search) AS rank_search_label,';
|
||||||
$sSQL .= " get_name_by_language(name,$sLanguagePrefArraySQL) AS localname, ";
|
$sSQL .= " get_name_by_language(name,$sLanguagePrefArraySQL) AS localname, ";
|
||||||
$sSQL .= " ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') AS isarea, ";
|
$sSQL .= " ST_GeometryType(geometry) in ('ST_Polygon','ST_MultiPolygon') AS isarea, ";
|
||||||
//$sSQL .= " ST_Area(geometry::geography) AS area, ";
|
|
||||||
$sSQL .= ' ST_y(centroid) AS lat, ';
|
$sSQL .= ' ST_y(centroid) AS lat, ';
|
||||||
$sSQL .= ' ST_x(centroid) AS lon,';
|
$sSQL .= ' ST_x(centroid) AS lon, ';
|
||||||
$sSQL .= ' CASE ';
|
$sSQL .= ' CASE ';
|
||||||
$sSQL .= ' WHEN importance = 0 OR importance IS NULL THEN 0.75-(rank_search::float/40) ';
|
$sSQL .= ' WHEN importance = 0 OR importance IS NULL ';
|
||||||
|
$sSQL .= ' THEN 0.75-(rank_search::float/40) ';
|
||||||
$sSQL .= ' ELSE importance ';
|
$sSQL .= ' ELSE importance ';
|
||||||
$sSQL .= ' END as calculated_importance, ';
|
$sSQL .= ' END as calculated_importance, ';
|
||||||
$sSQL .= ' ST_AsGeoJSON(CASE ';
|
if ($bIncludePolygonAsGeoJSON) {
|
||||||
$sSQL .= ' WHEN ST_NPoints(geometry) > 5000 THEN ST_SimplifyPreserveTopology(geometry, 0.0001) ';
|
$sSQL .= ' ST_AsGeoJSON(CASE ';
|
||||||
$sSQL .= ' ELSE geometry ';
|
$sSQL .= ' WHEN ST_NPoints(geometry) > 5000 ';
|
||||||
$sSQL .= ' END) as asgeojson';
|
$sSQL .= ' THEN ST_SimplifyPreserveTopology(geometry, 0.0001) ';
|
||||||
|
$sSQL .= ' ELSE geometry ';
|
||||||
|
$sSQL .= ' END) as asgeojson';
|
||||||
|
} else {
|
||||||
|
$sSQL .= ' ST_AsGeoJSON(centroid) as asgeojson';
|
||||||
|
}
|
||||||
$sSQL .= ' FROM placex ';
|
$sSQL .= ' FROM placex ';
|
||||||
$sSQL .= " WHERE place_id = $iPlaceID";
|
$sSQL .= " WHERE place_id = $iPlaceID";
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user