MySQL¶
- 作者
戴维福塞特
- 联系
美国明尼苏达州莫伊亚的大卫·福塞特
- 作者
杰夫麦克纳
- 联系
jmckenna在gatewaygeomatics.com
- 最后更新
2021-05-05
目录
介绍¶
以下方法通过ogr连接到mysql MySQL driver 从而避免了建立ODBC连接的需要。
更多信息:
通过MapServer的OGR矢量层 (MapServer OGR文档)
矢量数据 (MapServer矢量数据访问指南)
MySQL wiki page (描述了不推荐使用的mygis支持)
连接到MySQL中的空间数据¶
本节介绍如何在MapServer中显示空间MySQL表(即该表具有几何类型的列)。奥格尔 MySQL driver 在OGR版本1.3.2中进行了扩展,以支持对MySQL空间表的访问。
要求¶
使用OGR支持编译的MAPServer
ogr/gdal 1.3.2版或更高版本,使用MySQL支持编译
验证ogr build中的mysql支持¶
您可以使用ogrinfo命令行实用程序验证您的本地版本的ogr是否包含mysql支持,并确保返回“mysql”:
ogrinfo --formats
Supported Formats:
-> "ESRI Shapefile" (read/write)
-> "MapInfo File" (read/write)
...
-> "PostgreSQL" (read/write)
-> "MySQL" (read/write)
...
测试与ogrinfo的连接¶
ogr中的mysql连接字符串格式如下:
MYSQL:database,host=yourhost,user=youruser,password=yourpass,tables=yourtable
因此,ogrinfo命令的示例如下:
> ogrinfo MYSQL:test,user=root,password=mysql,port=3306
它将返回“test”数据库中所有表的列表:
INFO: Open of `MYSQL:test,user=root,password=mysql,port=3306'
using driver `MySQL' successful.
1: province (Polygon)
您可以返回MySQL空间层的摘要:
> ogrinfo MYSQL:test,user=root,password=mysql,port=3306 province -summary
INFO: Open of `MYSQL:test,user=root,password=mysql,port=3306'
using driver `MySQL' successful.
Layer name: province
Geometry: Polygon
Feature Count: 48
Extent: (-13702.315770, 3973784.599548) - (1127752.921471, 4859616.714055)
Layer SRS WKT:
PROJCS["ED50_UTM_zone_30N",
...
FID Column = OGR_FID
Geometry Column = SHAPE
id: Real (2.0)
...
创建MapServer层¶
LAYER
NAME "spain_provinces_mysql_spatial"
TYPE POLYGON
STATUS DEFAULT
CONNECTIONTYPE OGR
CONNECTION "MySQL:test,user=root,password=mysql,port=3306"
DATA "SELECT SHAPE,admin_name from province"
LABELITEM "admin_name"
CLASS
NAME "Spain Provinces"
STYLE
COLOR 240 240 240
OUTLINECOLOR 199 199 199
END
LABEL
COLOR 0 0 0
FONT sans
TYPE truetype
SIZE 8
POSITION AUTO
PARTIALS FALSE
OUTLINECOLOR 255 255 255
END
END
END # layer
SHAPE province
连接到MySQL中的非空间数据¶
本节介绍如何在MapServer中显示非空间MySQL表(意味着该表没有几何类型的列)。
在Windows上的GDAL/OGR 1.2.6及更高版本和Linux上的GDAL/OGR 1.3.2中可以找到对此功能的支持。
要求¶
mysql数据库包含一个包含x和y坐标字段的表
.ovf文件,您将创建的一个小XML文件
使用支持此功能的OGR版本编译的MapServer
创建.ovf文件¶
这是名为aqidata.ovf的.ovf文件
<OGRVRTDataSource>
<OGRVRTLayer name="aqidata">
<SrcDataSource>MYSQL:aqiTest,user=uuuuu,password=ppppp,host=192.170.1.100,port=3306,tables=testdata</SrcDataSource>
<SrcSQL>SELECT areaID, x, y, sampleValue FROM testdata</SrcSQL>
<GeometryType>wkbPoint</GeometryType>
<GeometryField encoding="PointFromColumns" x="x" y="y"/>
</OGRVRTLayer>
</OGRVRTDataSource>
如果查看<srcdatasource>
mysql数据库名为“aqitest”
“testdata”是包含坐标数据的表
主机和端口用于mysql服务器
使用geometryfield元素告诉ogr哪个字段存储X和Y坐标数据。我的名字就是X和Y。
测试与ogrinfo的连接¶
# usr/local/bin/ogrinfo /maps/aqidata.ovf
OGRIVER返回
ERROR 4: Update access not supported for VRT datasources.
Had to open data source read-only.
INFO: Open of `/maps/aqidata.ovf'
using driver `VRT' successful.
1: aqidata (Point)
不要担心错误,这只是告诉您它是一个只读驱动程序。如果它真的让你心烦意乱,请使用-ro(只读)标志调用ogrinfo。
查看实际数据
# usr/local/bin/ogrinfo /maps/aqidata.ovf -al
创建MapServer层¶
LAYER
NAME "MyAqi"
STATUS DEFAULT
TYPE POINT
CONNECTIONTYPE OGR
CONNECTION "aqidata.ovf"
DATA "aqidata"
CLASS
NAME "MyClass"
STYLE
SYMBOL 'circle'
SIZE 15
COLOR 0 255 0
END
END
END
层定义中的数据应与ovf文件中的ogrvrtlayer元素的name属性相同。
要绘制此图形,需要在映射文件中定义一个符号集,并在symbols.sym文件中定义一个名为“circle”的符号。