虚拟空间数据¶
这是对mapserver的ogr扩展。它允许您连接到不显式保存空间数据的数据库以及纯文本文件。您的数据必须有一个x和一个y列,并且可以通过ODBC连接或直接指向文本文件的指针访问数据。
原版 VirtualSpatialData wiki页面可能包含其他信息。
显示步骤¶
1。创建数据源名称(DSN)¶
有关在Windows和Linux上创建DSN的特定说明,可以通过搜索MapServer参考文档站点找到
在某些Windows系统上,必须创建系统DSN。
2。测试连接¶
测试您与ogrinfo的连接。此命令的语法为:
> ogrinfo ODBC:user/pass@DSN table
Windows用户可能不需要指定用户/密码,因此语法为:
> ogrinfo ODBC:@DSN table
示例:使用ogrinfo通过ODBC访问逗号分隔的文本文件
以下是包含lat/long points的扁平文本文件coal_dep.txt的片段:
unknown,na,id,id2,mark,coalkey,coalkey2,long,lat
0.000,0.000,1,1,7,87,87,76.90238,51.07161
0.000,0.000,2,2,7,110,110,78.53851,50.69403
0.000,0.000,3,3,3,112,112,83.22586,71.24420
0.000,0.000,4,4,6,114,114,80.79896,73.41175
如果DSN名称为data_txt,则查看目录中适用文件列表的ogrinfo命令为:
> ogrinfo ODBC:jeff/test@Data_txt
INFO: Open of `ODBC:jeff/test@Data_txt'
using driver `ODBC' successful.
1: coal_dep.csv
2: coal_dep.txt
3: coal_dep_nf.txt
4: coal_dep_trim.txt
5: Copy of coal_dep.txt
6: deposit.csv
7: maruia.asc
8: oahuGISbathy.csv
9: oahuGISbathy.txt
10: on_pts.txt
11: on_pts_utm.txt
12: test.txt
13: utm_test.txt
用户名和密码可能是可选的,因此以下内容也可能有效:
> ogrinfo ODBC:@Data_txt
因此,查看有关某个特定层的更多信息的命令是:
> ogrinfo ODBC:@Data_txt coal_dep.txt
INFO: Open of `ODBC:@Data_txt'
using driver `ODBC' successful.
Layer name: coal_dep.txt
Geometry: Unknown (any)
Feature Count: 266
Layer SRS WKT:
(unknown)
UNKNOWN: String (255.0)
NA: String (255.0)
ID: String (255.0)
ID2: String (255.0)
MARK: String (255.0)
COALKEY: String (255.0)
COALKEY2: String (255.0)
LONG: String (255.0)
LAT: String (255.0)
OGRFeature(coal_dep.txt):0
UNKNOWN (String) = 0.000
....
三。创建虚拟数据文件¶
这是一个扩展名为ovf的文件,如下所示:
<OGRVRTDataSource>
<OGRVRTLayer name="mylayer">
<SrcDataSource>ODBC:user/pass@DSN</SrcDataSource>
<SrcLayer>tablename</SrcLayer>
<GeometryType>wkbPoint</GeometryType>
<LayerSRS>WGS84</LayerSRS>
<GeometryField encoding="PointFromColumns" x="x" y="y"/>
</OGRVRTLayer>
</OGRVRTDataSource>
有关ovf文件的更多信息,请访问:https://gdal.org/drivers/vector/vrt.html
示例:coal_dep.txt的ovf文件:
<OGRVRTDataSource>
<OGRVRTLayer name="coal-test">
<SrcDataSource>ODBC:Data_txt</SrcDataSource>
<SrcLayer>coal_dep.txt</SrcLayer>
<GeometryField encoding="PointFromColumns" x="Long" y="Lat"/>
<GeometryType>wkbPoint</GeometryType>
</OGRVRTLayer>
</OGRVRTDataSource>
4。用ogrinfo测试虚拟数据文件¶
使用ogrinfo测试新的ovf文件,例如:
> ogrinfo coal.ovf coal-test
ERROR 4: Update access not supported for VRT datasources.
Had to open data source read-only.
INFO: Open of `myfile.ovf'
using driver `VRT' successful.
Layer name: coal_dep.txt
Geometry: Unknown (any)
Feature Count: 266
Layer SRS WKT:
(unknown)
UNKNOWN: String (255.0)
NA: String (255.0)
ID: String (255.0)
ID2: String (255.0)
MARK: String (255.0)
...
5。 Mapfile 层¶
使用一个OVF文件,您的层可能看起来像:
LAYER
CONNECTION "coal.ovf"
CONNECTIONTYPE OGR
DATA "coal-test"
METADATA
"wms_srs" "4326"
"wms_title" "coal-test"
END
NAME "coal-test"
SIZEUNITS PIXELS
STATUS ON
TOLERANCE 0
TOLERANCEUNITS PIXELS
TYPE POINT
UNITS METERS
CLASS
STYLE
COLOR 255 0 0
MAXSIZE 100
MINSIZE 1
SIZE 6
SYMBOL "star"
END
END
END
注解
对于连接,可以指定绝对路径或相对路径。首先相对于shapepath解释相对路径,如果找不到,则mapserver将相对于.map位置重试。有关连接规则的详细信息,请阅读MAPServer OGR 文件。
或者您可以直接指定ovf内容,例如:
LAYER
CONNECTION "<OGRVRTDataSource>
<OGRVRTLayer name='coal-test'>
<SrcDataSource>ODBC:@Data_txt</SrcDataSource>
<SrcLayer>coal_dep.txt</SrcLayer>
<GeometryField encoding='PointFromColumns' x='Long' y='Lat'/>
<GeometryType>wkbPoint</GeometryType>
</OGRVRTLayer>
</OGRVRTDataSource>"
CONNECTIONTYPE OGR
DATA "coal-test"
METADATA
"wms_srs" "4326"
"wms_title" "coal-test"
END
NAME "coal-test"
SIZEUNITS PIXELS
STATUS ON
TOLERANCE 0
TOLERANCEUNITS PIXELS
TYPE POINT
UNITS METERS
CLASS
STYLE
COLOR 255 0 0
MAXSIZE 100
MINSIZE 1
SIZE 6
SYMBOL "star"
END
END
END
6。测试 Mapfile¶
你首先应该尝试使用 shp2img 效用:
shp2img -m mymapfile.map -o test.png
成功创建地图图像后,请尝试应用程序。注意:Windows用户可能会遇到SHP2IMG工作的问题,但他们的应用程序会抛出类似于此的错误:
Warning: [MapServer Error]: msOGRFileOpen(): Open failed for OGR connection `coal.ovf'.
Unable to initialize ODBC connection to DSN for jeff/test@Data_txt,
[Microsoft][ODBC Driver Manager] Data source name not found
and no default driver specified in D:\ms4w\Apache\htdocs\quickmap.php on line 40
如果发生这种情况,您应该确保已创建系统DSN。