全国高分辨率土地利用数据服务 土地利用数据服务 土地覆盖数据服务 坡度数据服务 土壤侵蚀数据服务 全国各省市DEM数据服务 耕地资源空间分布数据服务 草地资源空间分布数据服务 林地资源空间分布数据服务 水域资源空间分布数据服务 建设用地空间分布数据服务 地形、地貌、土壤数据服务 分坡度耕地数据服务 全国大宗农作物种植范围空间分布数据服务
多种卫星遥感数据反演植被覆盖度数据服务 地表反照率数据服务 比辐射率数据服务 地表温度数据服务 地表蒸腾与蒸散数据服务 归一化植被指数数据服务 叶面积指数数据服务 净初级生产力数据服务 净生态系统生产力数据服务 生态系统总初级生产力数据服务 生态系统类型分布数据服务 土壤类型质地养分数据服务 生态系统空间分布数据服务 增强型植被指数数据服务
多年平均气温空间分布数据服务 多年平均降水量空间分布数据服务 湿润指数数据服务 大于0℃积温空间分布数据服务 光合有效辐射分量数据服务 显热/潜热信息数据服务 波文比信息数据服务 地表净辐射通量数据服务 光合有效辐射数据服务 温度带分区数据服务 山区小气候因子精细数据服务
全国夜间灯光指数数据服务 全国GDP公里格网数据服务 全国建筑物总面积公里格网数据服务 全国人口密度数据服务 全国县级医院分布数据服务 人口调查空间分布数据服务 收入统计空间分布数据服务 矿山面积统计及分布数据服务 载畜量及空间分布数据服务 农作物种植面积统计数据服务 农田分类面积统计数据服务 农作物长势遥感监测数据服务 医疗资源统计数据服务 教育资源统计数据服务 行政辖区信息数据服务
Landsat 8 高分二号 高分一号 SPOT-6卫星影像 法国Pleiades高分卫星 资源三号卫星 风云3号 中巴资源卫星 NOAA/AVHRR MODIS Landsat TM 环境小卫星 Landsat MSS 天绘一号卫星影像
MapX的官方帮助文档是《MapX在线帮助》。
个人认为,这套文档过于简单,系统性偏差,与ArcEngine的帮助文档不可比。很多MapX的开发技巧在《MapX在线帮助》中查找不到,只能在互联网上搜索。
本文试图从一个程序员的视角展开,来整理一下MapX的开发技巧。需要强调的是,VB+MapX模式是在《MapX在线帮助》中重点描述内容,本文将侧重于VC+MapX。
二、MapX的对象组织
MapInfo作为地图编辑平台,需要解决一个核心问题: 如何组织地理世界的空间数据和属性数据,以及如何在电脑屏幕上绘制出来。MapX作为二次开发控件,其对象组织结构将直接体现MapInfo对于地理世界的理解。
在阅读本文的同时,请读者打开《MapX在线帮助》,定位到“The MapX Objects”=〉“Intro - The MapX Objects”。注意:《MapX在线帮助》是安装MapX后的帮助文档,比如我安装了MapX4.0,那么通过“开始”=〉“程序”=〉“MapInfo MapX 4.0”可以打开《MapX在线帮助》。
这里是MapX的对象结构图(OMD),ArcEngine的帮助文档也有类似的图。学习二次开发,需要熟悉这张图。这样能“一览众山小”,心里有谱,知道如何下手去搜索对象。
从图中可以发现,OMD有两条核心主线。一条是用于表达空间数据的Layers->Layer->Feature->Parts等对象系列;另一条是用于表达属性数据的Datasets->Dataset->Fields->Field等对象系列。
这两条对象系列是MapInfo的精华所在。其他对象诸如注记、专题、查询等对象都是在两条主线上衍生出来的支线。有能力的读者,如果想从底层写一个地图编辑平台,也可以借鉴此OMD来组织自己的程序数据结构。
在上一篇文章中,大致描述了MapX的帮助文档以及MapX的体系结构。那么,接下来,我们开始VC6.0 + MapX之旅。
一、准备工作
开发前,需要安装Visual Studio 6和MapX,以及搭建测试环境。
测试环境并不是指程序员进行开发的计算机软件环境,这种环境只能进行单元测试,最理想的测试环境应该是尽可能的模仿用户使用环境。什么是用户环境?有一点可以肯定,用户环境不会安装Visual Studio 6。
如果没有条件购置第二台电脑搭建测试环境,可以使用虚拟机(比如VMWare等)工具在本机安装双系统,甚至是多系统。
二、在VC6工程中创建MapX Control
在MapX的帮助文档《MapX在线帮助》中,已经很详尽的描述创建的方法。具体位置:
1、“开始”=〉“程序”=〉“MapInfo MapX 4.0”可以打开《MapX在线帮助》。
2、“The MapX User Guide”=〉“Working With Visual C++”=〉“Create a MapX Control Using C++”。
OK。按照上面的操作,您就已经开始了丰富多彩的MapX开发之旅。
不过,需要注意两点。
1、如何将MAPX.H/MAPX.CPP添加进VC6工程?很简单,从例程中找到这两个文件,然后复制到自己的工程目录就可以。而不要使用VC6中安装组建和控件的方法添加(菜单:“project”=>“Add To Project”=>“Components and Controls”)。
2、按照默认的方法创建的工程在编译运行后,会自动打开一个gst地图。如果想让程序运行时不显示任何地图数据,需要将gst清空,方法如下:
int CMapxSampleView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
//创建mapx控件
CRect rc(0,0,100,100);
if( !m_ctrlMapX.Create(NULL, WS_VISIBLE, rc, this, IDC_MAP) )
return -1;
//清空 gst 地图
m_ctrlMapX.SetGeoSet("");
return 0;