拥有栅格(正方形)经纬度中心点、栅格边长,如何计算最大最小经纬度?

假设我们拥有了一个栅格边长为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
时间: 2024-11-26 02:25:49

拥有栅格(正方形)经纬度中心点、栅格边长,如何计算最大最小经纬度?的相关文章

根据2个经纬度点,计算这2个经纬度点之间的距离

原文  http://www.cnblogs.com/softfair/p/distance_of_two_latitude_and_longitude_points.html 根据 2 个经纬度点,计算这 2 个经纬度点之间的距离 球面上任意两点之间的距离计算公式可以参考维基百科上的下述文章. Great-circle distance Haversine formula 值得一提的是,维基百科推荐使用Haversine公式,理由是Great-circle distance公式用到了大量余弦函

【转】通过经纬度坐标计算距离的方法(经纬度距离计算)

最近在网上搜索“通过经纬度坐标计算距离的方法”,发现网上大部分都是如下的代码: #define PI 3.14159265 static double Rc = 6378137;  // 赤道半径 static double Rj = 6356725;  // 极半径 class JWD { public: double m_Longitude, m_Latitude; double m_RadLo, m_RadLa; double Ec; double Ed; public: JWD(doub

求出在某个经纬度方圆多少公里返回的最大最小经纬度

java代码,计算在地图上某个点,以这个点为中心,覆盖若干公里范围的最大和最小经纬度 package test; public class MainClass { public final static class GpsUtil { double pi; double distance; //地球平均半径6371km public static final double EARTH_RADIUS = 6371000; public GpsUtil() { this.pi = Math.PI;/

根据经纬度获取地名,根据地名获取经纬度

1. 根据经纬度获取地名 [objc] view plaincopy在CODE上查看代码片派生到我的代码片 CLGeocoder *clGeoCoder = [[CLGeocoder alloc] init]; [clGeoCoder reverseGeocodeLocation:newLocation completionHandler: ^(NSArray *placemarks,NSError *error) { for (CLPlacemark *placeMark in placema

根据经纬度查询最近距离,mysql查询经纬度附近范围

public class Test{ private static List<LocalAddress> ilist = new ArrayList<LocalAddress>(); public static void main(String[] args) { Test test3 = new Test(); Double localDouble = 0.0; //定义一个二维数组存放经纬度 Double[][] doubles = { { 22.6036906766, 113

通过经纬度坐标计算距离的方法(经纬度距离计算)

http://home.juedui100.com/user/23468184.htmlhttp://home.juedui100.com/user/23771088.htmlhttp://home.juedui100.com/user/24018651.htmlhttp://home.juedui100.com/user/23875372.htmlhttp://home.juedui100.com/user/23874288.htmlhttp://home.juedui100.com/user

在数据库中根据经纬度查找数据中所有附近的经纬度点

ALTER FUNCTION [GetDistance] ( @GPSLng DECIMAL(12,6), @GPSLat DECIMAL(12,6), @Lng DECIMAL(12,6), @Lat DECIMAL(12,6) ) RETURNS DECIMAL(12,4) AS BEGIN DECLARE @result DECIMAL(12,4) SELECT @result=6371.004*ACOS(SIN(@GPSLat/180*PI())*SIN(@Lat/180*PI())+C

给定了经纬度的一张my_latlng表,和一个栅格my_grid表,怎么实现my_latlng表回填栅格id?

场景: 假设我们拥有一个拥有了一系列经纬度的表my_latlng(lat string,lng string)表,还有一张给定的栅格表my_grid(gridid bigint,centerlng double,centerlat double,gridx int,gridy int,minlng double,maxlng double,minlat double,maxlat double)并且栅格的为一个边长为5m的正方形,其中: gridid       :栅格idcenterlng:栅

MAPINFO中利用GridMaker工具创建栅格图层

在工作中需要使用栅格地图,以往都是由研发人员来创建,今天偶然发现Mapinfo中有GridMaker这样一个工具,结合网络搜索自己试了一下,居然做成功了,这里把步骤记录下来,方便以后查看. 1.首先在测定需要创建栅格的城市经纬度范围 这个比较简单,分别将鼠标放在地图区域的左下角和右上角,然后通过Mapinfo左下角的CursorLocation得到两个点的经纬度,即为整个区域的经纬度范围. 2.Mapinfo中添加GridMaker工具 在Mapinfo中Tools->Tool Manager中