Mapnik可以从SQL Server渲染空间数据吗?


10

这是一个非常简单的问题-我只想知道是否有人可以确认他们已成功使用Mapnik直接从SQL Server中保存的数据渲染图块。(如果可以,您是怎么做的?)除非您已亲自确认这是可能的,否则请不要回复...不仅仅是应该这样

我见过人们推荐Mapnik在这样的线程中从SQL Server渲染数据:任何用于SqlGeometry / SqlGeography的好的Map渲染引擎

另外,mapnik网站指出“支持所有OGR格式”:http ://mapnik.org/faq/#data

但是,我完全无法使用到本地SQL Server数据库的连接作为Mapnik图层的数据源。作为测试,我使用了一个简单的测试OGR VRT,它在SQL Server上执行一条SQL语句,以选择单个内联地理多边形作为“知名文本”,如下所示:

<OGRVRTDataSource>
  <OGRVRTLayer name="test">
    <SrcDataSource>MSSQL:server=zangief\DENALICTP3;database=TempDB;</SrcDataSource> 
    <SrcSQL>SELECT geography::STPolyFromText('POLYGON((0 50, 2 50, 2 53, 0 53, 0 50))', 4326).STAsText() AS geomWKT</SrcSQL>
    <GeometryField encoding="WKT" field="geomWKT"/>
    <LayerSRS>EPSG:4326</LayerSRS>
    <GeometryType>wkbPolygon</GeometryType>
  </OGRVRTLayer>
</OGRVRTDataSource>

(请注意,我也尝试使用更常规的SELECT * FROM Table语法进行此操作)。OGRINFO成功打开此VRT并报告以下内容:

ogrinfo mssql.ovf -so -al
INFO: Open of `mssql.ovf'
      using driver `VRT' successful.

Layer name: test
Geometry: Polygon
Feature Count: 1
Extent: (0.000000, 50.000000) - (2.000000, 53.000000)
Layer SRS WKT:
GEOGCS["WGS 84",
    DATUM["WGS_1984",
        SPHEROID["WGS 84",6378137,298.257223563,
            AUTHORITY["EPSG","7030"]],
        AUTHORITY["EPSG","6326"]],
    PRIMEM["Greenwich",0,
        AUTHORITY["EPSG","8901"]],
    UNIT["degree",0.0174532925199433,
        AUTHORITY["EPSG","9122"]],
    AUTHORITY["EPSG","4326"]]
geomWKT: String (0.0)

但是,将此相同的VRT文件设置为Mapnik图层的数据源会报告以下错误:

ERROR 1: Failed to open datasource `MSSQL:server=zangief\DENALICTP3;database=Tem
pDB;'.
Traceback (most recent call last):
  File "rundemo.py", line 48, in <module>
    provlines_lyr.datasource = mapnik.Ogr(file="mssql.ovf", layer="test")
  File "C:\OSGeo4W\apps\Python25\lib\site-packages\mapnik\__init__.py", line 418
, in Ogr
    return CreateDatasource(keywords)
RuntimeError: Failed to open datasource `MSSQL:server=zangief\DENALICTP3;databas
e=TempDB;'.

OGR驱动程序创建SQL Server连接的方式与Mapnik之间似乎存在一些问题,但我不知道确切的位置。我尚未找到任何证据或例子来表明其他任何人都能够成功实现这一目标...

Answers:


2

OGR虚拟格式帮助页面上似乎缺少清晰的概述。它可以“提供锚文件以访问面向非文件的数据源”的短语似乎暗示可以使用任何连接类型,但是我不确定是这种情况。

其原始功能是允许从非空间源创建空间数据,例如,通过组合数据库表中的X和Y列来创建点要素。

但是,没有理由不能将空间数据库也用于此目的,但是您应该使用标准的ODBC连接而不是MSSQL驱动程序。

为此,请在Windows中创建一个DSN(数据源名称)。然后在虚拟层配置中使用ODBC连接和DSN。因此,如果您的DSN名为OSVectorMap:

<OGRVRTDataSource>
  <OGRVRTLayer name="AASQLlayer">
    <SrcDataSource>ODBC:username/password@OSVectorMap</SrcDataSource>
    <SrcSQL>SELECT geom27700.STAsText() AS geomWKT FROM TG11_Settlement_Area</SrcSQL>
    <GeometryField encoding="WKT" field="geomWKT"/>
    <LayerSRS>EPSG:4326</LayerSRS>
    <GeometryType>wkbPolygon</GeometryType>
  </OGRVRTLayer>
</OGRVRTDataSource>

MapServer Wiki和“ 虚拟空间数据”页面中,有更多有关创建虚拟层的详细信息。

顺便说一句很棒的博客文章。我不必担心使用Python 3.x-几乎所有有用的GIS库仍在2.x中,并且SQL Server的Geometry和Geography类型很棒。唯一的缺点是,就博客帖子以及与其他工具的集成而言,不幸的是,SQL Server在开源世界中似乎是第二等公民。


谢谢回复。我也尝试过使用ODBC连接到VRT中的SQL Server,不幸的是,这会导致相同的错误。我认为OGR VRT与SQL Server的连接不是问题,因为我可以在QGIS或OGR2OGR中加载此VRT,并且可以毫无问题地访问SQL功能。我认为这是与Mapnik的OGR驱动程序有问题,但是,就像你说的,遗憾的是没有那么多的开放源代码的人使用SQL Server :( Forunately,地图服务器与SQL Server工作,所以,虽然我更喜欢Mapnik的笔下,我将不得不与工作该网址。
阿拉斯泰尔·艾奇逊

@alastair-您确定没有区别吗?使用MSSQL,没有任何东西可以通过Mapnik到达数据库,但是使用ODBC SQL Profiler显示,查询正在执行。稍后我将尝试使用真实数据。
geographika,

0

您可以使用虚拟格式(GDAL)从MSSQL数据库提取数据

http://www.gdal.org/ogr/drv_vrt.html

    <OGRVRTDataSource>
  <OGRVRTLayer name="AASQLlayer">
    <SrcDataSource>MSSQL:server=.\SQLEXPRESS;database=OSVectorMap;trusted_connection=yes</SrcDataSource>
    <SrcSQL>SELECT geom27700.STAsText() AS geomWKT FROM TG11_Settlement_Area</SrcSQL>
    <GeometryField encoding="WKT" field="geomWKT"/>
  </OGRVRTLayer>
</OGRVRTDataSource>

来源:http//alastaira.wordpress.com/2011/06/16/tile-rendering-with-mapnik-part-1-of-n-where-n-is-large/

尽管推荐Postgres PostGIS(在数据库方面具有更好的Geometry功能)


MySQL-> MS SQL。我想自己更正它,但是它抱怨“编辑中至少需要6个字符”。
Igor Brejc,

1
我不知道您是否意识到,但是您提供的博客链接来自问题作者
...。– Kelso

@Mapperz-感谢您抽出宝贵的时间来答复,但请再次阅读我的问题-我希望听到任何个人确认他们已使Mapnik连接到SQL Server的消息-不仅仅是理论上应该可行。作为凯尔索所指出的,你把博客链接文章是我写的更糟糕的是,如果你真的读它,你会看到我描述我是如何成功的获得OGR连接到工作(所以为什么我张贴这个问题)!。另外,您认为PostGIS具有更好的几何功能?
Alastair Aitchison

@Alastair:尝试在OSM-dev邮件列表(lists.openstreetmap.org/listinfo/dev)上提问,那里有很多Mapnikers。
Igor Brejc,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.