如何查找英里范围内的邮政编码
本文关键字:英里 范围内 邮政编码 查找 何查找 | 更新日期: 2023-09-27 18:35:54
我有一个包含客户邮政编码的数据库,我想创建一个页面,用户在其中输入邮政编码并选择例如 50 英里并按搜索,然后该页面应显示具有这 50 英里范围内的邮政编码的所有其他客户端。
表示在 50 英里半径内的给定邮政编码附近。
有没有API,Lib或其他东西可以给我这个功能?
如果您使用的是 sql 2008 或更高版本,则可以使用 sys.geography 数据类型将位置数据存储在数据库中,并让服务器为您进行计算。这样,您就可以保存其他内容的 API 调用。
如果您使用某种地理编码服务(如谷歌地图或必应)来获取和存储邮政编码的位置数据,则此方法有效。
我已经用一个简单的存储过程完成了这个,在我的最新项目中效果很好
CREATE PROCEDURE [dbo].[RadiusSearch]
@point varchar(500),
@distance int
AS
begin
declare @geoPoint geography
set @geoPoint = geography::STGeomFromText('POINT (' + @point + ')', 4326).STBuffer(@distance / 0.0006213712)
select [Whatever fields and inner joins you need to get the info you wanted]
where ClientZipCodes.Geolocation.STIntersects(@geoPoint) = 1
end
所以基本上我正在做的是将点数据作为字符串传递并将其转换为二进制地理点数据(因为在这种情况下,我从网页的异步 javascript 调用中设置存储的过程,如果您直接从数据库查询地理数据,这是不必要的),将距离变量设置为英里(这需要转换,因为默认测量值以米为单位),然后告诉它给出我的任何记录都有与我们刚刚设置的缓冲区相交的地理位置点。易于窥视和快速启动。
更好的解决方案:
使用 Google 地图地点 API 并插入客户的自定义位置,如下所示
然后,您可以使用这个简单的http url请求特定半径内的自定义地点列表,甚至可以按它们与当前地点的距离进行排序
https://maps.googleapis.com/maps/api/place/nearbysearch/output?parameters
参数将被radius in meters
,并且可以选择rankby distance
,如果您希望它按距离排序..这将返回该半径内所有客户位置的JSON。
请参阅此内容以了解如何搜索
除此之外,使用谷歌地图API,您将能够在地图上显示一个具有指定半径的圆圈以及其中的所有客户。那看起来很酷..
您可以获得免费的邮政编码数据库(我没有提供链接,您可以通过谷歌进行),其中包含纬度和经度,然后您可以轻松计算每个邮政编码之间的距离(以英里为单位),然后您将能够选择任何半径的所有邮政编码