protected $bExtraTags = false;
protected $bNameDetails = false;
- protected $bIncludePolygonAsPoints = false;
protected $bIncludePolygonAsText = false;
protected $bIncludePolygonAsGeoJSON = false;
protected $bIncludePolygonAsKML = false;
return $this->bDeDupe;
}
- public function setIncludePolygonAsPoints($b = true)
- {
- $this->bIncludePolygonAsPoints = $b;
- }
-
public function setIncludeAddressDetails($b)
{
$this->bAddressDetails = $b;
{
$aLangs = $oParams->getPreferredLanguages();
$this->aLangPrefOrderSql =
- 'ARRAY['.join(',', array_map('getDBQuoted', $aLangs)).']';
+ 'ARRAY['.join(',', $this->oDB->getDBQuotedList($aLangs)).']';
$this->bExtraTags = $oParams->getBool('extratags', false);
$this->bNameDetails = $oParams->getBool('namedetails', false);
if ($sGeomType === null || $sGeomType == 'geojson') {
$this->bIncludePolygonAsGeoJSON = $oParams->getBool('polygon_geojson');
- $this->bIncludePolygonAsPoints = false;
}
if ($oParams->getString('format', '') !== 'geojson') {
if ($this->bExtraTags) $aParams['extratags'] = '1';
if ($this->bNameDetails) $aParams['namedetails'] = '1';
- if ($this->bIncludePolygonAsPoints) $aParams['polygon'] = '1';
if ($this->bIncludePolygonAsText) $aParams['polygon_text'] = '1';
if ($this->bIncludePolygonAsGeoJSON) $aParams['polygon_geojson'] = '1';
if ($this->bIncludePolygonAsKML) $aParams['polygon_kml'] = '1';
public function setLanguagePreference($aLangPrefOrder)
{
- $this->aLangPrefOrderSql =
- 'ARRAY['.join(',', array_map('getDBQuoted', $aLangPrefOrder)).']';
+ $this->aLangPrefOrderSql = $this->oDB->getArraySQL(
+ $this->oDB->getDBQuotedList($aLangPrefOrder)
+ );
}
private function addressImportanceSql($sGeometry, $sPlaceId)
public function lookupOSMID($sType, $iID)
{
- $sSQL = "select place_id from placex where osm_type = '".$sType."' and osm_id = ".$iID;
- $iPlaceID = chksql($this->oDB->getOne($sSQL));
+ $sSQL = 'select place_id from placex where osm_type = :type and osm_id = :id';
+ $iPlaceID = $this->oDB->getOne($sSQL, array(':type' => $sType, ':id' => $iID));
if (!$iPlaceID) {
return null;
'ST_Collect(centroid)',
'min(CASE WHEN placex.rank_search < 28 THEN placex.place_id ELSE placex.parent_place_id END)'
);
- $sSQL .= " (extratags->'place') AS extra_place ";
+ $sSQL .= " COALESCE(extratags->'place', extratags->'linked_place') AS extra_place ";
$sSQL .= ' FROM placex';
$sSQL .= " WHERE place_id in ($sPlaceIDs) ";
$sSQL .= ' AND (';
$sSQL .= ' ref, ';
if ($this->bExtraTags) $sSQL .= 'extratags, ';
if ($this->bNameDetails) $sSQL .= 'name, ';
- $sSQL .= " extratags->'place' ";
+ $sSQL .= ' extra_place ';
$aSubSelects[] = $sSQL;
}
$sSQL = join(' UNION ', $aSubSelects);
Debug::printSQL($sSQL);
- $aPlaces = chksql($this->oDB->getAll($sSQL), 'Could not lookup place');
+ $aPlaces = $this->oDB->getAll($sSQL, null, 'Could not lookup place');
foreach ($aPlaces as &$aPlace) {
+ $aPlace['importance'] = (float) $aPlace['importance'];
if ($this->bAddressDetails) {
// to get addressdetails for tiger data, the housenumber is needed
$aPlace['address'] = new AddressDetails(
}
}
- $aPlace['addresstype'] = ClassTypes\getProperty(
+ $aPlace['addresstype'] = ClassTypes\getLabelTag(
$aPlace,
- 'simplelabel',
- $aPlace['class']
+ $aPlace['country_code']
);
+
+ $aResults[$aPlace['place_id']] = $aPlace;
}
- Debug::printVar('Places', $aPlaces);
+ $aResults = array_filter(
+ $aResults,
+ function ($v) {
+ return !($v instanceof Result);
+ }
+ );
+
+ Debug::printVar('Places', $aResults);
- return $aPlaces;
+ return $aResults;
}
/* returns an array which will contain the keys
if ($this->bIncludePolygonAsGeoJSON) $sSQL .= ',ST_AsGeoJSON(geometry) as asgeojson';
if ($this->bIncludePolygonAsKML) $sSQL .= ',ST_AsKML(geometry) as askml';
if ($this->bIncludePolygonAsSVG) $sSQL .= ',ST_AsSVG(geometry) as assvg';
- if ($this->bIncludePolygonAsText || $this->bIncludePolygonAsPoints) $sSQL .= ',ST_AsText(geometry) as astext';
+ if ($this->bIncludePolygonAsText) $sSQL .= ',ST_AsText(geometry) as astext';
if ($fLonReverse != null && $fLatReverse != null) {
$sFrom = ' from (SELECT * , CASE WHEN (class = \'highway\') AND (ST_GeometryType(geometry) = \'ST_LineString\') THEN ';
$sFrom .=' ST_ClosestPoint(geometry, ST_SetSRID(ST_Point('.$fLatReverse.','.$fLonReverse.'),4326))';
$sSQL .= $sFrom;
}
- $aPointPolygon = chksql($this->oDB->getRow($sSQL), 'Could not get outline');
+ $aPointPolygon = $this->oDB->getRow($sSQL, null, 'Could not get outline');
- if ($aPointPolygon['place_id']) {
+ if ($aPointPolygon && $aPointPolygon['place_id']) {
if ($aPointPolygon['centrelon'] !== null && $aPointPolygon['centrelat'] !== null) {
$aOutlineResult['lat'] = $aPointPolygon['centrelat'];
$aOutlineResult['lon'] = $aPointPolygon['centrelon'];
if ($this->bIncludePolygonAsKML) $aOutlineResult['askml'] = $aPointPolygon['askml'];
if ($this->bIncludePolygonAsSVG) $aOutlineResult['assvg'] = $aPointPolygon['assvg'];
if ($this->bIncludePolygonAsText) $aOutlineResult['astext'] = $aPointPolygon['astext'];
- if ($this->bIncludePolygonAsPoints) $aOutlineResult['aPolyPoints'] = geometryText2Points($aPointPolygon['astext'], $fRadius);
-
if (abs($aPointPolygon['minlat'] - $aPointPolygon['maxlat']) < 0.0000001) {
$aPointPolygon['minlat'] = $aPointPolygon['minlat'] - $fRadius;
// as a fallback we generate a bounding box without knowing the size of the geometry
if ((!isset($aOutlineResult['aBoundingBox'])) && isset($fLon)) {
- //
- if ($this->bIncludePolygonAsPoints) {
- $sGeometryText = 'POINT('.$fLon.','.$fLat.')';
- $aOutlineResult['aPolyPoints'] = geometryText2Points($sGeometryText, $fRadius);
- }
-
- $aBounds = array();
- $aBounds['minlat'] = $fLat - $fRadius;
- $aBounds['maxlat'] = $fLat + $fRadius;
- $aBounds['minlon'] = $fLon - $fRadius;
- $aBounds['maxlon'] = $fLon + $fRadius;
+ $aBounds = array(
+ 'minlat' => $fLat - $fRadius,
+ 'maxlat' => $fLat + $fRadius,
+ 'minlon' => $fLon - $fRadius,
+ 'maxlon' => $fLon + $fRadius
+ );
$aOutlineResult['aBoundingBox'] = array(
(string)$aBounds['minlat'],