使用c#开发mapserver之layerObj

 layerObj就是mapserver中的图层对象,该对象在mapscript中重要程度仅次于mapObj。学过GIS的人都会了解,组成一个地图最重要的东西是什么,当然是图层了!


layerObj的创建有两种方法,一种是从mapObj对象中获取,是由mapfile中配置的Layer标签中的内容组成,在mapserver打开mapfile时自动生成的。还有一种方法就是创建一个新的layerObj对象。我们可以在程序中通过操作layerObj来动态的增删修改mapObj中的图层。


Ø         mapObj中获取


layerObj pLayer = m_pMap.getLayer(0);

该方法可以获取mapObj中已有的图层,可以对已有图层进行修改。


Ø         创建新图层


该方法可以为mapObj创建一个新的图层,如下:

layerObj pNewLayer = new layerObj(pMap);


pMap是一个mapObj对象,如果参数pMap不为空,就默认给该mapObj对象增加了一个新图层,也就是说新创建的图层属于该pMap对象,如果参数pMap为空,那么就创建一个独立存在的layerObj,当然layerObj独立存在也没什么意义,必须要将其添加到mapObj中才能使用,可以通过如下方法将独立图层加入mapObj:


layerObj pNewLayer = new layerObj(null);

m_pMap.insertLayer(pNewLayer, 0);


参数一pNewlayer就是我们新创建的独立图层,0的意思是我们要将图层插入到mapObj中的index位置。

对于新创建的layerObj还需要设置一些参数才可以在mapserver中使用。layerObj有着丰富的方法和属性,具体可以参考以下mapfile的说明文档,其中layer部分有详细的介绍。大多数的参数在创建layerObj的时候都会有默认值。有几个参数是必需要设置的,否则就无法正常的显示数据,如下:


Ø         Connectiontype


首先要告诉Mapserver你添加的这个图层使用的是什么数据源,也可以理解为输入的数据格式,mapserver目前支持多种的数据源,在MS_CONNECTION_TYPE枚举变量中列举了目前支持的所有格式,但一数据源具体能不能使用还要取决于编译mapserver时是否包含了该格式。

pLayer.connectiontype = MS_CONNECTION_TYPE.MS_SHAPEFILE;

可以以下枚举值中任选其一。

public enum MS_CONNECTION_TYPE

    {

        MS_INLINE = 0,

        MS_SHAPEFILE = 1,

        MS_TILED_SHAPEFILE = 2,

        MS_SDE = 3,

        MS_OGR = 4,

        MS_UNUSED_1 = 5,

        MS_POSTGIS = 6,

        MS_WMS = 7,

        MS_ORACLESPATIAL = 8,

        MS_WFS = 9,

        MS_GRATICULE = 10,

        MS_MYGIS = 11,

        MS_RASTER = 12,

        MS_PLUGIN = 13,

}


Ø         Data


数据的路径信息,对于不同的数据有着不同的格式;

如果是shapefile数据,可以直接输入一个数据路径就可以,如:pLayer.data = @D:/gmap-ms46/data/ province.shp;或者是结合SHAPEPATH中设置的路径,直接设置写一个数据名就可以:pLayer.data = province


Ø         CONNECTION


该参数主要用于数据库数据的读取,例如:对于postgis数据源,不是在data参数可以简单的设置一个数据名字就可以使用的,还需要设置connection参数来指明数据库的位置。

CONNECTION "user=%uid% password=%passwd% dbname=postgis"


Ø         Type


该参数是设置数据的格式,如点、线、面等。Mapserver不会自动识别你添加的数据格式,需要我们手工设置才可以。

我们怎么知道数据的格式呢?这个可以通过其它gis软件来获取,比如arcgis什么的,也可以通过第三方库来获取,我是使用Ogr来获取数据的信息,然后将其赋值给layerObj

目前支持如下的格式:

public enum MS_LAYER_TYPE

    {

        MS_LAYER_POINT = 0,

        MS_LAYER_LINE = 1,

        MS_LAYER_POLYGON = 2,

        MS_LAYER_RASTER = 3,

        MS_LAYER_ANNOTATION = 4,

        MS_LAYER_QUERY = 5,

        MS_LAYER_CIRCLE = 6,

        MS_LAYER_TILEINDEX = 7,

        MS_LAYER_CHART = 8,

}

Mapserver对数据格式的限制不是太严格,例如一个面层你可以设置将其显示为一个线层或点层。文档中有部分介绍具体可以查阅。

mapObj添加一个新图层的代码如下(shapefile为例)

layerObj pLayer = new layerObj(m_pMap);

pLayer.status = 1;           

pLayer.name = yourlayername;

pLayer.group = yourgroupname;

pLayer.connectiontype = MS_CONNECTION_TYPE.MS_SHAPEFILE;

pLayer.data = @D:/gmap-ms46/data/ province.shp;

pLayer.type = MS_LAYER_TYPE.MS_LAYER_POLYGON;

 

以上这些只是最基本的设置,当然还可以做一些更复杂的设计,如给图层配置符号、设计可见比例尺等。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值