我想实现一种方法来显示按给定地址的接近度排序的存储地址列表.
列表中的地址将存储在数据库表中.单独的部分有单独的字段(我们有邮政编码,城市名称等字段)所以它不仅仅是一个巨人varchar
.这些是用户输入的,由于系统的性质可能并不总是完整的(有些可能缺少邮政编码,而其他可能只有城市和州).
虽然这是用于Intranet应用程序,但我使用外部资源(包括访问Internet Web服务等)没有任何问题.我实际上更喜欢滚动自己,除非做自己是微不足道的.如果谷歌或雅虎!已经提供免费服务,我非常愿意查看.关键字是它必须是免费的,因为我不能自由地为这个功能引入任何额外的费用,因为它已经是一个奖励"额外"可以说.
我正在考虑这个问题,就像许多实体商店在做"寻找位置"功能一样.在一个简单的表格中显示它并进行适当的排序并显示距离(例如,英里)很棒.显示地图混搭甚至更酷,但我绝对可以忍受距离回来,我处理所有后续的显示和排序.
简单距离算法的问题是数据的性质.由于全部或部分地址可能未定义,因此我没有像lat/long coords那样方便的东西.此外,即使我要求邮政编码,90%的地址可能会有相同的五个邮政编码.
虽然它不需要非常快,但是由于延迟而在页面上显示超过7秒的任何内容对于普通用户来说可能太长了,正如我们所知.如果这样的假设服务支持一次发送一批地址而不是一次查询一个地址,那就太好了.尽管如此,我不应该认为地址列表总数将超过50个.
谷歌和雅虎!两者都免费提供地理编码服务.您可以使用Haversine公式计算距离(在.NET或SQL中实现).这两种服务都允许您进行部分搜索(仅限邮政编码,仅限城市),并让您知道其结果的精确度(以便您可以排除没有有意义信息的位置,尽管Yahoo!提供的精确信息比Google更精确).