Kann Mapnik räumliche Daten von SQL Server rendern?

10

Dies ist eine sehr einfache Frage. Ich möchte nur wissen, ob jemand bestätigen kann, dass er Mapnik erfolgreich verwendet hat, um Kacheln direkt aus Daten zu rendern, die in SQL Server gespeichert sind. (Und wenn ja, was haben Sie getan, damit es funktioniert?) Bitte antworten Sie nicht, es sei denn, Sie haben persönlich bestätigt, dass dies möglich ist ... nicht einfach, dass es möglich sein sollte

Ich habe gesehen, dass Leute Mapnik zum Rendern von Daten von SQL Server in Threads wie diesem empfehlen: Alle guten Map-Rendering-Engines für SqlGeometry / SqlGeography

Auf der mapnik-Website heißt es außerdem, dass "alle OGR-Formate unterstützt werden": http://mapnik.org/faq/#data

Ich konnte jedoch keine Verbindung zu meiner lokalen SQL Server-Datenbank als Datenquelle für eine Mapnik-Ebene verwenden. Als Test verwende ich einen einfachen Test-OGR-VRT, der eine SQL-Anweisung auf einem SQL Server ausführt, um ein einzelnes Inline-Geografie-Polygon als bekannten Text wie folgt auszuwählen:

<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>

(Hinweis: Ich habe dies auch mit konventionellerer SELECT * FROM-Tabellensyntax versucht.) OGRINFO öffnet diese VRT erfolgreich und meldet Folgendes:

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)

Wenn Sie jedoch dieselbe VRT-Datei als Datenquelle für eine Mapnik-Ebene festlegen, wird der folgende Fehler gemeldet:

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;'.

Es scheint, dass es ein Problem zwischen der Art und Weise gibt, wie der OGR-Treiber die SQL Server-Verbindung erstellt, und Mapnik, aber ich weiß nicht genau, wo es sich befindet. Ich habe noch keine Beweise oder Beispiele gefunden, die darauf hindeuten, dass dies auch jemand anderem erfolgreich gelungen ist ...

Alastair Aitchison
quelle

Antworten:

2

Auf der Hilfeseite des OGR Virtual Format scheint es keinen klaren Überblick zu geben . Der Ausdruck "eine Ankerdatei für den Zugriff auf nicht dateiorientierte Datenquellen bereitstellen" scheint zu implizieren, dass jeder Verbindungstyp verwendet werden kann, aber ich bin nicht sicher, ob dies der Fall ist.

Die ursprüngliche Funktion bestand darin, die Erstellung von Geodaten aus nicht räumlichen Quellen zu ermöglichen, beispielsweise durch Kombinieren einer X- und Y-Spalte in einer Datenbanktabelle, um Punkt-Features zu erstellen.

Es gibt jedoch keinen Grund, warum eine räumliche Datenbank nicht auch für diesen Zweck verwendet werden kann. Sie sollten dann jedoch eine Standard- ODBC- Verbindung anstelle des MSSQL- Treibers verwenden.

Erstellen Sie dazu in Windows einen DSN (Data Source Name). Verwenden Sie dann die ODBC-Verbindung und den DSN in der Konfiguration der virtuellen Schicht. Wenn Ihr DSN also OSVectorMap heißt:

<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>

Weitere Informationen zum Erstellen virtueller Ebenen finden Sie im MapServer-Wiki und auf der Seite Virtuelle Geodaten .

Toller Blog-Beitrag übrigens. Ich würde mir keine Sorgen um die Verwendung von Python 3.x machen - fast alle nützlichen GIS-Bibliotheken befinden sich noch in 2.x, und die SQL Server-Geometrie- und Geografietypen sind großartig. Die einzigen Nachteile sind, dass SQL Server in Bezug auf Blog-Posts und die Integration mit anderen Tools leider ein Bürger zweiter Klasse in der OpenSource-Welt zu sein scheint.

geographika
quelle
Danke für die Antwort. Ich habe es auch mit einer ODBC-Verbindung zu SQL Server im VRT versucht, und dies führt leider zu demselben Fehler. Ich glaube nicht, dass es ein Problem mit der OGR-VRT-Verbindung zu SQL Server als solchem ​​ist, da ich diese VRT beispielsweise in QGIS oder OGR2OGR laden und problemlos auf die SQL-Funktionen zugreifen kann. Ich denke , es ist ein Problem mit dem Mapnik OGR Fahrer aber, wie Sie sagen, dass leider nicht viele Opensource Menschen SQL Server :( Forunately verwenden, MapServer funktioniert die Arbeit mit SQL Server so, obwohl ich Mapnik Rendering bevorzugen, ich Arbeit haben , werde mit das stattdessen.
Alastair Aitchison
@alastair - Bist du sicher, dass es keinen Unterschied gibt? Mit MSSQL erreichte nichts die Datenbank über Mapnik, aber mit ODBC zeigte SQL Profiler, dass die Abfragen ausgeführt wurden. Ich werde es später mit echten Daten versuchen.
Geographika
0

Sie können das virtuelle Format (GDAL) verwenden , um Daten aus Ihrer MSSQL-Datenbank abzurufen

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>

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

Obwohl Postgres PostGIS empfehlen (hat bessere Geometriefunktionen auf der Datenbankseite)

Mapperz
quelle
MySQL -> MS SQL. Ich wollte es selbst korrigieren, aber es beschwert sich über "mindestens 6 Zeichen, die für die Bearbeitung benötigt werden".
Igor Brejc
1
Ich weiß nicht, ob Sie es bemerkt haben, aber der Blog-Link, den Sie bereitgestellt haben, stammt vom Autor der Frage ....
Kelso
@Mapperz - danke, dass Sie sich die Zeit genommen haben, um zu antworten, aber bitte lesen Sie meine Frage noch einmal - ich möchte von jedem hören, der persönlich bestätigt, dass Mapnik eine Verbindung zu SQL Server herstellen kann - nicht nur, dass dies theoretisch möglich sein sollte. Wie Kelso betont, wurde der Blog-Artikel, auf den Sie verlinken, von mir geschrieben. Wenn Sie ihn tatsächlich lesen, werden Sie feststellen, dass ich beschreibe, wie es mir nicht gelungen ist, die OGR-Verbindung zum Laufen zu bringen (daher poste ich diese Frage)!. Auf welcher Grundlage würden Sie sagen, dass PostGIS bessere Geometriefunktionen hat?
Alastair Aitchison
@Alastair: Versuchen Sie, die Frage auf der OSM- Entwickler -Mailingliste ( lists.openstreetmap.org/listinfo/dev ) zu stellen. Dort gibt es viele Mapniker.
Igor Brejc