主题位置 通讯与导航 » 论坛 » 通讯与导航 » 把单纯的JPG图像做成OruxMaps地图的方法,和几个要请教的问题
« Prev1Next »
分享
旧帖 2017-09-14 14:44:28
Post #1
把单纯的JPG图像做成OruxMaps地图的方法,和几个要请教的问题
 
chenxijun 离线 chenxijun

把单纯的JPG图像做成OruxMaps地图的方法,和几个要请教的问题

基本的思路是通过其他方法得到这张图片边缘的gps坐标,然后用OruxMapsDesktop生成OruxMaps地图。我在网上能找到的OruxMapsDesktop教程,都是用Global Mapper生成带地理信息的TIF图像,而当我们只有一张卫星或航拍的jpg图片的话自然就没有地理信息了,所以只能手动添加地理信息,好在OruxMapsDesktop只需要这张图的上下左右四个边界的经纬度即可,我们可以通过Google Earth或者TerraServer网站来得到上下边缘的纬度和左右边缘的经度

接下来,我用一张在TerraServer抓取的卫星图像,来制作一个地图。为什么要用TerraServer呢,它的卫星图更新相对很快,往往能找到近1年内的新图,比Google Earth有时候快得多。当然了,它也有大问题:不花钱的话只能预览,而且预览图还是带水印的,有时候干脆是单色的,不过,谁叫它新呢,Google Earth卫星图上的路往往是几年前的,很多新路还要等着它更新,不知道哪年哪月才会更。

如果你已经有jpg图片了,则可以忽略下文的前两步

1,打开www.terraserver.com抓图:可以用任何抓图程序把屏幕上的图抓下来,我直接用360浏览器把整个网页保存成图片了



可以看到TerraSever提供2017年4月22号的卫星图像预览,这个地方是最近建了风力发电厂,而Google Earth现在还是2014年3月27号的图,压根没有这些施工的道路

注意看图的右上角 LAT : 31.82022 N   LONG : 113.95934 E 这个就是光标所在位置的纬度和经度了,等下会用到

2,用PS处理一下:我自己实际上抓了104张,在ps里把他们拼接起来了得到一张17级的全区域大图,大概像下图这样,这个是缩小到16%来显示的最下面一小部分,实际上这图很大,600多兆。拼接实际上比想的容易,先大致对齐,然后放大到500%,在边缘找几个标志性的像素点,两张图上一对应,用键盘的方向键每次移动一个像素,最终100多个图层都丝毫不差



然后修剪一下,去掉拼接时造成的不规则的边边角角,剪切出一个长方形,保存为jpg图像,就得到了一张不带地理信息的卫星图。我个人建议剪切的时候,图像的长宽像素都要是512的整数倍。我保存的这张图的像素为5120x9728,是刚才那张拼接图的上半部分,这张jpg图像也有差不多50M大小



3,在TerraSever上找出这张图上下左右边界的经纬度:这个,只能是大致数据了,但也够用了。本来网站提供的经纬度只精确到小数点后5位(Global Mapper做出来的,小数点后有14位),何况鼠标的光标还是个手型的,占了很大一块面积,光标的实际位置是在这个手的正中间。据我测试,17级大小下,这种全靠目视的方法误差不过5个像素以下,也就是3米以内



上面这张图,箭头所指的那个小白点,就是上边缘的一个明显的特征点,在网页上找到对应的位置,就可以取得上边缘的纬度了

同样的方法在这张jpg图的上下左右四个边缘各找到一处明显与旁边不同的特殊点,然后在TerraSever上把鼠标移到对应的位置,在网页的右上方读出并记下相应的经纬度数字。OruxMapsDesktop需要四个数字:上边缘的纬度、下边缘的纬度,左边缘的经度、右边缘的经度,知道了这四个参数实际上也就知道了四个角的经纬度坐标。

我这张图读出的数据如下图所示


如果是其他途径得到的图片,也可以在Google Earth里面找边缘坐标,Google Earth的坐标用的是度分秒格式,不要紧OruxMapsDesktop也支持度分秒格式的

4,启动OruxMapsDesktop,这个软件是用JAVA写的,Windows下不能直接运行,机器上需要先安装有JRE。界面如下图所示,介绍一下各个必需的参数如何填写



Calibration file 校准文件,空着,这个参数本来是打开一个带地理信息的TIF文件,从中直接读取图片的地理坐标信息,而我们没有这个
Image file 图像文件,打开刚刚作的JPG图像即可
DATUM 基准,选择WGS1984(实际上我不确定)
PROJECTION 投影方式,选择LATITUDE/LONGITDUE
X的P1填0,Y的P1也填0。
X的P2填5120就是图像的横向像素,Y的P2填9728就是图像的纵向像素
    (P1和P2实际上就是图像的左上角和右下角的像素坐标)
Longitude 的上一行填图像左边缘的经度,右边Latitude填图像上边缘的纬度
Longitude 的下一行填图像右边缘的经度,右边Latitude填图像下边缘的纬度
    (实际上就是填写了图像左上角P1和右下角P2的经纬度坐标)
