]> git.parisson.com Git - telemeta.git/commitdiff
geocoder: restrict search to geonames with PCL* feature code ; optimize
authorolivier <>
Wed, 17 Feb 2010 13:18:14 +0000 (13:18 +0000)
committerolivier <>
Wed, 17 Feb 2010 13:18:14 +0000 (13:18 +0000)
telemeta/management/commands/telemeta-geocode.py

index 166bc4082f48d81af85b819ed4b6a28bc7b05df6..5efe68351604fa54b8f01e7558920f7d2afa3f49 100644 (file)
@@ -20,26 +20,32 @@ class Command(BaseCommand):
         except IOError:
             raise CommandError("Unable to open %s" % datafile)
             
-        locations = Location.objects.filter(type=Location.COUNTRY)
+        locations = [l for l in Location.objects.filter(type=Location.COUNTRY)]
+
         i = 0
         geocoded = 0
-        total = locations.count()
+        total = len(locations)
         for line in datafile:
             (geonameid, name, asciiname, alternatenames, latitude, longitude, feature_class,
              feature_code, country_code, cc2, admin1_code, admin2_code, admin3_code,
              admin4_code, population, elevation, gtopo30, timezone, modification_date) = line.strip().split("\t")
            
-            if feature_class == 'A':
+            if feature_code[0:3] == 'PCL':
                 names = [asciiname.lower()]
                 if alternatenames:
                     names.extend([unaccent(n).lower() for n in alternatenames.split(',')])
 
+                found = []
                 for l in locations:
                     if unaccent(l.name).lower() in names:
                         l.latitude = float(latitude)
                         l.longitude = float(longitude)
                         l.save()
                         geocoded += 1
+                        found.append(l)
+
+                for l in found:
+                    locations.remove(l)
 
             i += 1