website/reverse.php
website/search.php
website/status.php
+ website/403.html
+ website/509.html
+ website/crossdomain.xml
+ website/favicon.ico
+ website/last_update.php
+ website/nominatim.xml
+ website/robots.txt
+ website/taginfo.json
utils/blocks.php
utils/country_languages.php
- utils/imports.php
utils/importWikipedia.php
utils/export.php
utils/query.php
protected $aLangPrefOrder = array();
protected $aExcludePlaceIDs = array();
- protected $bReverseInPlan = false;
+ protected $bReverseInPlan = true;
protected $iLimit = 20;
protected $iFinalLimit = 10;
// Do we have anything that looks like a lat/lon pair?
$sQuery = $oCtx->setNearPointFromQuery($sQuery);
- $aResults = array();
if ($sQuery || $this->aStructuredQuery) {
// Start with a single blank search
$aSearches = array(new SearchDescription($oCtx));
// Start the search process
$iGroupLoop = 0;
$iQueryLoop = 0;
+ $aNextResults = array();
foreach ($aGroupedSearches as $iGroupedRank => $aSearches) {
$iGroupLoop++;
+ $aResults = $aNextResults;
foreach ($aSearches as $oSearch) {
$iQueryLoop++;
if ($iQueryLoop > 20) break;
}
+ if (!empty($aResults)) {
+ $aSplitResults = Result::splitResults($aResults);
+ Debug::printVar('Split results', $aSplitResults);
+ if ($iGroupLoop <= 4 && empty($aSplitResults['tail'])
+ && reset($aSplitResults['head'])->iResultRank > 0) {
+ // Haven't found an exact match for the query yet.
+ // Therefore add result from the next group level.
+ $aNextResults = $aSplitResults['head'];
+ foreach ($aNextResults as $oRes) {
+ $oRes->iResultRank--;
+ }
+ $aResults = array();
+ } else {
+ $aResults = $aSplitResults['head'];
+ }
+ }
+
if (!empty($aResults) && ($this->iMinAddressRank != 0 || $this->iMaxAddressRank != 30)) {
// Need to verify passes rank limits before dropping out of the loop (yuk!)
// reduces the number of place ids, like a filter
function javascript_renderData($xVal, $iOptions = 0)
{
+ $sCallback = isset($_GET['json_callback']) ? $_GET['json_callback'] : '';
+ if ($sCallback && !preg_match('/^[$_\p{L}][$_\p{L}\p{Nd}.[\]]*$/u', $sCallback)) {
+ // Unset, we call javascript_renderData again during exception handling
+ unset($_GET['json_callback']);
+ throw new Exception('Invalid json_callback value', 400);
+ }
+
$iOptions |= JSON_UNESCAPED_UNICODE;
if (isset($_GET['pretty']) && in_array(strtolower($_GET['pretty']), array('1', 'true'))) {
$iOptions |= JSON_PRETTY_PRINT;
$jsonout = json_encode($xVal, $iOptions);
- if (!isset($_GET['json_callback'])) {
+ if ($sCallback) {
+ header('Content-Type: application/javascript; charset=UTF-8');
+ echo $_GET['json_callback'].'('.$jsonout.')';
+ } else {
header('Content-Type: application/json; charset=UTF-8');
echo $jsonout;
- } else {
- if (preg_match('/^[$_\p{L}][$_\p{L}\p{Nd}.[\]]*$/u', $_GET['json_callback'])) {
- header('Content-Type: application/javascript; charset=UTF-8');
- echo $_GET['json_callback'].'('.$jsonout.')';
- } else {
- header('HTTP/1.0 400 Bad Request');
- }
}
}
//
preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/', $aMatch[1], $aPolyPoints, PREG_SET_ORDER);
//
- } elseif (preg_match('#MULTIPOLYGON\\(\\(\\(([- 0-9.,]+)#', $geometry_as_text, $aMatch)) {
+/* } elseif (preg_match('#MULTIPOLYGON\\(\\(\\(([- 0-9.,]+)#', $geometry_as_text, $aMatch)) {
//
preg_match_all('/(-?[0-9.]+) (-?[0-9.]+)/', $aMatch[1], $aPolyPoints, PREG_SET_ORDER);
- //
+ */
} elseif (preg_match('#POINT\\((-?[0-9.]+) (-?[0-9.]+)\\)#', $geometry_as_text, $aMatch)) {
//
$aPolyPoints = createPointsAroundCenter($aMatch[1], $aMatch[2], $fRadius);
// Format for output
$sOutputFormat = $oParams->getSet('format', array('html', 'xml', 'json', 'jsonv2', 'geojson', 'geocodejson'), 'xml');
+ set_exception_handler_by_format($sOutputFormat);
// Preferred language
$aLangPrefOrder = $oParams->getPreferredLanguages();
$aPlace = array();
}
+logEnd($oDB, $hLog, sizeof($aPlace)?1:0);
if (CONST_Debug) {
var_dump($aPlace);