【MapGIS二次开发】打造属于你自己的属性编辑器

/ 31评 / 0

  GIS工具最大的一个好处就是将图形信息和属性信息关联在一起了,工作区中的任意一个点、线、面图元都可以给它挂上相应的属性,进而可以描述出该图元的空间信息。MapGIS作为国内最大的GIS服务软件也有对应的属性编辑工具,但是就目前流行的MapGIS6.7来看,这属性编辑器是相当的简陋。

mapgis二次开发

  上图就是大家所熟悉的线属性编辑界面,默认情况下一次只能修改一个图元的属性参数,并且左侧字段名所代表的具体含义十分不明确,对于编图新手来说这是非常不直观的。但是你可以通过二次开发的方式自己完善这个属性编辑器,具体思路可以参考如下:

  首先我们要想好界面上应该有哪些选项,编辑功能是必不可少的,复制属性及粘贴属性功能也是不可或缺的,当然,一个界面中能同时显示点线面图元的属性那是最好的,这样便于批量修改属性,但是这样数据量大了查找某个属性有成了难题,我们还要增加查找属性的功能。这样大体的框架就形成了。Pavel所做的示例程序截图如下:

mapgis二次开发

  程序是C++写的,其中列表显示是由开放类GridCtrl实现的,用它的好处是可以直接点击属性框进行编辑,如果嫌麻烦你也可以使用MFC自带的ListCtrl控件,就是要再加一个编辑按钮。

  程序的思路已经有了,该轮到代码了,详细的代码太多了,只说一些关键的,以点图元为例,先获得点图元的结构:


CATT_STRU *pnt_att=NULL; //存储点图元的结构信息
char fldBuf[256]=""; //存储字段值
char * atts=NULL; //这个参数我还真不知道是什么意思,但_GetAtt还必须用到,有知道的童鞋可以指点我一下~~
short sig=_GetAtt(areanum,PNT,pntnum,&att_str,&atts); //areanum为工作区号,pntnum为点图元号,你可以自己获得
int catt_num=(pnt_att->hd).numbfield; //获得该图元所包含的字段个数
if (sig>0)
{
for (int i=0;ifldEntry[i]).fieldname;//获得第i个字段名称
/* 这里你就可以将字段名称插入到列表中当表头了 */
_CvtFldToString(att_str,atts,i,fldBuf,att_str->fldEntry[i].msk_leng+1,NULL,NULL);//将mapgis加密的字段名转化为字符串
CString list_text;//将第i个字段值保存到list_text里边
list_text+=fldBuf;
list_text.TrimRight();
list_text.TrimLeft();
/* 这里你就可以将字段值插入到表格中了 */
}
}

与此类似,你可以将线图元和面图元的属性信息添加到表格中去了。这只是显示功能,下边说一下编辑功能的实现,代码更简单,变量的声明和定义就不写了:

_GetAtt(ai,PNT,elmi,&catt,&att); //还是先获得点图元的结构信息
_SetFldFromStr(att,catt,(LPTSTR)(LPCTSTR)fldname,(LPTSTR)(LPCTSTR)text);//将字段名为fldname的字段值设置为text
_WriteAtt(ai,PNT,elmi,catt,att);//保存修改,这个函数非常必要,否则上一个函数的修改会不起作用

  到这里一个完整的图元属性编辑模块基本上就完成了,你可以结合自己的需求添加其他的小功能,比如批改属性、复制、粘贴整行或整列等等。另外,关于将字段值从英文简称翻译成中文描述的实现也很简单,就是按照《地质矿产术语分类代码》(GB9649)进行翻译的,算是简单的字符串替换。是不是这样的属性编辑器要比MapGIS自带的强大很多呢?

  限于项目保密要求,本实例的完整代码就不提供了,本文只是介绍一下思路,希望会对大家学习MapGIS二次开发提供一些帮助和参考。

《 “【MapGIS二次开发】打造属于你自己的属性编辑器” 》 有 31 条评论

  1. 七七说道:

    很不错了,支持博主.

  2. liveme说道:

    还没用过MapGIS……

  3. 太子虹说道:

    好专业的知识,路过了。

  4. 么么?说道:

    么么么? 😳

  5. 卢松松说道:

    小工具到是很实用

  6. 小段说道:

    有前途,用户都来反馈了!

  7. 山人网络说道:

    不错,我也想学这方面的。

  8. 湖南seo说道:

    程序员吧、有机会可以帮我改改

  9. onion.yang说道:

    不错!很厉害!
    GeoMAG是你们的项目组开发的?

    • Pavel说道:

      @onion.yang 😮 是的,貌似您也用过了?猜测您不是广西地调院就是桂林理工大的 :mrgreen:
      使用过程中如果有什么反馈意见或者需求还请给我们提出来,我们会加以改正~~

      • onion.yang说道:

        @Pavel 改来改去要人命了!您要知道改动一个软件很简单,但是使用这个软件的项目就要改动非常大! 😀 老大拜托就不要改了。现在还有的bug在这就不说了。
        很欣赏GeoMAG让mapgis属性和excel操作那么灵活,方便!强汗!!

        • Pavel说道:

          @onion.yang 呵呵 其实我们也叫苦不迭, ➡ GeoMAG是基于后台模型的程序,但是上头要求的潜力评价模型经常发生变化,我们就得反复装载新的模型,程序代码上其实没大有变化,变化的是GeoMAD.mdb这个数据库

  10. 山头人说道:

    有机会,有时间再打造。

回复 七七 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注