根据经纬度(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), 北纬为正数,南纬为负数; 
附图:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
要根据经纬度获取所在地点的海拔高度,可以使用Java中的第三方库GeoTools。GeoTools是一个开源的Java GIS工具包,提供了丰富的空间数据处理功能,包括空间数据读写、空间数据分析、空间数据可视化等。 以下是使用GeoTools获取经纬度所在地点海拔高度的代码示例: ```java import java.io.File; import java.io.IOException; import org.geotools.coverage.grid.GridCoverage2D; import org.geotools.coverage.grid.GridCoverageFactory; import org.geotools.gce.geotiff.GeoTiffReader; import org.geotools.geometry.DirectPosition2D; import org.opengis.parameter.GeneralParameterValue; import org.opengis.parameter.ParameterValue; public class GetElevation { public static void main(String[] args) throws IOException { // 经纬度坐标 double lon = 116.3975; double lat = 39.9085; // 根据经纬度获取高程数据 double elevation = getElevation(lon, lat); System.out.println("经度:" + lon + ",纬度:" + lat + ",海拔高度:" + elevation + "米"); } public static double getElevation(double lon, double lat) throws IOException { // GeoTIFF文件路径 String filePath = "path/to/elevation.tiff"; // 读取GeoTIFF文件 File file = new File(filePath); GeoTiffReader reader = new GeoTiffReader(file); // 获取高程数据覆盖范围 GridCoverage2D coverage = reader.read(null); ParameterValue<?>[] params = new ParameterValue<?>[] { new DirectPosition2D(lon, lat) }; GeneralParameterValue[] values = new GeneralParameterValue[] { params[0] }; GridCoverageFactory factory = new GridCoverageFactory(); GridCoverage2D coverage2 = factory.create("Elevation", coverage.getRenderedImage(), coverage.getEnvelope()); GridCoverage2D elevation = (GridCoverage2D) coverage2.evaluate(values); // 返回高程数据 return elevation.getSample(0, 0, 0); } } ``` 以上代码中,我们首先定义了经纬度坐标(lon和lat),然后调用getElevation方法获取海拔高度。getElevation方法中,我们读取了一个GeoTIFF格式的高程数据文件,然后使用经纬度坐标获取高程数据覆盖范围,最后返回经纬度所在位置的海拔高度。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值