根据经纬度(lat,lng)查找附近的地点(续)

138 篇文章 0 订阅
32 篇文章 0 订阅
原文出处: http://blog.163.com/ezy_dk/blog/static/166651492201221445753585/

参考网文: 附近地点搜索初探  

下面给出自己总结的SQL代码
declare @EARTH_RADIUS float
set @EARTH_RADIUS = 6371000.00 --地球的半径

declare @lat float
declare @lng float
declare @dlng float
declare @dlat float
declare @distance int			--距离
set @distance = 300				--300米

set @lat =xx.xxxxx				--这个是中心地点
set @lng = xxx.xxxx				--中心地点

set @dlng  = 2 * asin(sin( @distance / (2 * @EARTH_RADIUS)) / cos(@lat))
set @dlng = degrees(@dlng) 
set @dlat =  300/@EARTH_RADIUS
set @dlat = degrees(@dlat) 

declare @lng1 float
declare @lng2 float
declare @lat1 float
declare @lat2  float
set @lat1 = @lat-@dlat				-- 西经
set @lat2 = @lat+@dlat				-- 东经

set @lng1 = @lng-@dlng				-- 南纬
set @lng2 = @lng+@dlng				-- 北纬 

select @lat1,@lat2,@lng1,@lng2
SELECT lat,lng 
FROM place 
WHERE 
	(lat > @lat1 AND lat < @lat2)	-- 经度范围
	AND 
	(lng > @lng1 AND lng < @lng2)	-- 纬度范围
常识:
1、经度(Latitude), 东经为正数,西经为负数;
2、纬度(Longitude), 北纬为正数,南纬为负数; 
附图:

除了使用geopy库之外,还可以使用其他的Python库来根据地址查找经纬度。以下是一些常用的方法: 1. 使用百度地图API 百度地图API提供了根据地址查找经纬度的服务,可以通过发送HTTP请求获取结果。具体操作步骤如下: - 在百度地图开放平台上注册账号,并创建应用,获取API key。 - 通过发送HTTP请求获取结果,示例代码如下: ```python import requests def get_location_by_baidu(address, ak): url = f"http://api.map.baidu.com/geocoding/v3/?address={address}&output=json&ak={ak}" response = requests.get(url) json_data = response.json() if json_data['status'] == 0: return json_data['result']['location']['lat'], json_data['result']['location']['lng'] else: return None ``` 其中,`address` 是要查询的地址,`ak` 是从百度地图开放平台获取的API key。 2. 使用高德地图API 高德地图API也提供了根据地址查找经纬度的服务,可以通过发送HTTP请求获取结果。具体操作步骤如下: - 在高德开放平台上注册账号,并创建应用,获取API key。 - 通过发送HTTP请求获取结果,示例代码如下: ```python import requests def get_location_by_gaode(address, key): url = f"https://restapi.amap.com/v3/geocode/geo?key={key}&address={address}" response = requests.get(url) json_data = response.json() if json_data['status'] == '1' and int(json_data['count']) > 0: location = json_data['geocodes'][0]['location'].split(',') return location[1], location[0] else: return None ``` 其中,`address` 是要查询的地址,`key` 是从高德开放平台获取的API key。 3. 使用腾讯地图API 腾讯地图API也提供了根据地址查找经纬度的服务,可以通过发送HTTP请求获取结果。具体操作步骤如下: - 在腾讯云开发者平台上注册账号,并创建应用,获取密钥。 - 通过发送HTTP请求获取结果,示例代码如下: ```python import requests def get_location_by_tencent(address, key): url = f"https://apis.map.qq.com/ws/geocoder/v1/?address={address}&key={key}" response = requests.get(url) json_data = response.json() if json_data['status'] == 0: location = json_data['result']['location'] return location['lat'], location['lng'] else: return None ``` 其中,`address` 是要查询的地址,`key` 是从腾讯云开发者平台获取的密钥。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值