这些填好了之后,程序就知道这个图有多大,对应的实际地理尺寸又是多大,自动算出来这是个多少级的地图。而有TIF的话,这些参数是自动填好的
Map Name和Destiny Directory 填写地图的名称和保存位置,名称不支持中文
jpeg / png Format 默认是保存jpg格式瓦片,质量我反正每次都是100%,png的还从没用过
MultLayer 多层,默认不选,因为一张图做出来的天生是个单层的,这里即使选了多层其他层也是直接缩小图像,图上的字也会缩小
Only otrk2 file 不要打勾,否则只生成一个xml而不生成地图瓦片数据库
Sqlite format 默认打勾不要动它,因为OruxMaps本来默认用的就是Sqlite数据库来保存瓦片
最后点击Create Map按钮让它制作即可,一分钟不到,地图就制作成功啦

5,把地图装入OruxMaps,导入一个此地图范围内的轨迹,看看偏差如何。太不准了?貌似填的再准也会偏的,我发现程序会把我刚才填的经纬度自己改掉,但原因没搞清楚。下面,我们把数值再改回去即可

打开地图文件里的XML文件(最好找个专门的xml编辑器),修改其中12处数值。看到没有,这些数字都不是我刚才填的,被改掉了,我要把它手动复原

<MapBounds minLat="31.777956040536875" maxLat="31.873472758693747" minLon="113.90443000000002" maxLon="113.95939986349309" />
<CalibrationPoint corner="TL" lon="113.90443000000002" lat="31.870049999999996" />
<CalibrationPoint corner="BR" lon="113.95939986349309" lat="31.781378799230612" />
<CalibrationPoint corner="TR" lon="113.95289602020064" lat="31.873472758693747" />
<CalibrationPoint corner="BL" lon="113.91093384329244" lat="31.777956040536875" />
minLat 纬度的最小值,对于我们北半球来说,是图片下边缘的纬度,改成 31.78137
maxLat 纬度的最大值,改成上边缘的纬度 31.87005
minLon 经度的最小值,对于我们东半球来说就是图片左边缘的经度,改成 113.90443
maxLon 经度的最大值,改成右边缘的经度 113.95941
下面四行,分别是左上角(TL)、右下角(BR)、右上角(TR)、左下角(BL)的经度(lon)和纬度(lat),分别改成上面的对应的四个数值

最终结果如下
<MapBounds minLat="31.78137" maxLat="31.87005" minLon="113.90443" maxLon="113.95941" />
<CalibrationPoint corner="TL" lon="113.90443" lat="31.87005" />
<CalibrationPoint corner="BR" lon="113.95941" lat="31.78137" />
<CalibrationPoint corner="TR" lon="113.95941" lat="31.87005" />
<CalibrationPoint corner="BL" lon="113.90443" lat="31.78137" />

好了,再来试验一下,刷新一下离线地图再切换,这次轨迹跟道路重合度就很高了




下面是几个我没搞懂的问题,也是发这个帖的主要目的:
1,DATUM这里应该选择WGS1984吗?以前用GM的时候,导出地理信息自然是,所以选择WGS1984,但是TerraServer的坐标系是WGS1984吗?
2,OruxMapsDesktop程序为什么会改掉我填的数据?又是根据什么改的?
3,图像的长和宽是不是一定要是512的整数倍?因为瓦片的大小是512x512。我个人设想如果不是整数倍,程序把图像切割成正方形瓦片的时候会不会自己把最边缘不足一个正方形的瓦片都自动补成正方的?而因为这个操作实际上改变的整个图象的大小,所以他把经纬度也自动修改了?
4,TerraServer的预览图瓦片URL,看起来很像是WMS的格式,但是我直接调取瓦片总是失败。要是能直接调取的话,就能用MobileAtlasCreator工具下载甚至直接添加一个WMS在线使用。

哪位大神研究过这几个问题可否指点一下,谢谢!

 
旧帖 2017-09-22 15:13:23
Post #2
Re: 把单纯的JPG图像做成OruxMaps地图的方法,和几个要请教 ...
 
水手z 离线 水手z 直接用MobileAtlasCreator抓图不是更好
或者用ORUXMAPS直接下载离线地图

----------------------------------------
带部单反去流浪

 
旧帖 2017-09-24 09:22:37
Post #3
Re: 把单纯的JPG图像做成OruxMaps地图的方法,和几个要请教 ...
 
蓝峰 离线 蓝峰 用localspace viewer可以直接下载GE影像图,带坐标的

----------------------------------------
喜欢看着山在自己脚下的感觉!

 
旧帖 2017-09-24 10:18:55
Post #4
Re: 把单纯的JPG图像做成OruxMaps地图的方法,和几个要请教 ...
 
chenxijun 离线 chenxijun 首先感谢楼上二位关注这个帖子

至于为什么不直接下载GE的原因,我在第二段说明了,一个字:老!GE能下载但是是三年前的影象,terra不能下载却是今年的,所以才会出现这个帖子

顺便再次感谢本坛的水浸街老大开发的MOBAC扩展版,自动纠偏真是太好用了
 
« Prev1Next »
转帖分享
» 论坛 » 通讯与导航 » 把单纯的JPG图像做成OruxMaps地图的方法,和几个要请教的问题
快速回复
内容

 邀请xuliang1215参加此活动