2010-11-01 18:46:28 +03:00
< ? php
2016-09-04 04:19:48 +03:00
@ define ( 'CONST_ConnectionBucket_PageType' , 'Reverse' );
require_once ( dirname ( dirname ( __FILE__ )) . '/settings/settings.php' );
require_once ( CONST_BasePath . '/lib/init-website.php' );
require_once ( CONST_BasePath . '/lib/log.php' );
require_once ( CONST_BasePath . '/lib/PlaceLookup.php' );
require_once ( CONST_BasePath . '/lib/ReverseGeocode.php' );
require_once ( CONST_BasePath . '/lib/output.php' );
ini_set ( 'memory_limit' , '200M' );
2016-09-16 03:27:36 +03:00
$oParams = new Nominatim\ParameterParser ();
2016-09-04 04:19:48 +03:00
// Format for output
2018-03-18 03:49:26 +03:00
$sOutputFormat = $oParams -> getSet ( 'format' , array ( 'html' , 'xml' , 'json' , 'jsonv2' , 'geojson' , 'geocodejson' ), 'xml' );
2016-09-04 04:19:48 +03:00
// Preferred language
$aLangPrefOrder = $oParams -> getPreferredLanguages ();
$oDB =& getDB ();
$hLog = logStart ( $oDB , 'reverse' , $_SERVER [ 'QUERY_STRING' ], $aLangPrefOrder );
2016-09-16 03:27:36 +03:00
$oPlaceLookup = new Nominatim\PlaceLookup ( $oDB );
2017-10-23 23:33:14 +03:00
$oPlaceLookup -> loadParamArray ( $oParams );
2018-03-18 03:49:26 +03:00
if ( $sOutputFormat == 'geocodejson' ) {
2018-07-06 22:26:54 +03:00
$oPlaceLookup -> setIncludeAddressDetails ( true );
2018-03-18 03:49:26 +03:00
$oPlaceLookup -> setAddressAdminLevels ( true );
}
2016-09-04 04:19:48 +03:00
$sOsmType = $oParams -> getSet ( 'osm_type' , array ( 'N' , 'W' , 'R' ));
$iOsmId = $oParams -> getInt ( 'osm_id' , - 1 );
$fLat = $oParams -> getFloat ( 'lat' );
$fLon = $oParams -> getFloat ( 'lon' );
2017-10-23 23:33:14 +03:00
$iZoom = $oParams -> getInt ( 'zoom' , 18 );
2016-09-08 04:16:22 +03:00
if ( $sOsmType && $iOsmId > 0 ) {
2016-09-04 04:19:48 +03:00
$aPlace = $oPlaceLookup -> lookupOSMID ( $sOsmType , $iOsmId );
2016-09-11 06:22:51 +03:00
} elseif ( $fLat !== false && $fLon !== false ) {
2016-09-16 03:27:36 +03:00
$oReverseGeocode = new Nominatim\ReverseGeocode ( $oDB );
2017-10-23 23:33:14 +03:00
$oReverseGeocode -> setZoom ( $iZoom );
2016-09-04 04:19:48 +03:00
2017-10-20 16:41:26 +03:00
$oLookup = $oReverseGeocode -> lookup ( $fLat , $fLon );
if ( CONST_Debug ) var_dump ( $oLookup );
2016-09-04 04:19:48 +03:00
2017-10-22 21:20:56 +03:00
if ( $oLookup ) {
$aPlaces = $oPlaceLookup -> lookup ( array ( $oLookup -> iId => $oLookup ));
2018-05-22 13:22:15 +03:00
if ( ! empty ( $aPlaces )) {
2017-10-22 21:20:56 +03:00
$aPlace = reset ( $aPlaces );
}
}
2016-09-11 06:22:51 +03:00
} elseif ( $sOutputFormat != 'html' ) {
2017-10-26 22:21:21 +03:00
userError ( 'Need coordinates or OSM object to lookup.' );
2016-09-04 04:19:48 +03:00
}
2016-11-18 00:55:05 +03:00
if ( isset ( $aPlace )) {
2016-09-04 04:19:48 +03:00
$fRadius = $fDiameter = getResultDiameter ( $aPlace );
2016-09-11 06:22:51 +03:00
$aOutlineResult = $oPlaceLookup -> getOutlines (
$aPlace [ 'place_id' ],
$aPlace [ 'lon' ],
$aPlace [ 'lat' ],
2018-07-06 23:06:05 +03:00
$fRadius ,
$fLat ,
$fLon
2016-09-11 06:22:51 +03:00
);
2016-09-04 04:19:48 +03:00
2016-09-08 04:16:22 +03:00
if ( $aOutlineResult ) {
2016-09-04 04:19:48 +03:00
$aPlace = array_merge ( $aPlace , $aOutlineResult );
}
2016-11-18 00:55:05 +03:00
} else {
2018-05-22 13:22:15 +03:00
$aPlace = array ();
2016-09-04 04:19:48 +03:00
}
2016-09-08 04:16:22 +03:00
if ( CONST_Debug ) {
2016-09-04 04:19:48 +03:00
var_dump ( $aPlace );
exit ;
}
2016-11-18 00:55:05 +03:00
if ( $sOutputFormat == 'html' ) {
2018-05-22 13:22:15 +03:00
$sDataDate = chksql ( $oDB -> getOne ( " select TO_CHAR(lastimportdate,'YYYY/MM/DD HH24:MI')||' GMT' from import_status limit 1 " ));
2016-09-04 04:19:48 +03:00
$sTileURL = CONST_Map_Tile_URL ;
$sTileAttribution = CONST_Map_Tile_Attribution ;
2018-03-18 03:49:26 +03:00
} elseif ( $sOutputFormat == 'geocodejson' ) {
$sQuery = $fLat . ',' . $fLon ;
if ( isset ( $aPlace [ 'place_id' ])) {
$fDistance = chksql ( $oDB -> getOne ( 'SELECT ST_Distance(ST_SetSRID(ST_Point(' . $fLon . ',' . $fLat . '),4326), centroid) FROM placex where place_id=' . $aPlace [ 'place_id' ]));
}
2016-09-04 04:19:48 +03:00
}
2018-05-22 13:22:15 +03:00
2018-03-18 03:49:26 +03:00
$sOutputTemplate = ( $sOutputFormat == 'jsonv2' ) ? 'json' : $sOutputFormat ;
2018-05-22 13:22:15 +03:00
include ( CONST_BasePath . '/lib/template/address-' . $sOutputTemplate . '.php' );