$sSQL .= 'WHERE place_id in ('.$sPlaceIds.') ';
$sSQL .= ' AND (';
$sSQL .= " placex.rank_address between $this->iMinAddressRank and $this->iMaxAddressRank ";
- if (14 >= $this->iMinAddressRank && 14 <= $this->iMaxAddressRank) {
- $sSQL .= " OR (extratags->'place') = 'city'";
- }
+ $sSQL .= " OR placex.rank_search between $this->iMinAddressRank and $this->iMaxAddressRank ";
if ($this->aAddressRankList) {
$sSQL .= ' OR placex.rank_address in ('.join(',', $this->aAddressRankList).')';
}
$aTerms[] = 'address_rank between 16 and 27';
} elseif (!$this->sClass || $this->iOperator == Operator::NAME) {
if ($iMinAddressRank > 0) {
- $aTerms[] = 'address_rank >= '.$iMinAddressRank;
- }
- if ($iMaxAddressRank < 30) {
- $aTerms[] = 'address_rank <= '.$iMaxAddressRank;
+ $aTerms[] = "((address_rank between $iMinAddressRank and $iMaxAddressRank) or (search_rank between $iMinAddressRank and $iMaxAddressRank))";
}
}
NEW.centroid := coalesce(location.centroid,
ST_Centroid(location.geometry));
- -- Use the address rank of the linked place
- NEW.rank_address := location.rank_address;
+ -- Use the address rank of the linked place, if it has one
+ IF location.rank_address between 5 and 25 THEN
+ NEW.rank_address := location.rank_address;
+ END IF;
-- merge in the label name
IF NOT location.name IS NULL THEN
Scenario: Boundaries with place tags are linked against places with same type
Given the places
| osm | class | type | admin | name | extra+place | geometry |
- | R13 | boundary | administrative | 5 | Berlin | city |poly-area:0.1 |
+ | R13 | boundary | administrative | 4 | Berlin | city |poly-area:0.1 |
And the places
| osm | class | type | name | geometry |
| N2 | place | city | Berlin | 0.006 0.00001 |
And placex contains
| object | rank_address |
| R13 | 16 |
+ When searching for ""
+ | city |
+ | Berlin |
+ Then results contain
+ | ID | osm_type | osm_id |
+ | 0 | R | 13 |
+ When searching for ""
+ | state |
+ | Berlin |
+ Then results contain
+ | ID | osm_type | osm_id |
+ | 0 | R | 13 |
+
Scenario: Boundaries without place tags only link against same admin level
Given the places
| osm | class | type | admin | name | geometry |
- | R13 | boundary | administrative | 5 | Berlin |poly-area:0.1 |
+ | R13 | boundary | administrative | 4 | Berlin |poly-area:0.1 |
And the places
| osm | class | type | name | geometry |
| N2 | place | city | Berlin | 0.006 0.00001 |
| N2 | - |
And placex contains
| object | rank_address |
- | R13 | 10 |
+ | R13 | 8 |
+ When searching for ""
+ | state |
+ | Berlin |
+ Then results contain
+ | ID | osm_type | osm_id |
+ | 0 | R | 13 |
+ When searching for ""
+ | city |
+ | Berlin |
+ Then results contain
+ | ID | osm_type | osm_id |
+ | 0 | N | 2 |
"""
cmd = ['/usr/bin/env', 'php']
cmd.append(os.path.join(context.nominatim.build_dir, 'utils', 'query.php'))
- cmd.extend(['--search', query])
+ if query:
+ cmd.extend(['--search', query])
# add more parameters in table form
if context.table:
for h in context.table.headings: