如何在sql server中通过给定的邮政编码和以英里为单位的半径从附近的表中获取所有其他邮政编码或(纬度和经度)?

Posted

技术标签:

【中文标题】如何在sql server中通过给定的邮政编码和以英里为单位的半径从附近的表中获取所有其他邮政编码或(纬度和经度)?【英文标题】:How to get all other postcodes or (latitude & longitude) from table near by given postcode and given radius in miles in sql server? 【发布时间】:2014-05-23 06:02:24 【问题描述】:

我有带有纬度、经度和邮政编码的表格。我想选择以英里为单位的给定邮政编码和半径附近的记录。例如,用户将输入邮政编码 = 'NW44JL' 和半径 = 1 英里。我需要从表中获取邮政编码'NW44JL' 1 英里半径范围内的所有记录。谁能帮我得到这个。谢谢

【问题讨论】:

谷歌地图与此有什么关系? 我现在删除了谷歌地图标签。谢谢 lc 您的坐标在什么坐标系中?您想要的相对容易,但首先您必须能够将坐标转换为基于米/英里的坐标系。 【参考方案1】:

为此,您需要使用内置的SPATIAL 数据类型:

MSDN (Designing and Implementing Spatial Storage (Database Engine))

尝试以下由用户@SQLMenace 编写的教程来帮助您入门:

SQL Server Zipcode Latitude/Longitude proximity distance search

SQL Server 2008 Proximity Search With The Geography Data Type

【讨论】:

【参考方案2】:
Declare @radius int
--Radius for circle
set @radius=1

select distinct tb1.postcodes from table1 tb1
join table1 tb2 on (Power((tb1.latitude - tb2.latitude),2) + POWER((tb1.longitude - tb2.longitude),2)) < POWER(@radius,2)
where tb2.postcodes='NW44JL'

table1 是你的表名

以英里为单位考虑纬度和经度。 如果不需要转换成里程

【讨论】:

以上是关于如何在sql server中通过给定的邮政编码和以英里为单位的半径从附近的表中获取所有其他邮政编码或(纬度和经度)?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MS Access 2007 或 MS SQL Server 2005 中通过 SQL 将字段转换为行

SQL Server2008中通过SQL获取表结构

在 PySpark 中通过 JDBC 实现 SQL Server

在 SQL Server 2008 中通过联接在更新表中长时间执行

怎么在Delphi中通过BDE建立SQL Server数据库连接

在存储过程中通过用户的默认架构进行访问时,在SQL Server中切换用户失败