您的位置:首页 > 编程语言 > Go语言

一步步DIY: OSM-Web服务器(七) 利用 Google WebService 批量下载遥感瓦片数据

2014-12-20 10:27 615 查看
前面六篇,是集中精力写的,其实,整个流程顺利走过来,花了笔者两个月的时间哦!因为无聊的网速、不给力的硬盘,以及停电,几乎到了恨不得砸机器的地步啦!~~ 走到现在,我们有了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)

[cpp]
view plaincopy

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个师兄
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