maposmatic-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Maposmatic-dev] [PATCH ocitysmap 5/6] Render amenities in street index.


From: Gaël UTARD
Subject: [Maposmatic-dev] [PATCH ocitysmap 5/6] Render amenities in street index.
Date: Tue, 22 Dec 2009 00:37:45 +0100

---
 ocitysmap/street_index.py |   43 +++++++++++++++++++++++--------------------
 1 files changed, 23 insertions(+), 20 deletions(-)

diff --git a/ocitysmap/street_index.py b/ocitysmap/street_index.py
index 5877f5a..e0ae9de 100644
--- a/ocitysmap/street_index.py
+++ b/ocitysmap/street_index.py
@@ -105,7 +105,7 @@ class IndexPageGenerator:
 
         em = cr.text_extents("m")[2]
 
-        widths = map(lambda x: cr.text_extents(x[0])[2] + 
cr.text_extents(x[1])[2], self.streets)
+        widths = map(lambda x: cr.text_extents(x[1])[2] + 
cr.text_extents(x[2])[2], self.streets)
         maxwidth = max(widths)
         colwidth = maxwidth + 3 * em
 
@@ -123,9 +123,9 @@ class IndexPageGenerator:
         prevletter = u''
         heading_letter_count = 0
         for street in self.streets:
-            if not self.i18n.first_letter_equal(street[0][0], prevletter):
+            if not self.i18n.first_letter_equal(street[0], prevletter):
                 heading_letter_count += 1
-                prevletter = street[0][0]
+                prevletter = street[0]
 
         colheight = len(self.streets) * fp['fheight'] + heading_letter_count * 
fp['heading_fheight']
 
@@ -176,7 +176,7 @@ class IndexPageGenerator:
         prevletter = u''
         for street in self.streets:
             # Letter label
-            firstletter = street[0][0]
+            firstletter = street[0]
             if not self.i18n.first_letter_equal(firstletter, prevletter):
                 # Make sure we have no orphelin heading letter label at the
                 # end of a column
@@ -207,12 +207,12 @@ class IndexPageGenerator:
             cr.set_font_size(fontsize)
             # Compute length of the dashed line between the street name and
             # the squares label
-            street_name_width = cr.text_extents(street[0])[4]
-            squares_label_width = cr.text_extents(street[1])[2]
+            street_name_width = cr.text_extents(street[1])[4]
+            squares_label_width = cr.text_extents(street[2])[2]
             line_width = colwidth - street_name_width - squares_label_width - 
2 * em
             # Draw street name
             cr.move_to(x, y)
-            cr.show_text(street[0])
+            cr.show_text(street[1])
             # Draw dashed line
             strokewidth = max(fontsize / 12, 1)
             cr.set_line_width(strokewidth)
@@ -222,7 +222,7 @@ class IndexPageGenerator:
             cr.stroke()
             # Draw squares label
             cr.move_to(x + colwidth - em - squares_label_width, y)
-            cr.show_text(street[1])
+            cr.show_text(street[2])
             if y + fheight > paperheight:
                 y = 0
                 x += colwidth
@@ -491,6 +491,9 @@ class OCitySMap:
         finally:
             locale.setlocale(locale.LC_COLLATE, prev_locale)
 
+        # Add the first letter of the street name as category
+        sl = [(street[0][0], street[0], street[1]) for street in sl]
+
         return sl
 
     def get_streets_by_name(self, db, city):
@@ -624,13 +627,13 @@ class OCitySMap:
     # cleanup and pass it through the internationalization layer to
     # get proper sorting, filtering of common prefixes, etc. Returns a
     # updated amenity list.
-    def humanize_amenity_list(self, al):
+    def humanize_amenity_list(self, am):
         # We transform the string representing the squares list into a
         # Python list
-        al = [( unicode(amenity[0].decode("utf-8")),
+        am = [( unicode(amenity[0].decode("utf-8")),
                unicode(amenity[1].decode("utf-8")),
-                [ map(int, x.split(',')) for x in amenity[3].split(';')[:-1] ] 
)
-              for amenity in al]
+                [ map(int, x.split(',')) for x in amenity[2].split(';')[:-1] ] 
)
+              for amenity in am]
 
         # Street prefixes are postfixed, a human readable label is
         # built to represent the list of squares, and the list is
@@ -643,12 +646,12 @@ class OCitySMap:
                     _user_readable_label(amenity[2]))
 
         try:
-            al = sorted(map(_humanize_amenity_label, al),
-                        lambda x, y: locale.strcoll(x[0].lower(), 
y[0].lower()))
+            am = sorted(map(_humanize_amenity_label, am),
+                        lambda x, y: locale.strcoll(x[1].lower(), 
y[1].lower()))
         finally:
             locale.setlocale(locale.LC_COLLATE, prev_locale)
 
-        return al
+        return am
 
     def get_amenities_by_name(self, db, city):
 
@@ -714,9 +717,9 @@ class OCitySMap:
                           order by name;""" % \
                            pgdb.escape_string(city.encode('utf-8')))
 
-        am = cursor.fetchall()
+        al = cursor.fetchall()
 
-        return am
+        return self.humanize_amenity_list(al)
 
     def get_amenities_by_osmid(self, db, osmid):
 
@@ -773,9 +776,9 @@ class OCitySMap:
                           order by name;""" % \
                            osmid)
 
-        am = cursor.fetchall()
+        al = cursor.fetchall()
 
-        return am
+        return self.humanize_amenity_list(al)
 
     def _render_one_prefix(self, title, output_prefix, file_type,
                            paperwidth, paperheight):
@@ -785,7 +788,7 @@ class OCitySMap:
         output_filename = "%s_index.%s" % (output_prefix, file_type)
         LOG.debug("rendering " + output_filename + "...")
 
-        generator = IndexPageGenerator(self.streets, self.i18n)
+        generator = IndexPageGenerator(self.streets + self.amenities, 
self.i18n)
 
         if file_type == 'xml':
             LOG.debug('not rendering index as xml (not supported)')
-- 
1.6.5.7





reply via email to

[Prev in Thread] Current Thread [Next in Thread]