全新跨平台GIS引擎将问世!

一个GIS企业要有自主研发的GIS引擎,就像一个手机企业要有自主研发的芯片一样重要。

这个比喻可能不是很恰当,但目的只是为了说明GIS引擎对于一个GIS公司的重要性。

于是,我们花了巨大的时间和精力,自主研发了一款全新跨平台的国产化GIS引擎——WeMapEngine。

什么是WeMapEngine?

WeMapEngine是水经注完全自主研发的一款桌面端GIS引擎产品,100%自主可控,是一个桌面端的地图软件二次开发工具包。

产品具有跨平台、轻量化、渲染效率高、易扩展、支持动态投影等特点,产品内置提供了我们日常开发常见的GIS功能。

高度可定制的二次开发接口,允许我们快速构建专属GIS应用程序,或者为现有产品扩展地理特性。

引擎设计适配目标系统平台包括Windows(x86、x64)、Linux、macOS以及主流的国产系统。   

图片

WeMapEngine整体架构

内核组件在Windows平台仅9.68MB,当作为三方集成库时它不会使现有产品变得异常臃肿。

在不进行任何二次开发的前提下,引擎默认支持对常见的矢量和栅格文件格式或网络服务的解析。

例如,CSV、DXF、Shapefile、GeoJson、GPKG、BMP、JPEG、PNG、ESRI Hdr、ENVI Hdr、GeoTIFF、WMTS等等。

同时也提供了添加要素、顶点编辑、要素识别、要素选择等常用矢量行为工具,所有功能将在开发文档中有详细的说明。   

图片

二次开发文档

为了让你更加了解WeMapEngine,下面将基于“WeMapEngine For QT”的SDK,为你展示该GIS引擎的基本功能。

基于WeMapEngine开发数据加载功能

我们加载一个1.5GB的栅格的卫星影像和3938390个矢量点要素,只需要如下几行关键代码。

mRasterLayer = new WeRasterLayer(“栅格路径”); //创建栅格图层mVectorLayer = new WeVectorLayer(“矢量路径”); //创建矢量图层
//把图层添加到视图mMapView->addLayer(mRasterLayer);mMapView->addLayer(mVectorLayer); 

加载后浏览速度非常快,效果如下。   

图片

加载栅格与矢量图层效果

当然,本示例中仅添加了点要素,你也可以添加线和面要素。

基于WeMapEngine开发要素绘制功能

基于WeMapEngine开发一款GIS软件绘制功能时,并不需要我们去处理任何鼠标响应事件,只需要考虑要在哪个图层上进行绘制即可。

下面的示例代码演示这个过程。​​​​​​​

//1.设置需要绘制的目标图层为当前图层mMapView->setCurrentLayer(mVectorLayer);mVectorLayer->startEditing();//开启图层为编辑状态
//2.创建一个绘线工具,并将其设置为当前行为工具mAddFeature = new WeMapActionAddFeature(mMapView,WeMapActionCapture::CaptureMode::Line);mMapView->setMapAction(mAddFeature);

行为工具设置以后,在地图中便可以进行如上所示的添加要素操作。

图片

绘制要素

同样的道理,要绘制点或面只需要修改 WeMapActionCapture::CaptureMode 的类型即可。   

基于WeMapEngine开发图形编辑功能

基于WeMapEngine开发编辑功能,与开发要素绘制功能基本相同,唯一的不同就只是把添加要素行为工具更换为顶点编辑行为工具。​​​​​​​

//1.设置需要编辑的目标图层为当前图层mMapView->setCurrentLayer(mVectorLayer);mVectorLayer->startEditing(); //2.创建一个顶点编辑行为工具,并设置给视图mAddFeature = new WeMapActionVertexEditor(mMapView);mMapView->setMapAction(mAddFeature);

简短几行代码,就可以实现要素的编辑功能了。

图片

编辑要素

虽然编辑点、线和面等几何要素的交互方式是不同的,但编辑行为工具会自动处理这些问题,不需要开发者编写一行代码。

基于WeMapEngine开发符号定义功能

根据导航电子地图图形符号定义《GB/T 28443-2012》符号分类代码2700,对铁路符号颜色及比例的定义如下。​​​​​​​

宽度与黑节、白节长度的比例 1:5:5铁路颜色RGB(0,0,0)铁路间色RGB(255,255,255)

对应实现该规范的代码如下。  ​​​​​​​

//定义黑节和白节的符号样式WeSimpleLineSymbolLayer* pSegBlack = new WeSimpleLineSymbolLayer();WeSimpleLineSymbolLayer* pSegWhite = new WeSimpleLineSymbolLayer();
//配置铁路的黑节样式pSegBlack->setWidth(6); //铁路宽度(整个铁路的宽度)pSegBlack->setColor(QColor(0,0,0)); //黑节颜色pSegBlack->setWidthUnit(WeUnitTypes::RenderPixels); //单位像素
//配置铁路的白节样式pSegWhite->setWidth(4); //白节宽度pSegWhite->setPenStyle(Qt::CustomDashLine); //渲染为自定义虚线pSegWhite->setCustomDashVector(WeRealList() << 30 << 30); //黑节、白节的宽度是铁路的5倍pSegWhite->setCustomDashPatternUnit(WeUnitTypes::RenderPixels); //单位像素pSegWhite->setUseCustomDashPattern(true); //使用自定义虚线pSegWhite->setColor(QColor(255, 255, 255)); //白节颜色pSegWhite->setWidthUnit(WeUnitTypes::RenderPixels); 白节的单位像素
//获取图层的要素渲染器WeSingleSymbolRenderer* pRenderer = dynamic_cast<WeSingleSymbolRenderer*>(mVectorLayer->renderer()); 
//移除默认的符号样式(当然也可以把该样式拿出来直接修改参数,这里直接将其移除不要)pRenderer->symbolRef()->deleteSymbolLayer(0); 
//设置为定义的样式pRenderer->symbolRef()->appendSymbolLayer(pSegBlack);pRenderer->symbolRef()->appendSymbolLayer(pSegWhite);

图片

符号化铁路

这里仅演示了线要素的符号化开发功能,该GIS引擎同样也支持点和面要素的符号化功能开发。

WeMapEngine已进入内测

目前WeMapEngine已经进入了内测阶段,后续将会作为独立的产品发布供你体验。

另外,WeMapEngine已在我公司内部用于新版水经微图桌面端的开发,同时也是我们对该产品进行一个自我测试的过程。

鉴于相应的SDK帮助文档也在完善过程中,因此暂不对外开放。

写在最后

本文非常简单的演示了WeMapEngine引擎的二次开发过程,限于篇幅的原因,还未对更多的GIS功能进行演示。

其它功能包括但不限于对象捕获、要素选择、要素属性字段识别、基于表达式进行字段计算、调节栅格的亮度、对比度、饱和度等。

  • 14
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值