现在再为你分享一下,如何在WeMapEngine中加载舆图做事的方法,不过该产品暂未发布,因此暂时还无法立即体验。
如何在WeMapEngine中加载显示舆图根本舆图是大多数GIS运用的数字“基座”,由于有了根本图层,我们可以在上面进行各种类型的业务拓展开发。
例如,方案设计、指挥调度、舆图制图、植被成长检测、自然磨难防治、热力分布等专业功能研发。
我们的WeMapEngine和其它二次开拓SDK相同,也支持多种形式的根本舆图加载显示,紧张包括WMTS瓦片舆图做事、自定义/模板URL和本地缓存瓦片等。
你通过WeMapEngine开拓GIS系统时,只须要编写少量的代码就可以完成根本舆图的加载与显示。
加载显示WMTS瓦片舆图WMTS是开拓地理信息同盟(Open Geospatial Consortium OGC)制订的瓦片舆图标准。
它基于静态缓存技能,实现该标准的做事常日具有支持高并发、高性能的技能特性, 大多数GIS做事端或客户端都支持该标准。
可以通过WeServer、GeoServer、ArcGIS Server或其它舆图做事端来发布该标准的舆图做事。
(1)加载显示WeServer发布的舆图
加载WeServer发布的舆图做事时,只须要添加类似以下的代码即可。
//准备做事地址const QString strUrl =QStringLiteral("https://test.ditushuju.cn:8086/WeServer/wmts?service=wmts&request=getcapabilities"); //创建WMTS图层pLayer = new WeWmtsLayer("GlobalMap", strUrl, "acimage"); //把图层添加到视图mMapView->addLayer(pLayer);
在Demo中运行代码后,就可以查看WeServer发布舆图的加载显示效果。
WeServer发布舆图的加载显示效果
(2)加载显示ArcGIS Server发布的舆图
加载显示ArcGIS Server发布的舆图做事时,只须要添加类似以下代码即可。
//准备做事地址const QString strUrl =QStringLiteral("http://sampleserver6.arcgisonline.com/arcgis/rest/services/WorldTimeZones/MapServer/WMTS"); //创建WMTS图层pLayer = new WeWmtsLayer("WorldTimeZones", strUrl, "WorldTimeZones"); //把图层添加到视图mMapView->addLayer(pLayer);
在Demo中运行代码后,就可以查看ArcGIS Server发布舆图的加载显示效果。
ArcGIS Server发布舆图的加载显示效果
以上为你分享了如何利用WeMapEngine加载WeServer和ArcGIS Server发布的WMTS做事,如果要加载其它舆图做事端发布的做事,方法也基本相同。
对付这样的标准舆图做事,在加载WMTS图层时仅须要供应做事的元信息地址,并指定要访问的图层名称就可以了。
加载显示URL自定义舆图对付供应了舆图做事API申请的数据做事商,大多都供应了WMTS做事的元信息地址,例如星图地球或天地图等。
但这并不能应对所有情形,由于有的舆图做事我们只能获取到瓦片的访问地址,比如OpenStreetMap舆图。
有时我们也希望自主构建更灵巧的要求办法,能够自定义瓦片要求地址。
从而设置自定义要求头信息,对须要附带Token的要求临时改换Token等操作。
该功能只须要通过继续WeServiceImageTiledLayer就可以实现自定义URL图层,下面的代码演示了如何自定义一个图层来加载星图地球的图源。
class MyCustomLayer : public WeServiceImageTiledLayer{ MyCustomLayer(const WeTiledInfo& tiledInfo, const WeRectangle& fullExtent) : WeServiceImageTiledLayer(tiledInfo, fullExtent, QStringLiteral("GeoVisearth")) { / 瓦片要求配置 / WeRequestConfiguration reqestConfig; reqestConfig.setRetryCount(5); reqestConfig.setTimeout(3000); QMapheaders; reqestConfig.setUserHeaders(headers); setRequestConfiguration(reqestConfig); / 监听瓦片要求时回调旗子暗记 / connect(this, &MyCustomLayer::tileUrlRequest, [&](const WeTileKey& tk) { //星图地球瓦片URL模板,用到的token可以在星图申请 const QString strUrlTemplate = QStringLiteral("https://tiles.geovisearth.com/base/v1/img/mercator/%1/%2/%3?format=webp&tmsIds=w&token=5196de35d4c1cf288b3ecf4c9e819b33c0e3bffad707ea9caeed599bf2a378ac"); //格式化URL const QString strUrlTile = strUrlTemplate.arg(tk.level()).arg(tk.column()).arg(tk.row()); //将URL设置给接口 setTileUrl(tk, stTileUrl); }); } ~MyCustomLayer() {};}
在Demo中运行代码后,就可以查看URL自定义舆图的加载显示效果。
URL自定义舆图的加载显示效果
同样地,通过以上方法也可调用吉林一号的在线卫星影像,条件是你已经申请了你的专属图源。
申请的详细方法,请参阅《如何申请吉林一号专属图源》一文中的详细解释。
加载显示XYZ瓦片模板舆图所谓“模板URL”是指具有特定占位符的舆图瓦片URL地址,合营引擎供应的Web瓦片图层接口,就可以轻松实现瓦片舆图的加载。
占位符是引擎内置的关键字,因此它不具有通用性。
WeMapEngine的内置占位符以及他们所代表的含义如下:
URL模板:https://{subDomain}.server.org/path/{level}/{col}/{row}.png
{level} : 级别
{col} : 瓦片列
{row} : 瓦片行
{subDomain} : 子域名(可选)
明白模板URL的接口往后,下面我们通过在来看一下如果利用模板URL图层来加载OpenStreetMap图源。
//OSM 瓦片地址const QString strOSMTemplate = QStringLiteral("https://tile.openstreetmap.org/{level}/{col}/{row}.png"); //创建图层 pLayer = new WeWebTiledLayer(QStringLiteral("OSM"), strOSMTemplate); //添加到视图pMapView->addLayer(pLayer);
由于SDK内置了OpenStreetMap图层,对付上面的示例我们还可以简化成如下形式。
//创建图层pLayer = new WeOpenStreetMapLayer(); //添加到视图pMapView->addLayer(pLayer);
在Demo中运行代码后,就可以查看XYZ瓦片模板舆图的加载显示效果。
XYZ瓦片模板舆图的加载显示效果
最常见的XYZ瓦片的模板舆图,有谷歌舆图、高德舆图和腾讯舆图等,因此这些舆图都可以在WeMapEngine中进行加载。
加载显示本地疏松型瓦片舆图WeMapEngine除了可以加载在线做事的舆图外,还可以加载显示本地的疏松型瓦片舆图。
但我们常日不建立将瓦片舆图在本地进行疏松型存储,尤其是环球范围这样的海量舆图数据。
关于这一点,我们在《互助,不是无条件的服从》一文中已为大家作过“血泪”分享。
不过在数据范围较小,一样平常不超过两三个中型省份这样的数据体量时,还是可以勉强存储为疏松型瓦片后再调用。
疏松型瓦片的存储办法,一样平常以“z/x/y.jpg”目录形式来表达的瓦片层级关系,如下图所示。
疏松型舆图瓦片目录
WeMapEngine可以通过继续WeImageTiledLayer图层来加载此类数据源,下面的示例演示了如何构建一个本地文件加载图层。
class MyLocalLayer : public WeImageTiledLayer{ Q_OBJECTpublic: MyLocalLayer(const WeTiledInfo& tiledInfo, const WeRectangle& fullExtent) : WeImageTiledLayer(tiledInfo, fullExtent, QString::fromLocal8Bit("本地瓦片")) { / 监听瓦片要求 / connect(this, &MyLocalLayer::tileRequest, [&](const WeTileKey& tk) { const QString strRootDir = QStringLiteral("G:\\Data\\Data.Publish\\tiled_google\\%1\\%2\\%3.jpg"); const QString strFileName = strRootDir.arg(tk.level()).arg(tk.column()).arg(tk.row()); QFile f(strFileName); if (!f.exists()) { //瓦片不存在,设置为NoData setNoDataTile(tk); } else if (!f.open(QIODevice::OpenModeFlag::ReadOnly)) { //打开文件失落败,设置缺点 setTileError(tk, QString("Cannot open: %1").arg(strFileName)); } else { //正常读取,设置瓦片数据 setTileData(tk, f.readAll()); } }); } ~MyLocalLayer() {}};
在Demo中运行代码后,就可以查看本地疏松型瓦片的加载显示效果。
本地疏松型瓦片的加载显示效果
通过扩展开拓,也支持加载调用存储为SQlite或MbTiles本地瓦片离线包。
本地数据的加载,常日用于私有化舆图的支配,而私有化舆图的支配一样平常适用于有保密须要的企奇迹单位。
如果想进一步理解私有支配干系方面的技能或方案,请参阅《私有化舆图离线支配整体办理方案》和《难以置信,谁还会用离线地球》等文中的详细解释。
WeMapEngine的舆图加载能力基于WeMapEngine的二次开拓,可调用加载各种舆图的方法,且仅须要编写少量的代码就可以实现。
因此当采取WeMapEngine作为GIS开拓平台时,你可以将更多的韶光和精力放在核心业务功能的研发上。
其余,WeMapEngine引擎也支持对WMS、TMS做事的加载调用,以及可能涉及的权限认证能力,这里只是限于篇幅的缘故原由暂略。
随着引擎的不断更新迭代,我们还会加入对矢量瓦片的兼容,从而实现更丰富自由多元化的地理元素信息渲染表达。
鉴于相应的帮助文档还在完善过程中,WeMapEngine的SDK开拓包暂不对外供应。
如果你想理解该WeMapEngine引擎的更多功能,请扫下方二维码添加微信,并发送“WeMapEngine”以解释来意。
扫码联系
写在末了本文为你分享了WeMapEngine加载调用各种在线舆图做事的方法,以及加载调用本地离线舆图的方法。
你可以立即点击“分享”按钮,将本文免费分享给你的朋友!