无人机海图调用介绍(一)

无人机海图调用

      年前工作最后一天,把之前整过的一些东西总结一下!

      通常情况下无人机地面站都是调用Google地图、百度地图、高德地图等等,这种地图在陆地上的精度可以接受,地物描述也比较详细,但海上部分就稀疏的多啦,无人机如果采用这些地图在海上飞行,是不太可能的。 

      无人机地面站海图调用:通过先有地图显示功能,设置相关地图切换按钮,海上飞行切换为海图;

     需要配置:海图服务器,如想离线操作还需在地面站上进行配置;

     算法:无人机常规的地面站地图和海图在投影方面都是应用墨卡托投影,但所采用的坐标系统不同,例如谷歌为EPSG:900913,而海图则是采用EPSG:3395,关于坐标系统在此就不多做介绍,不是一句两句可以说清楚的,后续有时间可以写点相关原理的文章。

一、海图调用说明:

1、海图瓦片:

海图范围:、经度在[-180,180],纬度在 [-80, 80]

海图图片大小:256*256

图片格式:png[无损、透明]

2、瓦片调用

1)将WGS84经纬度转换EPSG3395投影(简称3395),在通过3395投影坐标计算瓦片坐标(海图瓦片投影采用3395投影坐标系)。

2)瓦片的显示:

横轴:X(右侧为正方向)

纵轴:Y(下为正方向)

瓦片所在的层数:Z(海图瓦片支持1~17层)

瓦片相关资料可以参考:http://blog.csdn.net/youngkingyj/article/details/23365849

3)瓦片调用地址:

URL地址:

"http://localhost:9999/landsea/tile/TMS/getTile/cmap/full/s_z/s_x/s_y.png";

    s_z,s_x,s_y为瓦片坐标

4)瓦片转换为经纬度

瓦片坐标计算的经纬度是左上角点的经纬度,可以根据这个规律计算瓦片的四个角点的经纬度(如果需要计算的话)。

二、坐标转换算法

1. 算法介绍

墨卡托范围:

public static double XMIN = -20037508.34;//20026376.39;20037508.34278925

private static double XMAX = 20037508.34;

public static double XLength = XMAX - XMIN;

public static double YMIN = -15496570.74;// -15496570.74;

private static double YMAX = 18764656.23;  //15496570.74;// //

public static double YLength = YMAX - YMIN;

输入经纬度坐标(lon,lat)层数z

首先将经纬度转墨卡托坐标,设为(x,y)。

***********这里要用EPSG:4326转EPSG:3395。为了准确用pro4j来做*************

stepLength=Xrange/pow(2,z)

i=( x-Mxmin)/ stepLength    解释:x-Mxmin是计算点距离左边界的墨卡托距离。


这里细说一下i的处理当整除的时候不用处理,不整除的时候要取上整,如0.1,0.99都取1.那么x方向瓦片编号就是i-1。

接下来我们再来算y方向瓦片编号

j=(y-Mymin)/ stepLength   (stepLength就是上面的)j的处理和上面i的处理一样

同样的y方向瓦片编号就是j-1。

至此经纬度坐标所在外片编号已经算出来(i-1,j-1)

接下来我们算点在瓦片内哪个像素点上

Xremainder=x%stepLength   (模运算)

设x方向像素点坐标为Xpixel

stepLength/256= Xremainder/Xpixel

解方程可得Xpixel值

Y方向也是类似的,注意stepLength使用之前用的那个值。

其实基本思路就是,墨卡托坐标和屏幕坐标是成比例的。只要转化成墨卡托坐标,然后就能知道像素坐标。还有瓦片切割的规则是,在墨卡托坐标系内,将x方向平分成pow(2,z)份,这也是上面stepLength一直用x算的原因。之后让yx相等,切到最后y会不够整个瓦片,使用透明色补齐。这里的规则和google切瓦片的规则类似。区别就是我们的上下边界是80-80,谷歌的不是,所以你直接用谷歌的算法能把瓦片拼起来,但是往上画点就全部是错的。

 

2. Demo实现

坐标转换:

TransformTileWorld  类

lonLatToMercator经纬度转投影(4326WGS84坐标)

MercatorTolonLat投影转经纬度

CalculationNum经纬度计算瓦片坐标

CalculationLon瓦片坐标计算经纬度

 

SridReader

提取SRid.csv中的参数。

  

海图显示

ReadWMSMap2函数

此处注意海图显示位置排列。

UdpReciveThread为接收无人机数据,并在海图相应位置显示。

详见最新DEMO

注释:本文中采用的是projNet进行不同系统间坐标的转换。

后边会介绍算法和相关源码

猜你喜欢

转载自blog.csdn.net/u011326478/article/details/79295262