only return polygon if &polygon_geojson=1 is set

This commit is contained in:
Marc Tobias Metten
2018-03-19 01:34:48 +01:00
committed by Sarah Hoffmann
parent 45bc511955
commit 0eb71cdce8
4 changed files with 87 additions and 55 deletions

View File

@@ -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'];

View 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

View File

@@ -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

View File

@@ -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";