MapServer6.4.1教程学习--缩放和漫游控件(2-1)

来源:互联网 发布:登录淘宝网电脑版 编辑:程序博客网 时间:2024/06/03 08:58

(http://demo.mapserver.org/cgi-bin/mapserv?map=/osgeo/mapserver/tutorial/htdocs/example2.map&layer=states&zoom=0&mode=browse&root=/tutorial&program=/cgi-bin/mapserv&map_web=template+example2-1.html)

让我们看看mapfile:

#The annotated map file (sort of)

#Created by Pericles S. Nacionales for the MapServer tutorial

#20050623

#

#Map files begin with map keyword to signify the start of the map object.

#Well, the entire map file is THE map object. Enclose between MAP and END

#at the very bottom of this map file, are keyword/value pairs and other

#objects.

MAP

  NAME          EX2_

  IMAGETYPE     png24

  EXTENT        166221 -371954 1505849 632767 # LAEA

  #EXTENT         -97.5 41.619778 -82.122902 49.38562 #Geographic

  SIZE          400 300

  SHAPEPATH     "../data"

  SYMBOLSET     "../symbols/symbols35.sym"

  FONTSET       "../fonts/fonts.list"

 

  # When changing any of the mapfile parametersvia the web interface, you

  # need to define a TEMPLATEPATTERN.  This is required for security reasons.

  # Since the example filenames in section 2begin with "example2" (as in

  # example2-1.html or example2-2.html), youcan use it as the pattern. 

  # The template pattern is a regularexpression used by MapServer to match the

  # value of map_web_template variable against.

  TEMPLATEPATTERN 'example2*'

 

 

  # The web object is defined at the levelbelow the map object.  All

  # web-related parameters (I interchange"parameters" and "keyword/value

  # pairs" quite frequently, sorry aboutthat) are defined in this object.

  WEB

    TEMPLATE 'to be replaced by map_web_template variable in section2.html'

    IMAGEPATH'/osgeo/mapserver/fgs/tmp/ms_tmp/'

    IMAGEURL '/ms_tmp/'

  END # Every object in MapServer must have anEND.;)

 

 

  # The projection object is typically usedwithin the map and the layer

  # objects. You only define it once within themap object and this definition

  # becomes your output projection--MapServerwill render your maps in this

  # projection. You also use the projection object within the layer object to

  # define your input projection.  Your layers can be in different

  # projections--MapServer will reproject theminto your output projection.

  # If no projection is defined within thelayer object, MapServer assumes

  # your input projection is the same as youroutput projection.  This is not

  # a required object unless you're creating amap file that supports one of

  # the OGC interoperability web services specifications(WMS/WFS/WCS).

  PROJECTION

    # Projection parameters can be defined intwo ways...

    # This is the traditional Proj.4 definitionof Lambert Azimuthal Equal-Area

    # projection for the Continental U.S.

    # "proj=laea"

    # "ellps=clrk66"

    # "lat_0=45"

    # "lon_0=-100"

    #

    # Alternatively, you can specify an EPSGcode.

    # This is the EPSG code for LambertAzimuthal Equal-Area

    # projection for the U.S.

    "init=epsg:2163"

  END # This is the ending of the output projection

 

  #

  # Start of legend

  #

  LEGEND

    KEYSIZE 12 12

    LABEL

      TYPE BITMAP

      SIZE MEDIUM

      COLOR 0 0 89

    END

    STATUS ON

  END

 

  # The reference object is used to define areference map for your mapping

  # application.  This typically involves defining a smallimage that covers

  # the entire area of the map and defining abox that represents the current

  # view on in relation to the entire area.

  REFERENCE

    IMAGE '../images/ugl_ref1.png' # Thereference image

    SIZE 155 105 # The size of the referenceimage in pixels

    EXTENT 201621.496941 -294488.2853331425518.020722 498254.511514 # The extent of the reference image in map units

    STATUS ON

    MINBOXSIZE 10 # How small can the referencebox be before it gets drawn as a point, in pixels

    MAXBOXSIZE 150 # The maximum size of thereference box, in pixels

    COLOR -1 -1 -1 # The reference box fillcolor, negative numbers mean transparent

    OUTLINECOLOR 128 0 0 # The reference boxoutline color

    MARKERSIZE 8 # The size of the point marker

    MARKER 'star' # The marker symbol

  END

 

  # A scalebar object is defined one levelbelow the map object.  This object

  # controls how a scalebar is drawn byMapServer.  Scalebars can be embedded

  # in the map itself or can be created as aseparate image.  It has an

  # associated MapServer CGI variable called"scalebar" (or [scalebar] when

  # used in the HTML template).

  SCALEBAR

    IMAGECOLOR 255 255 255

    LABEL

      COLOR 0 0 0

      SIZE TINY

    END

    STYLE 1

    SIZE 100 2

    COLOR 0 0 0

    UNITS MILES

    INTERVALS 2

    TRANSPARENT FALSE

    STATUS ON

  END # Scalebar object ends

 

 

  # Layer objects, too, are defined beneath themap object.  Be mindful of the

  # order of your layer objects.  MapServer "stacks them" in reverse

  # order--that is, the last layer you define(at the bottom of the map file)

  # will be drawn on top and the first layeryou define (right after this

  # comment), will be drawn at the bottom.  Here's my rule: rasters and

  # polygons are defined first, followed by theline layers. The point and

  # annotation layers are defined last.  You can play around with the ordering

  # of your layers until you're satisfied.

 

  # Start of LAYER DEFINITIONS ---------------------------------------------

  LAYER # States polygon layer begins here

    NAME        states

    DATA        states_ugl

    STATUS      DEFAULT

    TYPE        POLYGON

    REQUIRES    "![modis] OR ![modis_jpl]"

 

    # Here's an example of the input projectiondefinition.

    # EPSG:4326 is code for geographic(latlong) projection

    # using the WGS84 datum

    PROJECTION

      "init=epsg:4326"

    END

 

    CLASSITEM   "CLASS"

   

    # The class object is defined within thelayer object.  You can define as

    # many classes as you need (well, there arelimits, but it's senseless to

    # define more than ten on a"normal" layer.  There aresituations,

    # however, where you might have to do it.)

    CLASS

      EXPRESSION 'land'

     

      #There are styles in a class, just like there are classes in a layer,

      # just like there are layers in a map.

      STYLE

        SYMBOL     0

        COLOR      232 232 232

      END # And they all must come to an end.

    END # End of this class.

  END # States polygon layer ends here

 

  LAYER # MODIS raster layer begins here

    NAME        modis

    DATA        "raster/mod09a12003161_ugl_ll_idxa.tif"

    STATUS      OFF

    TYPE        RASTER

    OFFSITE     70 74 66 #167 151 152

 

    PROJECTION

      "init=epsg:4326"

    END

  END # MODIS raster layer ends here

 

  LAYER # MODIS WMS map from JPL (or from USGS)

    NAME        modis_jpl

    TYPE        RASTER

    OFFSITE     0 0 0

    STATUS      OFF

    CONNECTIONTYPE     WMS

    CONNECTION"http://wms.jpl.nasa.gov/wms.cgi?"

 

    METADATA

      "wms_srs" "EPSG:4326"

      "wms_name""daily_terra" #"global_mosaic" "daily_aqua"

      "wms_server_version""1.1.1"

      "wms_format""image/jpeg"

    END

 

    PROJECTION

      "init=epsg:4326"

    END

  END # MODIS WMS image ends here

 

  LAYER # Hydrography layer begins here

    NAME hydro

    TYPE POLYGON

    STATUS OFF

    DATA hydrop_ugl

 

    PROJECTION

      "init=epsg:4326"

    END

 

    CLASSITEM 'FEATURE'

    CLASS

      NAME 'Lakes'

     EXPRESSION /(^B|^C|^L|^R)./

      STYLE

        COLOR 72 64 254

      END

    END # CLASS

    CLASS

      NAME 'Rivers'

      EXPRESSION 'Stream'

      STYLE

        COLOR 136 128 255

      END

    END # CLASS

    CLASS

      NAME 'Wetlands'

      EXPRESSION 'Swamp or Marsh'

      STYLE

        COLOR 195 252 255

        OUTLINECOLOR 195 252 255

        SYMBOL 'circle'

        SIZE 0

      END

    END # CLASS

  END  #LAYER

 

  LAYER # ROADS LAYER

    NAME cty_roads

    GROUP roads

    TYPE LINE

    STATUS OFF

    DATA roads_ugl

    MAXSCALE 750000

 

    PROJECTION

      "init=epsg:4326"

    END

 

    CLASSITEM 'CLASS1'

    CLASS

      NAME 'Minor Arterial Roads'

      EXPRESSION '3'

      STYLE

        COLOR 165 165 165

      END

    END # CLASS

    CLASS

      EXPRESSION '4'

      STYLE

        COLOR 210 210 210

      END

    END # CLASS

  END  #ROADS LAYER

 

  LAYER # state highways begin here

    NAME state_hwy

    GROUP roads

    MAXSCALE 1500000

    STATUS OFF

    DATA roads_ugl

    TYPE LINE

    FILTERITEM 'CLASS1'

    FILTER '2'

 

    CLASS

      NAME 'Principal Arterial Roads'

      STYLE

        COLOR 255 0 0

        SIZE 1

        SYMBOL 'circle'

      END

    END

 

    PROJECTION

      "init=epsg:4326"

    END

  END # highways

 

  LAYER # interstate highways begin here

    NAME interstate

    GROUP roads

#    MAXSCALE 22500000

    STATUS OFF

    DATA roads_ugl

    TYPE LINE

    FILTERITEM 'CLASS1'

    FILTER '1'

 

    CLASS

      NAME "Interstate Hwy."

      STYLE

        COLOR 128 0 0

      END

    END

 

    PROJECTION

      "init=epsg:4326"

    END

  END # highways

 

  LAYER # States line layer begins here

    NAME        states

    DATA        states_ugl

    STATUS      OFF

    TYPE        LINE

 

    PROJECTION

      "init=epsg:4326"

    END

 

    CLASSITEM   "CLASS"

    CLASS

      NAME      'State Boundary'

      EXPRESSION 'land'

      STYLE

        SYMBOL     'line5'

        COLOR      32 32 32

        SIZE       1

      END

    END

  END # States line layer ends here

 

  LAYER

    NAME roads_anno

    GROUP roads

    MAXSCALE 750000

    STATUS OFF

    DATA roads_ugl

    TYPE ANNOTATION

    LABELITEM "SIGN"

    CLASSITEM "CLASS1"

    CLASS

      EXPRESSION "3"

      STYLE

        COLOR 0 0 0 # dummy color

        SYMBOL '../symbols/sthwy.png'

      END

      LABEL

        MINFEATURESIZE 50

        MINDISTANCE 150

        POSITION CC

        SIZE TINY

        COLOR 0 0 0

      END

    END

    CLASS

      EXPRESSION "2"

      STYLE

        COLOR 0 0 0 # dummy color

        SYMBOL '../symbols/ushwy.png'

      END

      LABEL

        MINFEATURESIZE 50

        MINDISTANCE 150

        POSITION CC

        SIZE TINY

        COLOR 0 0 0

      END

    END

 

    PROJECTION

      "init=epsg:4326"

    END

  END # highway annotation

 

  LAYER

    NAME roads_anno1

    GROUP roads

    STATUS OFF

    DATA roads_ugl

    TYPE ANNOTATION

    LABELITEM "SIGN"

    CLASSITEM "CLASS1"

    CLASS

      EXPRESSION "1"

      STYLE

        COLOR 0 0 0 # dummy color

        SYMBOL '../symbols/interstate.png'

      END

      LABEL

        MINFEATURESIZE 20

        MINDISTANCE 150

        POSITION CC

        SIZE TINY

        COLOR 255 255 255

      END

    END

 

    PROJECTION

      "init=epsg:4326"

    END

  END

 

  LAYER # States label layer begins here

    NAME        states

    DATA        states_ugl

    STATUS      OFF

    TYPE        ANNOTATION

 

    PROJECTION

      "init=epsg:4326"

    END

 

    CLASSITEM   "CLASS"

    LABELITEM   "STATE"

    CLASS

      EXPRESSION 'land'

      STYLE

        COLOR      -1 -1 -1

      END

      LABEL

        COLOR 132 31 31

        OUTLINECOLOR 128 128 128

        SHADOWCOLOR 218 218 218

        SHADOWSIZE 1 1

        TYPE TRUETYPE

        FONT arial-bold

        SIZE 12

        ANTIALIAS TRUE

        POSITION CL

        PARTIALS FALSE

       MINDISTANCE 200

        BUFFER 4

      END # end of label

    END # end of class

  END # States label layer ends here

  # End of LAYER DEFINITIONS-------------------------------

 

END# end of map file

在第一节中的地图中,初始化时是把mapfile路径和其他参数("map=/ms4w/apps/tutorial/htdocs/example2-1.map&mode=browse")传递给MapServ("/cgi-bin/mapserv.exe?”)来调用的。这里第二节的页面中有一个超链接,如下所示:

<ahref="/cgi-bin/mapserv.exe?

           map=/ms4w/apps/tutorial/htdocs/example2-1.map

           &mode=browse&root=/tutorial&program=/cgi-bin/mapserv

           &map_web=template+example2-1.html">

      Proceed to Example 2.1</a>

这次我们使用”browse”模式而不是“map”模式。“Browse”模式告诉MapServ需要在我们的”/tmp/”目录下创建一个地图(图像)。图像的路径和名称是通过”img”被MapServ引用的。所以,当MapServ解析HTML模板时,它会用图像的正确路径 /ms_tmp/EX2_14222790837483.png替换掉”[img]”标记。

         对于这幅地图你可以做一些操作。首先,当你在图像上的任何部分单击时,地图会以你单击位置为中心刷新。这就是漫游。当你单击”Map Control”下拉框时,你可以选择放大(”Zoom in”)或者缩小(”zoom out”)。如果你设置放大两倍(“zoom in 2x”),然后单击地图的任何部位,地图会以你单击处为中心放大刷新。当你选择zoom out时,情况恰好相反。当选择了”zoom  in”或者”zoom out”,点击“Refresh”按键后,先前的地图就会放大或缩小。你可以使用刷新按钮在任何时候去刷新地图。

         缩放/漫游控件使用的是MapServerCGI内部变量。这个例子展示了如何使用”zoom”变量。Zoom的值决定了要缩放的比例。如何值为“0”,MapServer就是用户鼠标单击位置为中心刷新地图。如果值大于“0”,CGI程序就放大地图(用地图当前比例乘以缩放值)。如果值是一个负数,CGI程序会缩小地图(用地图当前比例除以缩放值)。其他可以用于控制缩放和漫游的参数有“zoomdir”和“zoomsize”。这两个变量和“zoom”起的作用很相似—“zoomdir”控制缩放方向,“zoomsize”控制缩放比例。请参照 OSGeo Gallery 或MapServerwiki 上的其他关于缩放/漫游的例子。

         试着将“Map Mode”从“Browse”改为“Map”。当你点击刷新时发生了什么?请记住当我们使用“mode=map”时,Mapserver返回的是一幅静态地图…它会忽略HTML模板而将地图图片直接传给浏览器。

         尽管这里添加了更多的数据层,但是它和第一节里面的mapfile仍旧很像。关于这个mapfile文件我没有新的东西需要解释,但是如果你对一些新的关键字好奇的话,请参考mapfile reference page。

         现在让我们看一看HTML模板文件。注意到一个HTML 表单调用了MapServer CGI程序这点很重要。因为它是一个表单,你可以用单选按钮和复选框以及下拉框去实现你的接口。不要觉得这个例子很有限—其实这是一个很好的创意。:)想获得更多信息请查看HTMLtemplate reference page。

 

 

PS:中文版权为asswclw所有,请尊重劳动成果,转载将注明出处。
0 0