From: Sarah Hoffmann Date: Thu, 22 Oct 2020 11:43:50 +0000 (+0200) Subject: Merge remote-tracking branch 'upstream/master' X-Git-Tag: deploy~201 X-Git-Url: https://git.openstreetmap.org/nominatim.git/commitdiff_plain/e6a81e8deceae44211ba9d12096edb99efc4a015?hp=33de9096af645f6783bf3f18e1b389d39e586e2b Merge remote-tracking branch 'upstream/master' --- diff --git a/docs/develop/Ranking.md b/docs/develop/Ranking.md index 278039db..06f25500 100644 --- a/docs/develop/Ranking.md +++ b/docs/develop/Ranking.md @@ -23,7 +23,7 @@ rank | typical place types | extent 4 | countries | - 5-9 | states, regions, provinces | - 10-12 | counties | - -13-16 | cities, municipalities, islands | 7.5 km +13-16 | cities, municipalities, islands | 15 km 17-18 | towns, boroughs | 4 km 19 | villages, suburbs | 2 km 20 | hamlets, farms, neighbourhoods | 1 km @@ -51,16 +51,24 @@ The following table gives an overview how ranks are mapped to address parts: 10-12 | county 13-16 | city 17-21 | suburb - 22-25 | neighbourhood + 22-24 | neighbourhood + 25 | squares, farms, localities 26-27 | street 28-30 | POI/house number The country rank 4 usually doesn't show up in the address parts of an object. The country is determined indirectly from the country code. -Ranks 5-25 can be assigned more or less freely. They make up the major part +Ranks 5-24 can be assigned more or less freely. They make up the major part of the address. +Rank 25 is also an addressing rank but it is special because while it can be +the parent to a POI with an addr:place of the same name, it cannot be a parent +to streets. Use it for place features that are technically on the same level +as a street (e.g. squares, city blocks) or for places that should not normally +appear in an address unless explicitly tagged so (e.g place=locality which +should be uninhabited and as such not addressable). + The street ranks 26 and 27 are handled slightly differently. Only one object from these ranks shows up in an address. diff --git a/lib/ClassTypes.php b/lib/ClassTypes.php index c8d37e52..752db865 100644 --- a/lib/ClassTypes.php +++ b/lib/ClassTypes.php @@ -275,6 +275,7 @@ function getImportance($aPlace) if ($aWithImportance === null) { $aWithImportance = array_flip(array( + 'boundary:administrative', 'place:country', 'place:state', 'place:province', diff --git a/lib/Geocode.php b/lib/Geocode.php index 7ab53d97..8e71d761 100644 --- a/lib/Geocode.php +++ b/lib/Geocode.php @@ -917,21 +917,14 @@ class Geocode $aResult['lon'], $aResult['lat'] ); - // Adjust importance for the number of exact string matches in the result - $iCountWords = 0; - $sAddress = $aResult['langaddress']; - foreach ($aRecheckWords as $i => $sWord) { - if (stripos($sAddress, $sWord)!==false) { - $iCountWords++; - if (preg_match('/(^|,)\s*'.preg_quote($sWord, '/').'\s*(,|$)/', $sAddress)) $iCountWords += 0.1; - } - } - - $aResult['importance'] = $aResult['importance'] + ($iCountWords*0.1); // 0.1 is a completely arbitrary number but something in the range 0.1 to 0.5 would seem right // secondary ordering (for results with same importance (the smaller the better): // - approximate importance of address parts - $aResult['foundorder'] = -$aResult['addressimportance']/10; + if (isset($aResult['addressimportance']) && $aResult['addressimportance']) { + $aResult['foundorder'] = -$aResult['addressimportance']/10; + } else { + $aResult['foundorder'] = -$aResult['importance']; + } // - number of exact matches from the query $aResult['foundorder'] -= $aResults[$aResult['place_id']]->iExactMatches; // - importance of the class/type @@ -941,6 +934,19 @@ class Geocode } else { $aResult['foundorder'] += 0.01; } + + // Adjust importance for the number of exact string matches in the result + $iCountWords = 0; + $sAddress = $aResult['langaddress']; + foreach ($aRecheckWords as $i => $sWord) { + if (stripos($sAddress, $sWord)!==false) { + $iCountWords++; + if (preg_match('/(^|,)\s*'.preg_quote($sWord, '/').'\s*(,|$)/', $sAddress)) $iCountWords += 0.1; + } + } + + // 0.1 is a completely arbitrary number but something in the range 0.1 to 0.5 would seem right + $aResult['importance'] = $aResult['importance'] + ($iCountWords*0.1); } $aSearchResults[$iIdx] = $aResult; } diff --git a/module/CMakeLists.txt b/module/CMakeLists.txt index 03beacb2..6aef6a5a 100644 --- a/module/CMakeLists.txt +++ b/module/CMakeLists.txt @@ -1,5 +1,14 @@ # just use the pgxs makefile -find_program(PG_CONFIG pg_config) + +foreach(suffix ${PostgreSQL_ADDITIONAL_VERSIONS} "13" "12" "11" "10" "9.6" "9.5" "9.4" "9.3") + list(APPEND PG_CONFIG_HINTS + "/usr/pgsql-${suffix}/bin") +endforeach() + +find_program(PG_CONFIG pg_config HINTS ${PG_CONFIG_HINTS}) + + + execute_process(COMMAND ${PG_CONFIG} --pgxs OUTPUT_VARIABLE PGXS OUTPUT_STRIP_TRAILING_WHITESPACE) diff --git a/osm2pgsql b/osm2pgsql index acbec68b..94a50603 160000 --- a/osm2pgsql +++ b/osm2pgsql @@ -1 +1 @@ -Subproject commit acbec68bbf94dafae103663801d55291cf8f227e +Subproject commit 94a5060353179f4cf3e92aa622a2aa5d1afa6fee diff --git a/settings/address-levels.json b/settings/address-levels.json index 574e0dd0..1810af59 100644 --- a/settings/address-levels.json +++ b/settings/address-levels.json @@ -10,26 +10,26 @@ "province" : [8, 0], "region" : [18, 0], "county" : 12, + "district" : 12, "municipality" : 14, "city" : 16, "town" : [18, 16], "borough" : 18, "village" : [19, 16], - "district" : [19, 16], "suburb" : [19, 20], "hamlet" : 20, "croft" : 20, - "subdivision" : 20, - "allotments" : 20, + "subdivision" : 22, + "allotments" : 22, "neighbourhood" : [20, 22], "quarter" : [20, 22], "isolated_dwelling" : [22, 20], - "city_block" : 22, - "mountain_pass" : [20, 0], + "farm" : [22, 20], + "city_block" : 25, + "mountain_pass" : 25, "square" : 25, + "locality" : 25, "houses" : [28, 0], - "farm" : [20, 0], - "locality" : [20, 0], "house" : 30, "" : [22, 0] }, diff --git a/vagrant/Install-on-Centos-7.sh b/vagrant/Install-on-Centos-7.sh index 7ce09727..f26c567c 100755 --- a/vagrant/Install-on-Centos-7.sh +++ b/vagrant/Install-on-Centos-7.sh @@ -42,11 +42,7 @@ python3-pip python3-setuptools python3-devel \ expat-devel zlib-devel - # make sure pg_config gets found - echo 'PATH=/usr/pgsql-11/bin/:$PATH' >> ~/.bash_profile - source ~/.bash_profile - - pip3 install --user psycopg2 pytidylib + pip3 install --user psycopg2 # diff --git a/vagrant/Install-on-Centos-8.sh b/vagrant/Install-on-Centos-8.sh index 75b7a558..8fd983d3 100755 --- a/vagrant/Install-on-Centos-8.sh +++ b/vagrant/Install-on-Centos-8.sh @@ -35,11 +35,7 @@ python3-pip python3-setuptools python3-devel \ expat-devel zlib-devel - # make sure pg_config gets found - echo 'PATH=/usr/pgsql-12/bin:$PATH' >> ~/.bash_profile - source ~/.bash_profile - - pip3 install --user psycopg2 pytidylib + pip3 install --user psycopg2 #