私はたぶんあなたの既存の住所をジオコードする方法を教えてください。
UPDATE
gmapiはそうあなたはおそらく、私は以下の貼り付けのコードのいずれかを必要としないで構築されたそれ自身のジオコーディングヘルパーを持っているように見えます。参照:Does anybody has experiences with geocoding using django-gmapi?
私は、次のコードを使用しています
import urllib
from django.conf import settings
from django.utils.encoding import smart_str
from django.db.models.signals import pre_save
from django.utils import simplejson as json
def get_lat_long(location):
output = "csv"
location = urllib.quote_plus(smart_str(location))
request = "http://maps.google.co.uk/maps/api/geocode/json?address=%s&sensor=false" % location
response = urllib.urlopen(request).read()
data = json.loads(response)
if data['status'] == 'OK':
# take first result
return (str(data['results'][0]['geometry']['location']['lat']), str(data['results'][0]['geometry']['location']['lng']))
else:
return (None, None)
def get_geocode(sender, instance, **kwargs):
tlat, tlon = instance._geocode__target_fields
if not getattr(instance, tlat) or not getattr(instance, tlon):
map_query = getattr(instance, instance._geocode__src_field, '')
if callable(map_query):
map_query = map_query()
lat, lon = get_lat_long(map_query)
setattr(instance, tlat, lat)
setattr(instance, tlon, lon)
def geocode(model, src_field, target_fields=('lat','lon')):
# pass src and target field names as strings
setattr(model, '_geocode__src_field', src_field)
setattr(model, '_geocode__target_fields', target_fields)
pre_save.connect(get_geocode, sender=model)
(おそらく私はどこかのGithubプロジェクトからそれを借り、もしそうなら、私は申し訳ありませんが、帰属を失っている!)
あなたのモデルでは、次のようなものが必要です。
from django.db import models
from gmaps import geocode # import the function from above
class MyModel(models.Model):
address = models.TextField(blank=True)
city = models.CharField(max_length=32, blank=True)
postcode = models.CharField(max_length=32, blank=True)
lat = models.DecimalField(max_digits=12, decimal_places=6, verbose_name='latitude', blank=True, null=True, help_text="Will be filled automatically.")
lon = models.DecimalField(max_digits=12, decimal_places=6, verbose_name='longitude', blank=True, null=True, help_text="Will be filled automatically.")
def map_query(self):
"""
Called on save by the geocode decorator which automatically fills the
lat,lng values. This method returns a string to use as query to gmaps.
"""
map_query = ''
if self.address and self.city:
map_query = '%s, %s' % (self.address, self.city)
if self.postcode:
if map_query:
map_query = '%s, ' % map_query
map_query = '%s%s' % (map_query, self.postcode)
return map_query
geocode(Venue, 'map_query')
次にジオコードドあなただけのすべての既存のレコードを再救うことができるウル既存のデータ、例えば:
from .models import MyModel
for obj in MyModel.objects.all():
obj.save()
user1046012 @ああ、私は他の質問があまりにも私はすでに答えを持ってあなたを推測していることを参照してください! – Anentropic