gpt4 book ai didi

python - Geopy ValueError "Didn' t 在地理编码时完全找到一个匹配项

转载 作者:太空狗 更新时间:2023-10-30 01:09:31 31 4
gpt4 key购买 nike

在 Django 中,我一直在尝试获取一个搜索字段来对位置进行地理编码,并从我的数据库中吐出一个按距离排序的列表。到目前为止,一切正常,除非我搜索 Google 返回多个结果形式的位置,例如“ann arbor, MI”。我收到 ValueError“没有找到一个地标!(找到 2 个。)”这是我的 views.py

from django.shortcuts import render_to_response
from models import CampSite
from geopy import geocoders
from django.contrib.gis.geos import *
from django.contrib.gis.measure import D
from campsites.forms import SearchForm
from django.http import HttpResponseRedirect


def results(request):
query = request.GET['q']
g = geocoders.Google(resource='maps')
location, (lat, lon) = g.geocode(query)
pnt = fromstr("POINT(%s %s)" % (lon, lat))
distance_from_point = {'mi':'2000'}
results = CampSite.objects.filter(lonlat__distance_lte=(pnt,D(**distance_from_point))).distance(pnt).order_by('distance')
return render_to_response('results.html',{'location': location, 'lat': lat, 'lon': lon, 'results':results})

我在网上找到的常见解决方案是更改

位置,(纬度,经度)= g.geocode(查询)



location, (lat, lon) = g.geocode(query, exactly_one=False)

但是,这会产生新的 ValueError“无法识别为 WKT EWKT 和 HEXEWKB 的字符串或 unicode 输入。”

这是我在教程之外做的第一个 django 项目,所以谢谢你的外邦人。

最佳答案

在 Python 中,解释器是你最好的 friend 。

>>> g.geocode('ann arbor, MI', exactly_one=False)
[(u'Ann Arbor, MI, USA', (42.2808256, -83.743037799999996)),
(u'Ann Arbor, MI, USA', (42.307649300000001, -83.8473015))]

如果您尝试您的代码片段,您会发现当与 exactly_one=False 一起使用时,该方法返回一个元组列表,而不是单个元组 - 因此您的代码需要相应地重构。

results = []
geocodes = g.geocode(query, exactly_one=False)
for geocode in geocodes:
location, (lat, lon) = geocode
pnt = fromstr("POINT(%s %s)" % (lon, lat))
distance_from_point = {'mi':'2000'}
results.append(
CampSite.objects.filter(
lonlat__distance_lte=(
pnt,
D(**distance_from_point)
)
).distance(pnt).order_by('distance')
)

上面是未经测试的,但是在循环之后你应该得到一个结果列表。然后你应该决定做什么:

  • 只显示第一个(geocodes[0]results[0])
  • 要求用户从列表中选择
  • 显示所有结果(迭代模板中的 zip(geocodes, results))

关于python - Geopy ValueError "Didn' t 在地理编码时完全找到一个匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12518950/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com