这种方式槛太高,首先需要了解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扩展了功能模块,我们也只需要再增加相关的接口便可以。维护磨销唯起来相对比较简单,软件的持续更新也就有了保障。
这个问题我也出现过,灶凯是字符集问题。陆辩逗你试下将早卖encoding "GBK18030"换为
encoding "gb2312"
或
encoding "UTF-8"
试下,我当时解决了这个问题哦,时间有点长,记的不是很清楚了。
import 'ol/ol.css'
import {Map, View, Feature}from 'ol'
import VectorLayerfrom "ol/layer/Vector"
import VectorSourcefrom "ol/source/Vector"
import TileLayerfrom "ol/layer/Tile"
import TileWMSfrom 'ol/source/TileWMS'
import XYZfrom "ol/source/XYZ"
import Proj, {transform}from 'ol/proj'
import *as controlfrom 'ol/control'辩高
import *as coordinatefrom 'ol/coordinate'
import {Modify, Snap}from 'ol/interaction'
import {Style, Stroke, Fill, Circleas StyleCircle}from "ol/style"
import {LineString, Polygon, MultiPolygon, Geometry, Point, LinearRing, Circle}from "ol/geom"
import {fromCircle as fromCirclePolygon, circular as circularPolygon}from 'ol/geom/Polygon'
import {Vectoras FeatureVector}from "ol/Feature"
import Tilefrom 'ol/layer/哗灶乱Tile'
import OSMfrom 'ol/source/OSM'
import {regionData}from 'element-china-area-data'
import Draw, {createBox, createRegularPolygon}from "ol/interaction/Draw"
一、加载在线地图
initMap() {
let raster =new Tile({
source:new OSM()
})
let vector =new VectorLayer({
source:this.source,
})
this.map =new Map({
layers: [raster, vector],
target:'olMap',
controls: control.defaults().extend([
new control.MousePosition({
coordinateFormat: coordinate.createStringXY(4),
projection:'EPSG:4326',
target:this.$refs.mousePositionTxt
})
]),
view:new View({
projection:'EPSG:4326',
center: [114.064839, 22.548857],
zoom:5,
}),
})
/*let circle4326 = circularPolygon([114.064839, 22.548857], 100000, 5000)
this.source.addFeature(new Feature(circle4326))*/
},
二,加载mapserver底乱档图
initMap() {
let mapfile =this.global.MAP_PATH +this.global.BASEMAP_NAME
let url =this.global.MAPSERVER_PATH
let wmsParam = {
map: mapfile,
LAYERS:'ALL',
transparent:true
}
let raster =new Tile({
source:new TileWMS({//切片WMS服务,多个标注
url: url,
params: wmsParam,
serverType:'mapserver', //服务器类型
isBaseLayer:true
})
})
this.map =new Map({
layers: [raster],
target:'olMap',
controls: control.defaults().extend([
new control.MousePosition({
coordinateFormat: coordinate.createStringXY(4),
projection:'EPSG:4326',
target:this.$refs.mousePositionTxt
})
]),
view:new View({
projection:'EPSG:4326',
center: [0, 0],
zoom:1,
extent:[ -180, -90, 180, 90]
}),
})
},
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)