mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-02-16 15:47:58 +00:00
Fix address link for boundaries in details
Removes the special casing for boundaries with a place type in get_addressdata(). Instead the place type is now returned as an extra field, so that the caller has to handle the situation. This fixes the details link next to the address in the details view, which previously would go to a place class instead of the original boundary class.
This commit is contained in:
@@ -70,7 +70,13 @@
|
|||||||
|
|
||||||
echo '<tr class="' . ($bNotUsed?'notused':'') . '">'."\n";
|
echo '<tr class="' . ($bNotUsed?'notused':'') . '">'."\n";
|
||||||
echo ' <td class="name">'.(trim($aAddressLine['localname'])!==null?$aAddressLine['localname']:'<span class="noname">No Name</span>')."</td>\n";
|
echo ' <td class="name">'.(trim($aAddressLine['localname'])!==null?$aAddressLine['localname']:'<span class="noname">No Name</span>')."</td>\n";
|
||||||
echo ' <td>' . $aAddressLine['class'].':'.$aAddressLine['type'] . "</td>\n";
|
echo ' <td>' . $aAddressLine['class'].':'.$aAddressLine['type'];
|
||||||
|
if ($aAddressLine['type'] == 'administrative'
|
||||||
|
&& isset($aAddressLine['place_type']))
|
||||||
|
{
|
||||||
|
echo '('.$aAddressLine['place_type'].')';
|
||||||
|
}
|
||||||
|
echo "</td>\n";
|
||||||
echo ' <td>' . osmLink($aAddressLine) . "</td>\n";
|
echo ' <td>' . osmLink($aAddressLine) . "</td>\n";
|
||||||
echo ' <td>' . (isset($aAddressLine['rank_address']) ? $aAddressLine['rank_address'] : '') . "</td>\n";
|
echo ' <td>' . (isset($aAddressLine['rank_address']) ? $aAddressLine['rank_address'] : '') . "</td>\n";
|
||||||
echo ' <td>' . ($aAddressLine['admin_level'] < 15 ? $aAddressLine['admin_level'] : '') . "</td>\n";
|
echo ' <td>' . ($aAddressLine['admin_level'] < 15 ? $aAddressLine['admin_level'] : '') . "</td>\n";
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ CREATE TYPE addressline as (
|
|||||||
name HSTORE,
|
name HSTORE,
|
||||||
class TEXT,
|
class TEXT,
|
||||||
type TEXT,
|
type TEXT,
|
||||||
|
place_type TEXT,
|
||||||
admin_level INTEGER,
|
admin_level INTEGER,
|
||||||
fromarea BOOLEAN,
|
fromarea BOOLEAN,
|
||||||
isaddress BOOLEAN,
|
isaddress BOOLEAN,
|
||||||
@@ -193,7 +194,7 @@ BEGIN
|
|||||||
searchcountrycode := NULL;
|
searchcountrycode := NULL;
|
||||||
END IF;
|
END IF;
|
||||||
countrylocation := ROW(location.place_id, location.osm_type, location.osm_id,
|
countrylocation := ROW(location.place_id, location.osm_type, location.osm_id,
|
||||||
location.name, location.class, location.type,
|
location.name, location.class, location.type, NULL,
|
||||||
location.admin_level, true, location.isaddress,
|
location.admin_level, true, location.isaddress,
|
||||||
location.rank_address, location.distance)::addressline;
|
location.rank_address, location.distance)::addressline;
|
||||||
RETURN NEXT countrylocation;
|
RETURN NEXT countrylocation;
|
||||||
@@ -201,10 +202,8 @@ BEGIN
|
|||||||
END LOOP;
|
END LOOP;
|
||||||
|
|
||||||
FOR location IN
|
FOR location IN
|
||||||
SELECT placex.place_id, osm_type, osm_id, name,
|
SELECT placex.place_id, osm_type, osm_id, name, class, type,
|
||||||
CASE WHEN extratags ? 'place' or extratags ? 'linked_place'
|
coalesce(extratags->'place', extratags->'linked_place') as place_type,
|
||||||
THEN 'place' ELSE class END as class,
|
|
||||||
coalesce(extratags->'place', extratags->'linked_place', type) as type,
|
|
||||||
admin_level, fromarea, isaddress,
|
admin_level, fromarea, isaddress,
|
||||||
CASE WHEN rank_address = 11 THEN 5 ELSE rank_address END as rank_address,
|
CASE WHEN rank_address = 11 THEN 5 ELSE rank_address END as rank_address,
|
||||||
distance, country_code, postcode
|
distance, country_code, postcode
|
||||||
@@ -229,6 +228,7 @@ BEGIN
|
|||||||
END IF;
|
END IF;
|
||||||
countrylocation := ROW(location.place_id, location.osm_type, location.osm_id,
|
countrylocation := ROW(location.place_id, location.osm_type, location.osm_id,
|
||||||
location.name, location.class, location.type,
|
location.name, location.class, location.type,
|
||||||
|
location.place_type,
|
||||||
location.admin_level, location.fromarea,
|
location.admin_level, location.fromarea,
|
||||||
location.isaddress, location.rank_address,
|
location.isaddress, location.rank_address,
|
||||||
location.distance)::addressline;
|
location.distance)::addressline;
|
||||||
@@ -242,7 +242,7 @@ BEGIN
|
|||||||
WHERE country_code = searchcountrycode LIMIT 1 INTO countryname;
|
WHERE country_code = searchcountrycode LIMIT 1 INTO countryname;
|
||||||
--RAISE WARNING '% % %',found,searchcountrycode,countryname;
|
--RAISE WARNING '% % %',found,searchcountrycode,countryname;
|
||||||
IF countryname IS NOT NULL THEN
|
IF countryname IS NOT NULL THEN
|
||||||
location := ROW(null, null, null, countryname, 'place', 'country',
|
location := ROW(null, null, null, countryname, 'place', 'country', NULL,
|
||||||
null, true, true, 4, 0)::addressline;
|
null, true, true, 4, 0)::addressline;
|
||||||
RETURN NEXT location;
|
RETURN NEXT location;
|
||||||
END IF;
|
END IF;
|
||||||
@@ -251,25 +251,25 @@ BEGIN
|
|||||||
-- Finally add some artificial rows.
|
-- Finally add some artificial rows.
|
||||||
IF searchcountrycode IS NOT NULL THEN
|
IF searchcountrycode IS NOT NULL THEN
|
||||||
location := ROW(null, null, null, hstore('ref', searchcountrycode),
|
location := ROW(null, null, null, hstore('ref', searchcountrycode),
|
||||||
'place', 'country_code', null, true, false, 4, 0)::addressline;
|
'place', 'country_code', null, null, true, false, 4, 0)::addressline;
|
||||||
RETURN NEXT location;
|
RETURN NEXT location;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF searchhousename IS NOT NULL THEN
|
IF searchhousename IS NOT NULL THEN
|
||||||
location := ROW(in_place_id, null, null, searchhousename, searchclass,
|
location := ROW(in_place_id, null, null, searchhousename, searchclass,
|
||||||
searchtype, null, true, true, 29, 0)::addressline;
|
searchtype, null, null, true, true, 29, 0)::addressline;
|
||||||
RETURN NEXT location;
|
RETURN NEXT location;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF searchhousenumber IS NOT NULL THEN
|
IF searchhousenumber IS NOT NULL THEN
|
||||||
location := ROW(in_place_id, null, null, hstore('ref', searchhousenumber),
|
location := ROW(in_place_id, null, null, hstore('ref', searchhousenumber),
|
||||||
'place', 'house_number', null, true, true, 28, 0)::addressline;
|
'place', 'house_number', null, null, true, true, 28, 0)::addressline;
|
||||||
RETURN NEXT location;
|
RETURN NEXT location;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
IF searchpostcode IS NOT NULL THEN
|
IF searchpostcode IS NOT NULL THEN
|
||||||
location := ROW(null, null, null, hstore('ref', searchpostcode), 'place',
|
location := ROW(null, null, null, hstore('ref', searchpostcode), 'place',
|
||||||
'postcode', null, false, postcode_isaddress, 5, 0)::addressline;
|
'postcode', null, null, false, postcode_isaddress, 5, 0)::addressline;
|
||||||
RETURN NEXT location;
|
RETURN NEXT location;
|
||||||
END IF;
|
END IF;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user