我想要实现的方式显示一个清单的储存地址按接近于给定地址。

地址列表中将存储在数据库表。单独的部分已经独立的领域(我们有领域的邮政编码、城市名称、等等)。 所以它不仅仅是一个巨大的 varchar.这些都是用户进入和由于系统的性质可能并不总是完整的(有些可能是丢失的邮政编码和其他人可能稍多于城市和状态)。

虽然这是一个内联网应用程序我没有问题,利用外部资源,包括访问互联网上网服务等。我实际上更希望在滚动我自己的除非它将是微不足道的做我自己。如果Google和雅虎!已经提供的免费服务,我愿意多来看看。关键字是它必须是免费的,因为我不是在自由于介绍任何额外费用到这一项目对于这个特征,因为它已经是一个奖金"津贴"。

我想这更像许多砖和迫击炮商店做他们的"找到一个位置"的功能。显示出它在一个简单的表序适当,并显示距离(说英里)是巨大的。表示地图混搭甚至冷却器,但我肯定可以生活才刚刚距离背和我处理所有的后续显示和排序。

问题简单的距离算法性质的数据。由于所有或部分地址可不确定的,我没有什么地喜欢纬度/经度coords.此外,即使我做的邮政编码需要,90%的地址可能会有相同的五个邮政编码。

虽然它不需要以极快,任何需要超过七秒钟出现在网页上由于等待时间可能太长,平均用户等待的,因为我们知道的。如果这样一个假设的服务支持发送一批地址一次,而不是查询一个在一段时间,这会是伟大的。仍然,我不应该想的地址列表中将超过50总的来说,如果得多。

有帮助吗?

解决方案

谷歌Yahoo! 两者都提供地理编码的服务是免费的。你可以计算的距离使用的 半正矢式 (实现。网或SQL).这两种服务将让你这样做的部分搜索(邮政编码、城市只有)和会让你知道什么是精确的结果(这样,你可以排除的位置没有意义的信息,虽然Yahoo!提供了更精密的信息比谷歌).

其他提示

谷歌地图API是没有对你很好,由于它们的使用条款。然而,雅虎提供一个休息服务的用于车削的地址进入长/纬度坐标,然后可以使用以计算的距离。它的 在这里,.

需要他们进入一个邮政编码,然后创建一个数据库表的映射的邮政编码于纬度/经度对(或者找到一个在线)。我不知道是怎么回事你在哪里工作但是这里的邮政编码可以被具体要几米,所以,应该能够精确。然后用这个计算方法之间的距离两个邮政编码:

public static double distance(double lat1, double lon1, double lat2, double lon2, char unit)
{
  double theta = lon1 - lon2;
  double dist = Math.Sin(deg2rad(lat1)) * Math.Sin(deg2rad(lat2)) +
    Math.Cos(deg2rad(lat1)) * Math.Cos(deg2rad(lat2)) * Math.Cos(deg2rad(theta));
  dist = Math.Acos(dist);
  dist = rad2deg(dist);
  dist = dist * 60 * 1.1515;
  if (unit == 'K')
  {
    dist = dist * 1.609344;
  }
  else if (unit == 'N')
  {
    dist = dist * 0.8684;
  }
  return (dist);
}

private static double deg2rad(double deg)
{
  return (deg * Math.PI / 180.0);
}

private static double rad2deg(double rad)
{
  return (rad / Math.PI * 180.0);
}

使用自己的代码,在地理编码服务,然后你可以做一堆更有趣的计算对数据以及储存的东西一起在你的数据库。

你就不能使用的谷歌地图API获取的距离,并对它们进行排序在你身边?

http://code.google.com/apis/maps/

我建议调查的谷歌地图。

这将需要有外部连接(和为它是正常的流数据在它的网服务),但是它提供了你要求,即距离要求的路线2点之间和获取的距离。

API reference的方向API

有一件事我们已经在我的公司作弊和使用的纬度/经度的邮政编码(约中心的邮政编码的区域)。它是不完美的,但它们足够接近那些我找x内n里y类型的搜查。 这是特别有用的当地址不能确认地址的清洁服务。

在某些时候,我遇到了一个免费的邮政编码于纬度/经度查表中要使用近似值。我很抱歉我没有链接到这个了。

看看这个网站: http://geocoder.us/help/utility.shtml

你可以处理记录、1每15秒钟就像这样:http://geocoder.us/service/distance?zip1=95472&zip2=94305

他们还有一个订阅服务而没有时间限制

其他人已经做了它已经在 愚蠢的逻辑 (编辑:错字).他们使用的谷歌地图API的 大圆式.我不认为这是难以实现。

更新:实际上,你只需要拿到坐标从你最喜欢的提供商,然后再做计算与你的代码。你可以预载的商店坐标,当用户提供他们的位置-你甚至可以用这对验证。然后,当提出要求,你只能查询客户的位置。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top