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:
Sarah Hoffmann
2020-03-29 17:40:56 +02:00
parent 4c593fa859
commit 101f04bbf2
2 changed files with 17 additions and 11 deletions

View File

@@ -70,7 +70,13 @@
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>' . $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>' . (isset($aAddressLine['rank_address']) ? $aAddressLine['rank_address'] : '') . "</td>\n";
echo ' <td>' . ($aAddressLine['admin_level'] < 15 ? $aAddressLine['admin_level'] : '') . "</td>\n";

View File

@@ -8,6 +8,7 @@ CREATE TYPE addressline as (
name HSTORE,
class TEXT,
type TEXT,
place_type TEXT,
admin_level INTEGER,
fromarea BOOLEAN,
isaddress BOOLEAN,
@@ -193,7 +194,7 @@ BEGIN
searchcountrycode := NULL;
END IF;
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.rank_address, location.distance)::addressline;
RETURN NEXT countrylocation;
@@ -201,10 +202,8 @@ BEGIN
END LOOP;
FOR location IN
SELECT placex.place_id, osm_type, osm_id, name,
CASE WHEN extratags ? 'place' or extratags ? 'linked_place'
THEN 'place' ELSE class END as class,
coalesce(extratags->'place', extratags->'linked_place', type) as type,
SELECT placex.place_id, osm_type, osm_id, name, class, type,
coalesce(extratags->'place', extratags->'linked_place') as place_type,
admin_level, fromarea, isaddress,
CASE WHEN rank_address = 11 THEN 5 ELSE rank_address END as rank_address,
distance, country_code, postcode
@@ -229,6 +228,7 @@ BEGIN
END IF;
countrylocation := ROW(location.place_id, location.osm_type, location.osm_id,
location.name, location.class, location.type,
location.place_type,
location.admin_level, location.fromarea,
location.isaddress, location.rank_address,
location.distance)::addressline;
@@ -242,7 +242,7 @@ BEGIN
WHERE country_code = searchcountrycode LIMIT 1 INTO countryname;
--RAISE WARNING '% % %',found,searchcountrycode,countryname;
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;
RETURN NEXT location;
END IF;
@@ -251,25 +251,25 @@ BEGIN
-- Finally add some artificial rows.
IF searchcountrycode IS NOT NULL THEN
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;
END IF;
IF searchhousename IS NOT NULL THEN
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;
END IF;
IF searchhousenumber IS NOT NULL THEN
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;
END IF;
IF searchpostcode IS NOT NULL THEN
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;
END IF;