2012-10-30 2 views
0

J'ai vu des mentions ici du projet de base de données ZipCode pour calculer la distance entre deux codes postaux. J'ai été capable de télécharger le fichier csv avec succès dans ma base de données en utilisant Django et sqlite3. Cependant, maintenant je ne suis pas capable d'effectuer des requêtes avec autre chose que le code postal lui-même (la ville et l'état ne fonctionnent pas). Je pensais que c'était parce que le fichier csv avait des citations autour de la ville et l'état, alors j'ai essayé de télécharger le fichier en prenant toutes les citations. Pas de chance. Ensuite, j'ai pensé que l'encodage était désactivé, donc j'ai téléchargé à nouveau en m'assurant qu'il était encodé en utf-8. Encore une fois, pas de chance. Est-ce que quelqu'un a de l'expérience avec cette base de données? La base de données est à http://zips.sourceforge.net/ Et la façon dont je le charge est basé sur http://mitchfournier.com/2011/10/11/how-to-import-a-csv-or-tsv-file-into-a-django-model/ Je me suis éloigné de geodjango parce qu'il semblait trop pour ce que je veux faire. Toute aide serait grandement appréciée.Problèmes avec le projet de base de données ZipCode

Voici le code:

Pour ma classe codepostal:

class ZipCode(models.Model): 
    zipcode=models.CharField(max_length=5) 
statecode=models.CharField(max_length=2) 
lat=models.CharField(max_length=9) 
long=models.CharField(max_length=9) 
city=models.CharField(max_length=64) 
state=models.CharField(max_length=32) 
create_date=models.DateTimeField(default=datetime.datetime.now) 
def __unicode__(self): 
    return "%s %s %s" %(self.city,self.statecode,self.zipcode) 

J'ai une classe pour les descriptions, ici, je veux convertir la ville et les États à zipcodes, idéalement

class Descriptions(models.Model): 
name=models.CharField(max_length=50) 
website=models.CharField(max_length=50,blank=True) 
street1=models.CharField(max_length=50,blank=True) 
street2=models.CharField(max_length=50,blank=True) 
city=models.CharField(max_length=50,blank=True) 
state=models.CharField(max_length=50,blank=True) 
zip=models.CharField(max_length=5,blank=True) 
description=models.TextField() 
areas_related=models.TextField() 
add_area=models.CharField(max_length=50,blank=True) 
federal=models.NullBooleanField(null=True) 
def get_zip(self): 
    if self.city and self.state: 
     real_zip=ZipCode.objects.filter(statecode=self.state) ####note this is not the real query I want to do, but even this returns None 
        ###alternatively, if I do (zip=self.zipcode) I will get an object returned 
     return real_zip 
    def __unicode__(self): 
    return u'%s %s %s %s %s %s %s %s %s %s %s' %(self.name,self.website,self.street1, 
    self.street2,self.city,self.state,self.zip,self.description,self.add_area, self.federal, self.get_zip()) 

Pour le fichier de téléchargement:

csv_filepathname='/Users/sam/Documents/service/mysite/zips.csv' 
your_djangoproject_home='/Users/sam/Documents/service/mysite/mysite' 

import sys,os 

sys.path.append(your_djangoproject_home) 
os.environ['DJANGO_SETTINGS_MODULE']='settings' 

from southtut.models import ZipCode 

import csv 
dataReader = csv.reader(open(csv_filepathname), delimiter=',', quotechar='"') 
for row in dataReader: 
    if row[0]!='ZIPCODE': 
     zipcode=ZipCode() 
     zipcode.zipcode=row[0] 
     zipcode.statecode=row[1]  
     zipcode.lat=row[2]   
     zipcode.long=row[3] 
     zipcode.city=row[4]  
     zipcode.state=row[5]    
     zipcode.save() 
+0

Avez-vous envisagé d'autres solutions? Vous pouvez utiliser Google Map Geocoding Service pour obtenir lat/long pour chaque code postal, puis vous pouvez calculer la distance. – dannyroa

Répondre

0

Utilisé une base de données différente. Je ne suis toujours pas sûr de savoir pourquoi celui que j'avais ne fonctionnait pas.

Questions connexes