[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Maposmatic-dev] [PATCH maposmatic] for similar admin_level, sort accord
From: |
David Decotigny |
Subject: |
[Maposmatic-dev] [PATCH maposmatic] for similar admin_level, sort according to the city area |
Date: |
Tue, 22 Dec 2009 10:33:58 +0100 |
---
www/maposmatic/nominatim.py | 20 +++++++++++---------
1 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/www/maposmatic/nominatim.py b/www/maposmatic/nominatim.py
index f8bba0c..e4dd85a 100644
--- a/www/maposmatic/nominatim.py
+++ b/www/maposmatic/nominatim.py
@@ -144,8 +144,9 @@ def _retrieve_missing_data_from_GIS(entries):
# opposite of osm_id... But we still consider that it could be the
# real osm_id (not its opposite). Let's have fun...
- # Will sort the entries so that the admin boundaries appear
- # fdirst, then cities, towns, etc.
+ # Will sort the entries so that the admin boundaries appear first,
+ # then cities, towns, etc. Second order: larger cities
+ # (ie. greater way_area) are listed first
unsorted_entries = []
admin_boundary_names = set()
PLACE_RANKS = { 'city': 20, 'town': 30, 'municipality': 40,
@@ -159,12 +160,12 @@ def _retrieve_missing_data_from_GIS(entries):
lookup_OSM = False
# Highest rank = last in the output
- entry_rank = 1000
+ entry_rank = (1000,0) # tuple (sort rank, -area)
# Try to determine the order in which this entry should appear
if entry.get("class") == "boundary":
if entry.get("type") == "administrative":
- entry_rank = 10
+ entry_rank = (10,0)
admin_boundary_names.add(entry.get("display_name", 42))
lookup_OSM = True
else:
@@ -174,7 +175,7 @@ def _retrieve_missing_data_from_GIS(entries):
continue
elif entry.get("class") == "place":
try:
- entry_rank = PLACE_RANKS[entry.get("type")]
+ entry_rank = (PLACE_RANKS[entry.get("type")],0)
except KeyError:
# Will ignore all the other place tags
continue
@@ -188,18 +189,19 @@ def _retrieve_missing_data_from_GIS(entries):
for table_name in ("polygon", "line"):
# Lookup the polygon/line table for both osm_id and
# the opposite of osm_id
- cursor.execute("""select osm_id, admin_level
+ cursor.execute("""select osm_id, admin_level, way_area
from planet_osm_%s
where osm_id = -%s""" \
% (table_name,entry["osm_id"]))
result = tuple(set(cursor.fetchall()))
if len(result) == 1:
- osm_id, admin_level = result[0]
+ osm_id, admin_level, way_area = result[0]
entry["ocitysmap_params"] \
= dict(table=table_name, id=osm_id,
- admin_level=admin_level)
+ admin_level=admin_level,
+ way_area=way_area)
# Make these first in list, priviledging level 8
- entry_rank = ADMIN_LEVEL_RANKS.get(admin_level,9)
+ entry_rank =
(ADMIN_LEVEL_RANKS.get(admin_level,9),-way_area)
break
# Register this entry for the results
--
1.6.3.3
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Maposmatic-dev] [PATCH maposmatic] for similar admin_level, sort according to the city area,
David Decotigny <=