现在再为你分享一下,如何在WeMapEngine中加载舆图做事的方法,不过该产品暂未发布,因此暂时还无法立即体验。

如何在WeMapEngine中加载显示舆图

根本舆图是大多数GIS运用的数字“基座”,由于有了根本图层,我们可以在上面进行各种类型的业务拓展开发。

例如,方案设计、指挥调度、舆图制图、植被成长检测、自然磨难防治、热力分布等专业功能研发。

php显示地图若何在WeMapEngine中加载显示地图 Node.js

我们的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加载调用各种在线舆图做事的方法,以及加载调用本地离线舆图的方法。

你可以立即点击“分享”按钮,将本文免费分享给你的朋友!