zoukankan      html  css  js  c++  java
  • MapServer使用笔记(一)

    转自:http://blog.csdn.net/iwillsw/article/details/6037163

    连接Oracle Spatial

    前面的测试中我们使用shape文件作为地图数据源,下面我们将从Oracle Spatial空间数据库读取地理数据。


    mapserver提供两种方式连接oracle空间数据库,native oracle spatial和ogr。安装包提供了支持native oracle spatial的二进制文件,ogr方式需要自行编译源代码。

    借用以往项目的Oracle 10.2.0.3数据库,MapServer采用ms4w_2.3.1编译包,地图服务器安装Oracle10.2客户端,进行本地网络配置,测试连接正常。

    关闭Apache MS4W Web Server服务,进入/ms4w/Apache/cgi-bin/ignored-libmap/oracle11g目录,将libmap.dll复制粘贴到/ms4w/Apache/cgi-bin目录,替换原有文件,启动Apache MS4W Web Server服务。

    新建一个Mapfile文件,LAYER部分如下
    LAYER
        NAME "road"
        TYPE LINE
        CONNECTION "geouser/123456@geodb" #数据库连接字符串
        CONNECTIONTYPE oraclespatial      #连接类型为oracle spatial
        DATA "GEOLOC FROM NAV_ROAD1 USING SRID 4326"  #此处GEOLOC为GEOMETRY字段名,NAV_ROAD1为表名
        PROJECTION
           "init=epsg:4326" #必须指定SRS编码
        END
        DUMP TRUE
        CLASS
            STYLE
                COLOR 0 128 128
            END
        END
    END

    DATA标签使用如下格式
    "[geom_column]
    FROM
    [table]| [(SELECT [...]
    FROM [table]|[Spatial Operator]
    [WHERE condition] )]
    [USING [UNIQUE column]| [SRID #srid]| [FUNCTION]| [VERSION #version]
    ]"

    注意:不要在FROM之前加入属性字段名,属性字段可添加在FROM后的子查询中,如下所示
    GEOLOC FROM (SELECT MI_PRINX AS OID, NAME AS ONAME, COLOR AS COLOR, GEOLOC AS GEOLOC FROM NAV_ROAD1) USING SRID 4326
    LABEL或STYLE用到的属性字段必须包含在SELECT子查询中。
    修改openlayers客户端代码
    var ms_layer = new OpenLayers.Layer.WMS(
    "Test Map",
    "/cgi-bin/mapserv.exe",

                    {   
                        layers: 'road',
                        map: 'I:/cn_data/c2.map',
                        format: 'png'
                    },
                    {
                        reproject: false,
                        'numZoomLevels': 20,
                        gutter: 15,
                        buffer: 0
                    }
                );

    打开浏览器,查看效果。

    为图层添加标注(Label)


    在地图上标注文字,必然涉及到字体,MapServer采用与操作系统无关的设计,不能自动获知当前操作系统下安装了哪些字体,必须手工创建字体集FONTSET文件。
    该文件的格式非常简单,每行配置一个字体,左边是字体名(可自由命名),右边是字体文件的路径(请使用绝对路径),如下所示:
    arial   C:/WINDOWS/Fonts/arial.ttf
    sans    C:/WINDOWS/Fonts/SIMSUN.TTC
    将以上内容保存为文本文件,文件名和扩展名不限,例如保存为fonts.txt

    在Mapfile的Map标签下添加一行
    FONTSET fonts.txt #指明字体集文件,可以包含路径

    在Mapfile的Layer标签中添加一行
    LABELITEM "NAME"  #指明标注所用的字段名

    在Layer下的CLASS标签中添加以下内容
    LABEL
        COLOR  0 0 0
        OUTLINECOLOR 255 255 255
        FONT "sans"  #此处sans对应宋体SIMSUN.TTC
        TYPE truetype
        SIZE 6
        POSITION AUTO
        PARTIALS FALSE
        ENCODING GBK #此处为文字编码,如果不设置该值,中文将不能正确显示。对于中文Windows系统,操作系统的默认编码为GBK。
    END

    注意:ms4w_3.0beta11属于开发版本,支持shape文件数据源配置label标签,不支持oracle spatial数据源配置label标签。
    为了读取oracle空间表中的属性生成标签,我们换用ms4w_2.3.1正式版,系统工作正常。

    使用动态样式(STYLE)

    实际应用中对地图的渲染有很多要求,MapServer支持动态设置STYLE,修改Mapfile文件LAYER的STYLE,例如:
    STYLE
        COLOR [COLOR] #COLOR必须使用[r] [g] [b]十进制格式,MapServer不能识别Web开发中常用的RGB十六进制格式
    END
    每条道路的颜色由道路表的属性字段COLOR决定,与之类似,可以从数据库取值填充SYMBOL,SIZE,ANGLE等标签。

  • 相关阅读:
    我和小美的撸码日记(3)之一句话搞定MVC表单页数据绑定与提交
    我和小美的撸码日记--基于MVC+Jqgrid的.Net快速开发框架
    我和小美的撸码日记(2)之第一个基于MVC+Jqgrid的列表页面
    我和小美的撸码日记(1)之软件也需靠脸吃饭,带您做张明星脸(附后台经典框架 DEMO 下载)
    Mysql 下DELETE操作表别名问题
    DynaActionForm(动态ActionForm)的使用
    structs中通过LabelValueBean构建下拉列表
    JavaScript中==和===区别
    JAVA包装类的缓存范围
    JAVA循环迭代中删除或添加集合数据报java.util.ConcurrentModificationException错误
  • 原文地址:https://www.cnblogs.com/LCGIS/p/3110193.html
Copyright © 2011-2022 走看看