通过MapServer的OGR矢量层

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

最后更新

2021-05-06

介绍

MAPServer包括使用ogr库以除shapefile以外的格式访问矢量数据集的能力。以下文档描述了在MapServer应用程序中实现OGR支持的过程。

本文档假定您已经熟悉MapServer的某些方面:

  • MapServer应用程序开发,尤其是设置 .map files .

  • 如果您没有准备好访问预编译安装的权限,并且需要使用OGR支持编译自己的mapserver副本,则需要一些编译技能。

  • 访问OGR实用程序,例如 ogrinfo (对于Windows用户,这些包含在 MS4W

读者还应查看 Vector Data Access Guide 其中有许多关于如何访问特定矢量格式的示例。

什么是OGR?

OGR简单特征库是一个C++开源库(和命令行工具),它提供对各种文件格式(包括ESRI形状文件)和MapInfo MID/MIF和TAB格式的读取(有时写入)访问。

ogr实际上是gdal库的一部分,因此您会注意到一些引用指向gdal(如邮件列表)。

OGR向MapServer添加了什么?

OGR简单功能库允许MapServer用户以其本机格式显示几种类型的矢量数据文件。例如,在对mapserver使用ogr支持时,不需要将mapinfo mid/mif和tab数据转换为esri shapefiles。

支持哪些数据格式?

备注

有关支持的矢量格式的最新列表,请参见https://gdal.org/drivers/vector/index.html。

以下是一些受支持的流行矢量格式的列表:

备注

上述一些格式(例如OGDI)具有外部依赖性,并不总是包含在支持OGR的MapServer的预编译二进制发行版中。

备注

上述一些格式本质上并不适合随机访问,MapInfo MIF/MID文件就是这种情况,它是一种文本格式,对于Web应用程序来说,性能会非常差。另一方面,某些二进制格式(如MapInfo TAB)更适合随机访问,其性能可与MapServer中的本机shapefile访问相媲美。

如何获得更多关于OGR项目的信息

  • 从GDAL 2.0开始,OGR现在与GDAL合并,主 GDAL site 是最好的资源。

  • OGR Simple Features项目的遗留页面可以在 Wayback Archives .

  • 这个 GDAL mailing list 可用于与OGR相关的问题。发送新问题之前,始终搜索列表存档。

  • 老年人 GDAL Wiki 为用户和开发人员提供了大量有用的信息。

  • irc.freenode.net上的gdal irc频道也可能有帮助。有关IRC的信息,请参阅 MapServer IRC page .

OGR库的主要开发人员目前甚至是Rouault(最初由Frank Warmerdam开发),并且将OGR集成到MapServer中是由Daniel Morissette完成的。

使用OGR支持获取和编译MapServer

  • 按照上的说明 GDAL page 编译/安装ogr/gdal。

  • 获取mapserver source .

对于UNIX用户,请参见 UNIX Compilation and Installation . 如果通常安装了GDAL/OGR,那么在(重新)构建mapserver之前,应该将-dwith_ogr=on添加到cmake行中。Linux用户可能想尝试 FGS ,一个用于MapServer的Linux安装程序。

对于Windows用户,建议在MapServer站点上查找预编译的二进制文件( MS4W 建议)。如果要编译自己的文件,请参见MapServer源中的readme.win32文件。

从MapServer 7.0开始,如果使用-dwith_point_z_m=on构建2.5d几何图形,当由OGR驱动程序和数据源处理时,MapServer可以将其考虑在内。

备注

WFS中2.5D几何图形的输出要求在层级别指定显式元数据项。见 WFS server 文档。

将OGR支持与MapServer应用程序集成

将OGR支持与MapServer应用程序集成所需的唯一更改是使用.map文件。层的数据参数扩展为三个参数(connectiontype ogr、connection和data)。

根据所使用的数据类型,此函数的语法不同 Vector Data Access Guide 是一个很好的资源)。在OGR中,数据源可以是一组共享公共基名的文件(例如,arcview shapefiles的.shp/.shx/.dbf,或mapinfo选项卡文件的.tab/.map/.dat/.ind/.id)或整个文件目录(例如,tiger)。

