Split lookupInCountry in two functions and document NOMINATIM_SEARCH_WITHIN_COUNTRIES parameter

This commit is contained in:
alfmarcua 2023-07-06 08:52:12 +02:00
parent 26e78efbb9
commit 4b53cf1464
3 changed files with 29 additions and 7 deletions

View File

@ -627,6 +627,23 @@ with a single query.
Setting this parameter to 0 disables polygon output completely.
#### NOMINATIM_SEARCH_WITHIN_COUNTRIES
| Summary | |
| -------------- | --------------------------------------------------- |
| **Description:** | Disable search for elements that are not in the country grid |
| **Format:** | boolean |
| **Default:** | no |
| **After Changes:** | run `nominatim refresh --website` |
Enable to search elements just within countries.
When enabled, if, despite not finding a point within the static grid of countries, it
finds a geometry of a region, do not return the geometry.
Return "Unable to geocode" instead.
### Logging Settings
#### NOMINATIM_LOG_DB

View File

@ -85,9 +85,9 @@ class ReverseGeocode
protected function lookupLargeArea($sPointSQL, $iMaxRank)
{
if(CONST_Search_WithinCountries
and $this->lookupInCountry($sPointSQL, $iMaxRank) == null){
return null;
$sCountryCode = $this->getCountryCode($sPointSQL);
if (CONST_Search_WithinCountries and $sCountryCode == null) {
return null;
}
if ($iMaxRank > 4) {
@ -99,12 +99,12 @@ class ReverseGeocode
// If no polygon which contains the searchpoint is found,
// searches in the country_osm_grid table for a polygon.
return $this->lookupInCountry($sPointSQL, $iMaxRank);
return $this->lookupInCountry($sPointSQL, $iMaxRank, $sCountryCode);
}
protected function lookupInCountry($sPointSQL, $iMaxRank)
protected function getCountryCode($sPointSQL)
{
Debug::newFunction('lookupInCountry');
Debug::newFunction('getCountryCode');
// searches for polygon in table country_osm_grid which contains the searchpoint
// and searches for the nearest place node to the searchpoint in this polygon
$sSQL = 'SELECT country_code FROM country_osm_grid';
@ -116,8 +116,12 @@ class ReverseGeocode
null,
'Could not determine country polygon containing the point.'
);
Debug::printVar('Country code', $sCountryCode);
return $sCountryCode;
}
protected function lookupInCountry($sPointSQL, $iMaxRank, $sCountryCode)
{
Debug::newFunction('lookupInCountry');
if ($sCountryCode) {
if ($iMaxRank > 4) {
// look for place nodes with the given country code

View File

@ -41,6 +41,7 @@ loadSettings($aCMDResult['project-dir'] ?? getcwd());
@define('CONST_Use_US_Tiger_Data', getSettingBool('USE_US_TIGER_DATA'));
@define('CONST_MapIcon_URL', getSetting('MAPICON_URL', false));
@define('CONST_TokenizerDir', CONST_InstallDir.'/tokenizer');
@define('CONST_Search_WithinCountries', getSetting('SEARCH_WITHIN_COUNTRIES', false));
require_once(CONST_LibDir.'/Geocode.php');