拥有正方形经纬度中心点、正方形边长,如何计算正方形范围内最大最小经纬度?...

假设我们拥有了一个栅格边长为5米的栅格的中心点经纬度坐标,如何计算栅格的最大最小经纬度呢?

1)首先,需要把经纬度转化为mercator米坐标:

 1   class Geometry(_x: Double, _y: Double) {
 2     def x: Double = _x
 3 
 4     def y: Double = _y
 5   }
 6 
 7   def lonLat2Mercator_(lon: Double, lat: Double): Geometry = {
 8     val x = lon * 20037508.34 / 180;
 9     var y = Math.log(Math.tan((90 + lat) * Math.PI / 360)) / (Math.PI / 180)
10     y = y * 20037508.34 / 180
11     new Geometry(x, y)
12   }

2)把栅格中心点换算为mercator米坐标后,可以根据栅格边长算出经、纬度最大、最小mercator坐标值:

    var longitude: Double = 120.099878323
    var latitude: Double = 30.876723923
    var abc = lonLat2Mercator_(longitude, latitude)
    var dfs: Geometry = mercator2lonLat(new Geometry(abc.x, abc.y))
    println(dfs.x)
    println(dfs.y)

    var mercatorLngLat = lonLat2Mercator_(longitude, latitude)
    var minX: Double = mercatorLngLat.x - 2.5
    var maxX: Double = mercatorLngLat.x + 2.5
    var minY: Double = mercatorLngLat.y - 2.5
    var maxY: Double = mercatorLngLat.y + 2.5

3)把米坐标的最大最小经纬度转化为经纬度的最大最小经纬度,即为:栅格的最大最小经纬度。

    var leftUpLngLat: Geometry = mercator2lonLat(new Geometry(minX, maxY))
    var rightDownLngLat: Geometry = mercator2lonLat(new Geometry(maxX, minY))

    var minLng: Double = leftUpLngLat.x
    var maxLat: Double = leftUpLngLat.y
    var maxLng: Double = rightDownLngLat.x
    var minLat: Double = rightDownLngLat.y

    println(minLng)
    println(maxLng)
    println(minLat)
    println(maxLat)
1   def mercator2lonLat(mercator: Geometry): Geometry = {
2     val x: Double = mercator.x / 20037508.34 * 180
3     var y: Double = mercator.y / 20037508.34 * 180
4     y = 180 / Math.PI * (2 * Math.atan(Math.exp(y * Math.PI / 180)) - Math.PI / 2)
5 
6     new Geometry(x, y)
7   }

验证数据结果:

"D:\Program Files\Java\jdk1.8.0_111\bin\java。。。"
com.intellij.rt.execution.application.AppMain TestScalaMain
120.099878323
30.876723923000004
120.09985586511787
120.09990078088211
30.87670464799393
30.876743198002185

Process finished with exit code 0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值