MySQL

作者

戴维福塞特

联系

美国明尼苏达州莫伊亚的大卫·福塞特

作者

杰夫麦克纳

联系

jmckenna在gatewaygeomatics.com

最后更新

2019-11-21

介绍

以下方法通过ogr连接到mysql MySQL driver 从而避免了建立ODBC连接的需要。

连接到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”的符号。

更多信息