Algorithm “怎么做?”;“查找最近的位置”;工作

Algorithm “怎么做?”;“查找最近的位置”;工作,algorithm,mapping,Algorithm,Mapping,如今,大多数餐馆和其他企业的网站上都有一个“”功能,其中列出了给定地址/邮政编码的最近位置。这是如何实现的?将zipcode与DB进行匹配是一种简单的、不需要动脑筋的方法,但可能并不总是有效,例如,可能有一个分支靠近给定位置,但可能位于不同的zip中。我想到的一种方法是将给定的邮政编码/地址转换为地图坐标,并列出任何落入预定义半径的分支。我欢迎您对如何实现这一点的想法。如果可能,请提供更详细的实现细节,如所使用的任何web服务等,,就像您所说的那样。将地址/邮政编码转换为二维世界坐标,并将其与其

如今,大多数餐馆和其他企业的网站上都有一个“”功能,其中列出了给定地址/邮政编码的最近位置。这是如何实现的?将zipcode与DB进行匹配是一种简单的、不需要动脑筋的方法,但可能并不总是有效,例如,可能有一个分支靠近给定位置,但可能位于不同的zip中。我想到的一种方法是将给定的邮政编码/地址转换为地图坐标,并列出任何落入预定义半径的分支。我欢迎您对如何实现这一点的想法。如果可能,请提供更详细的实现细节,如所使用的任何web服务等,

,就像您所说的那样。将地址/邮政编码转换为二维世界坐标,并将其与其他已知位置进行比较。选择最近的。:)我认为一些数据库(Oracle,MSSQL 2008)甚至提供了一些有帮助的功能,但我从未使用过它们。

我认为它非常通用。他们获取地址或zipcode并将其转换为“地图坐标”(根据实现的不同而不同,可能是lat/long),然后使用数据库中事物的“地图坐标”,很容易计算距离


请注意,一些糟糕的实现将zipcode转换为表示zipcode区域中心的坐标,这有时会产生不好的结果。

您对如何进行转换的想法是我可能会如何进行的。您可以对邮政编码的co oridinated进行地理编码,然后在此基础上进行计算。我知道SQL Server 2008有一些特殊的新功能,可以帮助根据这些地理编码的lon/lat坐标进行查询。

有一个标准的zipode/location数据库可用。这包括zipcode的lat/long以及其他信息。然后,您可以使用PostgreSQL GIS扩展对位置进行搜索,例如


(当然,假设您提取access数据库并插入到更友好的数据库(如PostgreSQL)中)

许多地理空间框架将帮助您解决这一问题。在地理空间世界中,邮政编码只是一个“多边形”,它只是地图上定义清晰边界的区域(而不是数学意义上的多边形)。例如,在SQL 2008 spatial中,可以基于原始多边形创建新多边形。因此,您可以动态创建一个多边形,该多边形是您的邮政编码,在每个点上延伸一定距离。它考虑了邮政编码的时髦形状。有了地址,这很容易,因为你只需要创建一个多边形,它是一个围绕一个点的圆。然后,可以执行以下操作:通过任何一种方法创建的新多边形中的所有点

很多这样的网站基本上就是这样做的。它们给出了5英里长的多边形内的所有点,然后可能是10英里长的多边形,依此类推。他们实际上并不是在计算距离。网络上的大多数文学硕士课程一点也不复杂


你可以看到一些基本的例子来大致了解我所说的内容。

首先,你对地址进行地理编码,将其转换为(通常)纬度和经度。然后,在数据库上执行最近邻查询以查找感兴趣的点


大多数空间索引不直接支持最近邻查询,因此通常的方法是在一个大小合理的边界框上查询,以地理编码点为中心,然后对内存中的结果进行排序,以选择最近的结果。

有实际的几何算法和/或数据结构支持较低的O(…)对点、线和/或区域数据的最近位置查询

请参见其中一些示例信息,如:Voronoi图、四叉树等

然而,我认为这里的其他答案在当今软件中的大多数情况下都是正确的:

  • 搜索区域的地理编码(单个点)
  • 边界框查询以获得初始大概值
  • 内存中排序/选择

  • 我有一个表,我每6个月编译一个数据库表,它包含3列,我在澳大利亚的一些客户机上使用过它,它包含大约40k行,运行查询非常轻量级如果只是想为客户做点什么,这相当快

  • 邮政编码自
  • 邮政编码至
  • 距离


    选择门店标识、门店账号名称、门店邮编、门店地址、门店郊区、门店电话、门店状态、编码、与门店的距离,(选择Code_To As Code_To,Code_Distance FROM Code WHERE Code_FROM=@PostalCode UNION ALL选择Code_FROM As Code_To,Code_Distance FROM Code WHERE Code_To=@PostalCode UNION ALL选择@PostalCode As Code_To,0 As Code_Distance)上面提供的链接返回一个错误作为代码,其中Store\u PostalCode=Code\u To和Code\u Distance。请您在可能的情况下/何时更新?谢谢!