有没有人成功完成过这项工作?
尝试复制类似于找到的功能 http://www.walmart.com/cservice/ca_storefinder.gsp
用户可以输入城市,州或邮政编码并进行智能查询
我开始尝试使用一些正则表达式和拆分字段但我很快意识到这是一项需要更多考虑才能使其最终用户能够智能工作的任务
考虑的方法
片段
import re
from general.models import ZipCode
def findLocation(value):
match = re.search(r"\d{5}", value)
if match:
try:
return Zipcode.objects.get(zip=value)
except ZipCode.DoesNotExist:
return False
else:
kwargs = {}
vals = value.split(',')
if len(vals) > 1:
kwargs['city'] = value[:len(value)-len(vals[-1])-1]
state = vals[-1].strip()
if len(state) == 2:
kwargs['state'] = state
else:
kwargs['state_name'] = state
else:
kwargs['city'] = value
return ZipCode.objects.filter(**kwargs)
此示例中的ZipCode是一个数据库模型,其中包含所有美国邮政编码/州/州缩写/城市
在github上有一份副本答案 0 :(得分:2)
最近遇到类似的问题,我使用Google的Geocoding API来做到这一点。好的部分是你根本不需要解析地址字符串。你只是将它传递给谷歌,它处理解析。如果找到某个位置,它会返回一个描述该地址的结构化对象。您可以提取所需的任何地址。
当然,只有拥有网站并且Google Maps TOS允许您使用地理位置API时,此解决方案才有效。
答案 1 :(得分:1)
对于这种高级功能,您最好使用一些专用工具,例如the Solr search engine。
如果你不知道它,它是一个基于java的开源,非常强大的搜索引擎,能够添加位置搜索功能。搜索操作将通过Web服务(xml,json等)执行
步骤基本如下:在服务器上安装solr,配置架构(存储和索引数据的方法),从数据库导入数据,并将搜索表单绑定到Web服务。
您可能需要阅读this article to have more informations about geolocation searches(可能稍微过时,您需要检查)。