(-:<转载时请注明本文由goldenhawking在 CSDN blog 撰写 http://blog.csdn.net/goldenhawking/article/details/8005564
前面六篇,是集中精力写的,其实,整个流程顺利走过来,花了笔者两个月的时间哦!因为无聊的网速、不给力的硬盘,以及停电,几乎到了恨不得砸机器的地步啦!~~ 走到现在,我们有了B/S C/S两种架构的地图服务,可是,总觉得还缺了什么——对了,只有矢量怎么行?!我们还要卫星图片!
谈到卫星图片,最有名的是 Google Earth。可是,Google Earth 的缓存很不好利用。那么 google map 呢?我们用 fire-fox 的 firebug 看看,google map 的瓦片地址是神马样子的!
哦,原来是
http://mt2.google.cn/vt/lyrs=s@116&hl=zh-CN&gl=cn&src=app&x=0&y=3&z=2&s=Gal
虽然不知道很多东西的具体含义,但是,我们看到 x, y, z,还是很熟悉啊!
有了这个,就可以根据需求下载瓦片啦!我们可以自己实现一个Web Service,按照需求下载瓦片按照 Z,X,Y的顺序来存储,这样,随着用户的浏览,一块块遥感图片就存在自己的服务器上了。
还仿照 第六篇的做法,按照C/S结构设计的下载器比较简单。下面的代码是下载瓦片的片段(Qt4)
QString strTargetPath = QCoreApplication::applicationDirPath()+"/tiles"; mkdir(strTargetPath.toAscii().data()); strTargetPath += QString("/%1").arg(nLevel); mkdir(strTargetPath.toAscii().data()); strTargetPath += QString("/%1").arg(nX); mkdir(strTargetPath.toAscii().data()); strTargetPath += QString("/%1.png").arg(nY); QString strVal = m_strServerURL; QString strTail; strVal += "/osm_tiles2/"; strTail += "/"; strVal += QString::number(nLevel,10); strTail += QString::number(nLevel,10); strVal += '/'; strTail += "/"; strVal += QString::number(nX,10); strTail += QString::number(nX,10); strVal += '/'; strTail += "/"; strVal += QString::number(nY,10); strTail += QString::number(nY,10); strVal += ".png"; strTail += ".png"; strVal = QString("http://mt2.google.cn/vt/lyrs=s@116&hl=zh-CN&gl=cn&src=app&x=%1&y=%2&z=%3&s=Gal") .arg(nX).arg(nY).arg(nLevel); bool res = true; if (this->m_bconnected==true) { QByteArray array_out; if (image.load(strTargetPath)==false) { QByteArray array_outImage; res =m_download_manager.download(strVal,array_outImage); if (res==true) { res = image.loadFromData(array_outImage); if (res == true) image.save(strTargetPath); } } if (res==false) image = QImage(256,256,QImage::Format_ARGB32); } else image = QImage(256,256,QImage::Format_ARGB32); ......如果需要批量下载,则需要搞清楚各层瓦片的编号。按照摩卡托投影的分划,上一层每个瓦片在下一层分为4个,其坐标分别是
x*2, y*2
x*2+1,y*2
x*2,y*2+1
x*2+1,y*2+1
以此类推,迭代一下即可。
经过改造后,我们的C/S客户端也能显示并缓存卫星地图啦!
如果切换到OSM,会发现,他们是几乎配准好了的!二者的误差可能是卫星的正摄影像有高程补差?后面慢慢看。
-------------------------------------------------
其实,写到这里,经过了七篇,我们也只是把OSM 服务器的皮毛给走顺溜了。还有很多很多问题,没有涉及与考虑。很多时候觉得自己花这么多精力于这个东东,根本不是公司的业务范围,真是很二的事情了。不过,正因为没有压力,才好玩啊!不要把自己的兴趣当成工作,那样你会失去她--by N个师兄