这种方式槛太高,首先需要了解mapfile文件的结构,需要熟读Mapfile宝典《Mapfile
Reference》,搞清楚每个参数的详细含义,一般人没有个把星期是搞不懂的。
二、其它软件输出:
目前部分开源软件支持输出MapServer格式的文件,像QGIS
,MapWinGIS等,ArcGIS也有相关的插件可以输出mapfile,但它们输出的文件往往会丢失很多信息,像符号等很容易丢失,而且容易出错,在MapServer中无法直接使用,还需要打开做进一步修改,也就是说还需要了解Mapfile的文档结构。
我一直在想为什么MapServer就没有配置工具呢?其实,关于MapServer的工程文件配置界面,已经有其他人做过相关的开发,有几个这方面的开源项目,都是BS架构开发的,个人感觉比较好的是maplab,做的比较深入,功能也相对比较丰富,但不知道什么原因,这些项目到目前为止都停止开发了,maplab最后的版本可能是maplab-<?xml:namespace
prefix = st1
/>,比较老了,已经不支持现在的MapServer5,,可能是维护起来比较困难,大家都放弃开发了。
工作中我们也有这方面的需求,开发一个mapfile生成工具,这个光荣的任务是由我来承担的,由于我以前是做组件开发的,相对来说更熟悉CS架构,并不打算用BS的方式来开发。MapServer可以生成的C#类库,本来想用它在C#中直接做用户界面,但不知道什么原因,在ASP.NET项目中用C#调用这些类库是没有问题的,但在Windows应用程序项目中便问题多多(难道是封装出来的类库只能再BS架构中用?)。时间紧迫没精力去研究太深,后来我索性用自己最擅长的技术了,管他麻不麻烦,先实现了再说。具体实现就是将MapServer的C类库重新封装成了一系列COM接口,然后再在C#中调用自己封装的接口来做界面,很快地便实现了一个小工具。有人可能会问,为什么不直接用VC做界面,没什么原因,就是我不喜欢,太麻烦,C#开发界面多方便,呵呵。
总体来说我对这个小工具还是很满意的,功能也不多,就像是一个小型的GIS软件,由地图显示、图层列表、工具条和菜单几个部分组成,可以直接打开MapServer的mapfile文件并显示,如果打开map文件出错可以显示详细的错误信息,也可以新建一个mapfile文件,直接向mapfile中添加图层,对其配置符号,设置标注,可见比例尺等。对打开的mapfile文件可以进行缩放等各种浏览 *** 作,mapfile的各种属性配置基本都可以修改并实时的体现在工具的显示界面中,修改到自己满意了之后,可以将mapfile文件输出,直接在MapServer中调用。
甚至可以加上属性查询、空间量算等功能,所有MapServer能实现的功能都可以做到这个小工具中,当然这些都是后话了,工作中不需要这些所以也就没有实现。
完成之后,发现这就是一个小型的桌面GIS系统,虽然开始开发的时候感觉这么做走了弯路,现在想想这也是一条可取之路,开源软件的更新频率很高,如果MapServer的底层库函数发生了变化,也只需要将它的C类库重新编译一次就可以继续使用了,即使MapServer扩展了功能模块,我们也只需要再增加相关的接口便可以。维护起来相对比较简单,软件的持续更新也就有了保障。
根据你的描述,我的理解是你希望将两个不同的地图项目中的子图替换成相同的子图。具体的 *** 作步骤如下:1. 打开第一个地图项目,选择需要替换的子图,在菜单栏中单击“图层”选项卡,然后选中所选子图所在的图层,将其导出为一个矢量图层文件,比如shapefile格式。
2. 打开第二个地图项目,在菜单栏中单击“图层”选项卡,“添加矢量图层”命令,将第一步中导出的矢量图层文件加载到地图项目中。
3. 选中需要被替换的子图,然后在菜单栏中单击“编辑”选项卡,再单击“切换到编辑模式”命令,然后使用“选择”命令选择被替换的子图,最后在菜单栏中单击“剪切”命令将其删除。
4. 然后在菜单栏中单击“插入”选项卡,单击“地图”命令,将所需的子图插入到地图中即可完成替换。
根据你的具体情况可能需要进行适当的调整,但以上步骤可以作为参考。注意在 *** 作过程中进行备份,以防误 *** 作造成不良影响。
你只是把image打开了,你都没有添加到地图上去,他怎么显示呢?MapWinGIS.Image image = new MapWinGIS.Image()
int LyrHandl =-1
string fileName = @"D:\thunder.png"
if(!File.Exist(fileName ))
retun
//将image添加到map中去
if(image.Open(fileName, MapWinGIS.ImageType.PNG_FILE, false, null))
LyrHandl =axMap1.AddLayer(image,true)
// 刷新
axMap1.redraw()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)