我们将前一个称为“基于文件的数据源”,后一个称为“基于目录的数据源”。当访问 file-based data source 指定集合中某个文件的文件名(例如roads.shp或roads.tab)以及访问 directory-based data source 您可以指定目录名,并且OGR将目录中的所有文件作为一个具有潜在多个层(例如,Tiger文件)的单一数据源读取。

一些OGR驱动程序(例如SHP、TAB)可以有双重行为,即如果它们指向一个文件,那么它们将表现为基于文件的数据源;如果它们指向一个目录,那么它们将表现为基于目录的数据源,然后目录中的每个文件都将成为数据源中的一个新层。

OGR formats page 有关您使用的特定文件格式的详细信息。(单击格式名称以获取该格式的更具体的驱动程序信息)

在 Mapfile 中使用OGR数据源

基于文件的源的.map文件层定义如下:

LAYER
  ...
  CONNECTIONTYPE OGR
  CONNECTION "<datasource_name>"
  DATA "<layer_definition>"
  ...
END

**<datasource_name>**是要读取的数据源的名称,并以connection关键字作为前缀。确切的组织取决于所使用的格式驱动程序。要使用的格式驱动程序由OGR根据作为数据源传递的字符串的性质和/或它引用的文件的格式自动选择。

  • 对于基于文件的数据源,这是文件的名称,包括扩展名、使用绝对路径或相对路径。首先相对于shapepath解释相对路径,如果找不到,则相对于.map文件位置重试。

    备注

    在4.1版之前,已忽略ogr数据源的shapepath。

  • 对于基于目录的数据源,如tiger/line或arc/info binary coverage,这是包含文件的目录的名称。如果路径是相对的,则解释为相对于.map文件。

  • 对于数据库系统和ogdi等虚拟数据源,这是服务连接字符串,通常与文件系统无关。例如,对于OracleSpace,这可能是“oci:warmerda/password@gdal800.velocet.ca”。

**<layer_definition>**是要从数据源使用的层的名称、编号或SQL定义。通过 Mapfile 中的数据关键字指示。

  • 层名称:(大小写插入)层名称可用于选择层。

  • 层号:可以使用层号(第一层从0开始)来选择一个层。一般来说,层名优先于此,因为它更自我描述。

  • 省略:如果没有提供数据关键字,这相当于选择层0。

  • SQL select:如果使用SQL select语句,它将以特定于驱动程序的方式解释,以尝试生成临时伪层。对于某些格式,SQL的受限子集在OGR中解释。对于基于RDBMS的驱动程序(如PostGIS和Oracle),这将传递到底层数据库。

ogrinfo实用程序可用于查找数据源中的层及其名称列表。

使用OGR的图层定义示例

请看 Vector Data Access Guide 有关支持的每个数据格式的详细信息和示例。

示例1。mapinfo选项卡文件

LAYER
  NAME "Builtup_Areas_tab"
  TYPE POLYGON
  CONNECTIONTYPE OGR
  CONNECTION "data/tab/092b06_builtup_a.tab"
  STATUS ON
  CLASS
    ...
  END
...
END

实施例2。MicroStation DGN文件使用

