Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django(地理)地理编码-模型保存上的地理编码不工作_Django_Google Maps_Google Maps Api 3_Google Geocoder_Geodjango - Fatal编程技术网

Django(地理)地理编码-模型保存上的地理编码不工作

Django(地理)地理编码-模型保存上的地理编码不工作,django,google-maps,google-maps-api-3,google-geocoder,geodjango,Django,Google Maps,Google Maps Api 3,Google Geocoder,Geodjango,我的模型上有一个保存覆盖: def save(self, **kwargs): if not self.location: address = u'%s %s %s %s' % (self.address_first, self.address_second, self.address_third, self.postcode) geocoder = Nominatim() try: _, latlon =

我的模型上有一个保存覆盖:

    def save(self, **kwargs):
    if not self.location:
        address = u'%s %s %s %s' % (self.address_first, self.address_second, self.address_third, self.postcode)
        geocoder = Nominatim()
        try:
            _, latlon = geocoder.geocode(address)
        except (GeopyError, ValueError):
            pass
        else:
            latlon = geocoder.geocode(address)
            point = 'POINT({0} {1})'.format(latlon[1][1], latlon[1][0])
            self.location = geos.fromstr(point)
    super(Venue, self).save()
我越来越

TypeError: 'NoneType' object is not iterable
特别是在地址变量上。如果我硬编码一个地址就可以了

我想这与self.address。。。在模型保存后才可用?最好的方法是什么?保存两次

谢谢

如果其他人有问题,请更新。Google希望api请求的地址格式为Line1+Line2+Line3+Zipcode,而不是Line1、Line2、line、Zipcode等。因此,在尝试和地理编码之前,只需格式化字符串即可。它实际上不是Django/Python特定的

def save(self, **kwargs):
    if not self.location:
        address = u'{0}, {1}, {2}'.format(self.address_second, self.address_third, self.postcode)
        address = address.replace(" ", "+").replace(',', '')
        geocoder = GoogleV3()
        try:
            _, latlon = geocoder.geocode(address)
        except (GeopyError, ValueError):
            pass
        else:
            latlon = geocoder.geocode(address)
            point = 'POINT({0} {1})'.format(latlon[1][1], latlon[1][0])
            self.location = geos.fromstr(point)
    super(Venue, self).save()

FFS,每次我在这里问一个问题,我都会在大约30秒后计算出来……最后,结果发现谷歌不喜欢带有空格的地址,所以我不得不把它们去掉,然后用“+”将地址的每个部分加在一起。问题已更新,以备将来参考