2011-11-15 35 views
2

私はdjangoプロジェクトに複数のメールアドレスを表示するためにGoogleマップを使いたいと思っています。アドレスはデータベースの変数です。Djangoプロジェクトに複数の場所を表示するGoogleマップ

今まで、私はdjango-easy-mapsを試しましたが、これは1つのアドレスだけを表示するのに最適です。それはあなたが1つだけのアドレスを持っている場合(それ以上のものを表示することができるかもしれない)使用することは非常に簡単だと言ったように。

また、複数のアドレスを表示できるdjango-gmapi(latlng形式)も試しました。しかし私は私のポストアドレスをlatlng形式に変換するのは難しいです。

だから私の質問は以下のとおりです。

  1. django-easy-mapsサポート複数のアドレスをしていますか?私たちは、Djangoのは、Googleマップ上のアドレスを掲示つ以上を表示する方法django-gmapi
  2. で任意の提案をgeocodingを使用する方法

答えて

0

私はたぶんあなたの既存の住所をジオコードする方法を教えてください。

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() 
+0

user1046012 @ああ、私は他の質問があまりにも私はすでに答えを持ってあなたを推測していることを参照してください! – Anentropic

関連する問題