整个dgn文件在ogr中表示为一个层(请参见 DGN driver page 有关详细信息:

LAYER
  NAME "dgn"
  TYPE LINE
  CONNECTIONTYPE OGR
  CONNECTION "dgn/santabarbara02.dgn"
  DATA "0"
  STATUS ON
  STYLEITEM "AUTO"
  CLASS
    ...
  END
END # Layer

示例3。tiger/line file using<layeru name>

LAYER
  NAME "Roads_tig"
  TYPE line
  CONNECTIONTYPE OGR
  CONNECTION "full/path/to/tiger/TGR25001"
  DATA "CompleteChain"
  STATUS ON
  CLASS
    ...
  END
END

示例4。使用SQL联接的形状文件目录

LAYER
  NAME "Parks_cov"
  TYPE POLYGON
  CONNECTIONTYPE OGR
  CONNECTION "data/shppoly"
  DATA "SELECT eas_id, idl.Name FROM pol LEFT JOIN idl ON pol.eas_id = idl.eas_id"
  STATUS ON
  CLASSITEM "idlink.Name"
  CLASS
    ...
  END
END

示例5.使用ElasticSearch后端转发HTTP Header授权

LAYER
  NAME "elastic_search_layer"
  TYPE POLYGON
  CONNECTIONTYPE OGR
  CONNECTION "ES:"
  CONNECTIONOPTIONS
      "FORWARD_HTTP_HEADERS_FROM_ENV" "Authorization=HTTP_AUTHORIZATION"
  END
  DATA "my_layer"
END

如何使用“ogrinfo”

ogrinfo是GDAL/OGR分发的一部分(包含在 MS4W 对于Windows用户)。它是一个可执行文件,可用于获取有关OGR支持的文件的层信息。参数为:

ogrinfo

  • -ro以只读方式打开文件(可选)

  • -Q在安静模式下执行,只返回层IDEX行(可选)

  • datasource_name是包含扩展名(例如roads.tab)的文件名;对于tiger/line文件,datasource_name是包含tiger文件的目录(例如ogrinfo tgr25001)

示例5。要获取文件中的层列表,请执行以下操作:

$ ogrinfo  popplace.tab

Had to open data source read-only.
INFO: Open of `popplace.tab'
using driver `MapInfo File' successful.
1: popplace (Point)

显示poplace.tab文件中有一个点图层。

实施例6。要获取特定层的转储,包括字段名、投影等:

$ ogrinfo popplace.tab popplace

Had to open data source read-only.
INFO: Open of `popplace.tab'
using driver `MapInfo File' successful.

Layer name: popplace
Geometry: Point
Feature Count: 497
Layer SRS WKT: PROJCS["unnamed",GEOGCS["unnamed",DATUM["North ...snipped...
AREA: Real (15.3)
PERIMETER: Real (15.3)
POPPLACE_: Real (11.0)
POPPLACE_I: Real (15.0)
NAME: String (50.0)
OGRFeature(popplace):1
  AREA (Real) =           0.000
  PERIMETER (Real) =           0.000
  POPPLACE_ (Real) =           1
  POPPLACE_I (Real) =               1
  NAME (String) = Port Hope Simpson
  POINT (2437287.249 1153656.751)

OGRFeature(popplace):2
  AREA (Real) =           0.000
  PERIMETER (Real) =           0.000
  POPPLACE_ (Real) =           2
  POPPLACE_I (Real) =               1
  NAME (String) = Hopedale

...
...

实施例7。要获取Tiger/Line目录中的层列表,请执行以下操作:

$ ogrinfo TGR25001

Had to open data source read-only.
INFO: Open of `TGR25001'
using driver `TIGER' successful.
1: CompleteChain (Line String)
2: AltName (None)
3: FeatureIds (None)
4: ZipCodes (None)
5: Landmarks (Point)
6: AreaLandmarks (None)
7: KeyFeatures (None)
8: Polygon (None)
9: EntityNames (Point)
10: IDHistory (None)
11: PolyChainLink (None)
12: PIP (Point)
13: TLIDRange (None)
14: ZipPlus4 (None)

上面的示例显示在tgr25001目录中有14个层。

示例8。获取特定Tiger层的摘要,包括字段名、投影和范围

$ ogrinfo TGR25001 Landmarks -summary

Had to open data source read-only.
INFO: Open of `TGR25001'
using driver `TIGER' successful.

Layer name: Landmarks
Geometry: Point
Feature Count: 777
Extent: (-70.674324, 41.519817) - (-69.969211, 42.046868)
Layer SRS WKT: GEOGCS["NAD83",DATUM["North_American_Datum_1983",
SPHEROID["GRS 1980",6378137,298.257222101]],PRIMEM["Greenwich",0],
      UNIT["degree",0.0174532925199433]]
MODULE: String (8.0)
FILE: String (5.0)
STATE: Integer (2.0)
COUNTY: Integer (3.0)
LAND: Integer (10.0)
SOURCE: String (1.0)
CFCC: String (3.0)
LANAME: String (30.0)

通过OGR格式查询

可以用与MapServer中常规形状文件相同的方式查询OGR层。

带OGR的TileIndex

OGR层可以使用与基于形状文件的层类似的平铺索引。tile index关键字应包含tile索引文件的连接字符串。tile索引文件可以是任何受支持的ogr格式,包括shapefiles。

层定义中的tileitem关键字指示应将tile索引文件中的哪些属性用作数据源位置。如果省略,默认的tileitem值为“location”。“位置”字段中的值应该是一个连接字符串,与在OGR层的“连接”字段中使用的值相同。对于使用ogr连接类型且具有tileindex关键字的层,不需要(并且将被忽略)connection关键字。

tileindex文件可以在外部GIS中准备,也可以使用ogr实用程序ogrtindex。有关详细信息,请参见 OGR Utilities Page .

下面是一个使用图块索引的点图层的简单示例。

LAYER
  NAME "ogr_points"
  TYPE POINT
  CONNECTIONTYPE OGR
  TILEINDEX "PIP_ogr_tiles.shp,0"
  STATUS ON
  CLASS
    NAME "points"
    STYLE
      SYMBOL "default-circle"
      COLOR 255 0 0
      SIZE 6
    END
  END
END

ogr tileindex层应该支持所有正常的查询和属性获取机制,包括从mapscript获取。如果对tileindexed ogr层使用自动投影支持,则会读取投影的tileindex(而不是组件图块)。如果组件块具有不同的模式(不同的属性集),则可能会遇到(或可能不会遇到)问题。

从MapServer 7.2开始,通过将tilesrs关键字指定为ogrtindex的-src_srs_name选项的值(从gdal 2.2或更高版本开始),可以使用不同SRS中引用的tileindex。

连接池

对于某些受OGR支持的格式,连接到数据集在CPU使用和磁盘IO数量方面非常昂贵。例如,建立对S-57数据集的访问会导致对数据文件的完全读取。连接池控制的目的是减少相同文件用于多个不同映射层的情况下的开销。

要确保每个映射渲染只打开一次受OGR支持的数据集(而不是对引用该数据集的每个映射层单独打开),请使用“关闭连接处理”选项。默认值为“关闭连接”正常,但如果设置为“延迟”,则数据集将保持打开状态,直到映射渲染完成。它将被使用相同数据源的任何其他层重用。

示例9。两层保留S-57连接

在本例中,我们对两个层使用相同的数据集(no410810.000)。为了避免重新读取数据集,我们将第一层标记为延迟关闭连接到第二层。在第二个(或最后一个)层中,我们请求正常的连接处理(尽管这可能被忽略,因为正常的处理是默认的)。

LAYER
  NAME "AdminAreas"
  TYPE POLYGON
  CONNECTIONTYPE OGR
  CONNECTION "NO410810.000"
  DATA "ADMARE"
  PROCESSING "CLOSE_CONNECTION=DEFER"
  STATUS ON
  ...
END
LAYER
  NAME "Land Areas"
  TYPE POLYGON
  CONNECTIONTYPE OGR
  CONNECTION "NO410810.000"
  DATA "LNDARE"
  PROCESSING "CLOSE_CONNECTION=NORMAL"
  STATUS ON
  ...
END
  1. connection关键字的文本必须与要重用的连接的层完全匹配。

  2. 有些数据集连接的内存非常昂贵,保持它们的打开可能会导致内存使用增加。

  3. 如果为特定连接呈现的所有层延迟关闭连接,则它将保持打开状态,直到MapServer终止。对于普通的CGI或MAPScript,使用它可能是正常的。

  4. 这种对close_连接处理的使用对于OGR层来说是独一无二的,并且在将来的某个时候可能会作为mapserver中更广泛的连接池实现的一部分进行更改。

styleitem“auto”-使用来自ogr文件的样式信息呈现层

备注

目前只有MapInfo选项卡和MicroStation DGN文件支持此功能,但最终也可能通过OGR支持其他在形状级别具有颜色和样式的格式。*

在MapServer、ArcView和其他基于形状文件的应用程序中,颜色和样式通常在层级别定义。这意味着给定层中的所有形状通常使用相同的颜色和样式进行渲染。

另一方面,OGR支持的某些格式(如“地图信息”选项卡)确实在每个形状上附加了颜色和样式信息。ogr添加了对“styleitem”auto“层参数的支持,该参数允许您请求使用来自数据源的颜色和样式呈现层中的形状,而不是像传统上使用mapserver那样由类驱动。

如何实施

要使用来自OGR数据源的颜色和样式渲染层,必须执行以下操作:

  • 层定义必须包含样式项“auto”参数。

  • 如果类包含表达式,则层定义需要至少包含一个类(可能为空)和一个类项来匹配表达式。层中的空类将在运行时动态更新,以包含来自每个形状的数据源的颜色和样式。

实例

示例10。使用样式项“auto”而不使用类项的层定义

 LAYER
   NAME "test_dgn"
   STATUS ON
   TYPE POLYGON
   CONNECTIONTYPE OGR
   CONNECTION "../data/dgn/test.dgn"

   # This enables use of colors and styles from the source file.
   STYLEITEM "AUTO"

   # Define an empty class that will be filled at runtime from the
   # color and styles read on each shape in the source file.
   CLASS
   END
END  # layer

示例11。使用带有classitem的styleitem“auto”定义层

LAYER
 NAME "Builtup_Areas_tab"
 TYPE POLYGON
 CONNECTIONTYPE OGR
 CONNECTION "data/tab/092b06_builtup_a.tab"
 STATUS ON

 # This enables use of colors and styles from the source file.
 STYLEITEM "AUTO"

 # Define an empty class that will be filled at runtime from the
 # color and styles read on each shape in the source file.
 CLASSITEM "CATEGORY"
 CLASS
    EXPRESSION "1"
 END
END

请注意:

类表达式仍在工作,因此仍然可以查询和分类使用样式项“auto”的层。唯一的区别是,不使用静态类定义,而是从数据文件中读取颜色和样式。

重要音符

注释1

尽管mapinfo和其他ogr数据源可能支持混合几何类型的层(例如,同一文件中的点、线和多边形),但在mapserver中还不支持这一点。因此,您仍然需要定义层“类型”,并确保OGR数据源中的所有形状都与该层类型兼容,否则MapServer可能会在运行时产生有关不兼容几何类型的错误。

注释2

由于此功能的动态特性,它与labelcache不兼容,因此对于使用“styleitem”auto“的层,labelcache会自动禁用。

注释3

当使用StyleItem Auto时,MapServer尝试将OGR返回的符号名与符号文件中的名称匹配。有关快速解决方案,请尝试使用以下符号文件:

https://demo.mapserver.org/ogr-demos/yk_demo/etc/symbols_mapinfo.txt

OGR返回到MapServer的符号的名称取决于文件格式。对于mapinfo文件,它将是:

  • 对于“旧样式”符号(默认的mapinfo 3.0符号编号为32到67),符号名称将为“mapinfo sym-”,其中“”是符号编号,例如“mapinfo-sym-32”。

  • 对于“字体符号”,符号名称也为“mapinfo sym-”,其中“”是字体中的符号编号。在这种情况下,mapserver会忽略字体本身的名称。

  • mapinfo还支持“自定义符号”(位图符号)…我不确定你会从Ogr那里得到什么,但我很确定MapServer不会对它们做任何有用的事情。

可以使用ogrinfo实用程序精确地找出哪些符号名ogr将返回到mapserver。查看ogrinfo输出中读取的每个形状的“样式”字符串。

将ogr样式信息映射到mapserver类成员

以下是当前受OGR数据源支持的样式参数列表,以及它们在MapServer中的映射方式:

线色

线条颜色(pen.c)映射到class.style.color

线条粗细

线条粗细(pen.w)映射到class.style.width。默认值为1像素线(与MapServer相同)。

线型

线条图案(pen.p)映射到class.style.pattern。默认为实线。

线帽和连接

线帽(pen.cap)映射到class.style.cap,而连接到class.style.join。

行偏移

线条垂直偏移(pen.dp)映射到class.style.offset

行符号

ogr为mapserver提供符号名(pen.id),如果ogr返回到mapserver的符号名与符号集中某个符号的名称匹配,则将使用此符号。

多边形背景色

多边形背景色(brush.bc)直接映射到class.style.background color

多边形填充颜色

多边形填充颜色(brush.fc)直接映射到class.style.color

多边形轮廓

如果多边形具有在数据源中定义的轮廓颜色(pen.c)和厚度,则将应用与上面的线条颜色和厚度相同的规则,除非轮廓颜色映射到class.style.outline color。

多边形符号

ogr为mapserver提供符号名(brush.id),如果ogr返回到mapserver的符号名与符号集中某个符号的名称匹配,则将使用此符号。

多边形符号颜色(brush.fc)直接映射到class.style.color。多边形符号大小(brush.s)直接映射到class.style.size。多边形符号间距(注意ogr brush.dx和brush?dy参数必须相等)直接映射到class.style.gap。多边形符号角度(brush.a)直接映射到class.style.angle。

点符号

点符号颜色(symbol.c)直接映射到class.style.color。点符号轮廓颜色(symbol.c)直接映射到class.style.outline color。点符号大小(symbol.s)直接映射到class.style.size。

如果符号集包含名为“默认标记”的符号,则将使用此符号,否则默认值将为class.symbol=0(即1像素点)

在绘制点符号时,也可以控制使用哪一个符号(只需稍加处理)。ogr为mapserver提供符号名称(symbol.id),如果ogr返回到mapserver的符号名称与符号集中某个符号的名称匹配,则将使用此符号。

对于mapinfo点符号(在mapinfo mif规范中编号为32到67),ogr返回的名称为“mapinfo-sym-x”,其中x应替换为mapinfo符号编号(例如,“mapinfo-sym-35”是星形符号)。

如果ogr符号ID是Web引用(http://…/mysymbol.png),则将下载该符号并创建一个引用它的新符号条目。

文本标签

文本字符串(label.t)映射到class.label.text

文本颜色(label.c)映射到class.label.color

文本背景色(label.b)映射到class.label.background color

文本阴影颜色(label.h)映射到class.label.shadow color

文本大纲颜色(label.h)映射到class.label.outline color

文本高度(label.s)映射到class.label.size

文本角度(label.a)映射到class.label.angle

文本定位点位置(label.p)映射到class.label.position

文本字体映射遵循以下规则:

  1. 如果支持TTF字体:

    1. bolditalic arial-bold. arial-italic. arial-bold-italic.

    2. 如果1a.失败并且字体集中存在一个名为“默认”的字体,则将使用此“默认”字体。

  2. 如果不支持TTF字体,或者上述所有情况都失败,则将使用位图中字体。

从MapServer 7.0开始,每个功能可以支持多个OGR工具(例如笔、画笔、符号)。相应的样式对象是按照OGR工具在OGR FeatureStyle字符串中显示的顺序创建的,即,字符串中的最后一个对象是在前一个对象的顶部绘制的。此规则为真,除非定义了ogr工具的优先级参数(pen/brush/symbol.l),在这种情况下,它优先于ogr工具的显影顺序。

通过mapscript访问ogr styleitemauto标签样式

通过将图层的处理参数设置为“getshapeu styleu items=all”,可以通过mapscript(如php/mapscript的getshape()或getvalue()方法)访问ogr styleitem自动标签样式。因此,层必须包含:

LAYER
  ...
  PROCESSING "GETSHAPE_STYLE_ITEMS=all"
  ...
END

支持以下标签样式:

标签样式

描述

已实现MapServer版本

OGR:标签字体

以逗号分隔的字体名称列表

5.4

OGR:标签尺寸

带单位的数值

5.2.0

OGR:标签文本

标签文本字符串

5.2.0

OGR:标签

旋转角度(度)

5.2.0

OGR:标签颜色

前景色

5.4

OGR:标签颜色

背景色

5.4

OGR:标签放置

如何相对于特征的几何图形绘制文本

5.4

OGR:拉力锚

一个从1到12的值,用于定义标签相对于其附着点的位置。

5.4

OGR: Labeldx

X偏移量

5.4

OGR:标签

Y偏移量

5.4

OGR: LabelPrP

垂直偏移

5.4

奥格尔:拉博尔德

粗体文字

5.4

OGR:标记的

斜体

5.4

食人魔:拉布卢德林

下划线

5.4

食人魔:labelpriority

定义样式部件绘制顺序的数值。

5.4

食人魔:labelstrikeout

删除文本(gdal>=1.4.0)

5.4

食人魔:labelstretch

拉伸因子按因子百分比更改字体中所有字符的宽度。(GDAL>=1.4.0)

5.4

OGR:拉贝拉德霍尔

水平相邻文本(gdal>=1.4.0)

5.4

食人魔:labeladjvert

垂直相邻文本(gdal>=1.4.0)

5.4

食人魔:labelhcolor

阴影颜色(gdal>=1.4.0)

5.4

OGR:标签颜色

轮廓颜色(gdal>1.6.0)

5.4

请看 OGR Feature Style Specification 有关这些特定样式的详细信息,请参阅文档。

访问“ogr:labelText”标签样式的php mapscript示例代码如下:

<?php

// define variables
define( "MAPFILE", "D:/ms4w/apps/ogr-demos/nfld_demo/test.map" );

// open map
$oMap = ms_newMapObj( MAPFILE );

//get layer
$oLayer = $oMap->getLayerByName("Map_Labels");

//get styles
$status = $oLayer->open();
$status = $oLayer->whichShapes($oMap->extent);
while ($oShape = $oLayer->nextShape())
{
  //echo $oShape->index ."<br>\n";
  echo $oShape->getValue($oLayer,"OGR:LabelText");
  echo "\n";
}
$oLayer->close();

?>

使用ogr/mapserver的示例站点

以下网站使用了ogr的样式项“auto”功能:

以下网站使用了OGR以及MapInfo的“无缝地图层”功能:

以下网站使用ogr显示Tiger 2000文件:

常见问题/常见问题

Q

“食人魔”代表什么?**

A

基本上,食人魔不代表任何东西。有关如何命名OGR的详细说明,请参阅gdal的常见问题解答,网址为http://trac.osgeo.org/gdal/wiki/faq。


Q

使用styleitem auto时,.sym符号文件中应该包含什么?

A

当使用StyleItem Auto时,MapServer尝试将OGR返回的符号名与符号文件中的名称匹配。有关快速解决方案,请尝试使用以下符号文件:

https://demo.mapserver.org/ogr-demos/yk_demo/etc/symbols_mapinfo.txt

OGR返回到MapServer的符号的名称取决于文件格式。对于mapinfo文件,它将是:

  • 对于“旧样式”符号(默认的mapinfo 3.0符号编号为32到67),符号名称将为“mapinfo sym-”,其中“”是符号编号,例如“mapinfo-sym-32”。

  • 对于“字体符号”,符号名称也为“mapinfo sym-”,其中“”是字体中的符号编号。在这种情况下,mapserver会忽略字体本身的名称。

  • mapinfo还支持“自定义符号”(位图符号)…我不确定你会从Ogr那里得到什么,但我很确定MapServer不会对它们做任何有用的事情。

可以使用ogrinfo实用程序精确地找出哪些符号名ogr将返回到mapserver。查看ogrinfo输出中读取的每个形状的“样式”字符串。

信用

在Regione Toscana-Settore Sistema Informativo Territoriale ed Ambientale(http://www.geografia.toscana.it)的资助下,为Faunalia(http://www.faunalia.it)开发了从OGR功能样式到MapServer样式的映射改进(CIG:Z410C90D94)