Mapnik può eseguire il rendering dei dati spaziali da SQL Server?


10

Questa è una domanda molto semplice: voglio solo sapere se qualcuno può confermare di aver utilizzato con successo Mapnik per eseguire il rendering dei riquadri direttamente dai dati contenuti in SQL Server. (E, in tal caso, cosa hai fatto per farlo funzionare?) Per favore non rispondere a meno che tu non abbia confermato personalmente che ciò è possibile ... non semplicemente che dovrebbe essere possibile

Ho visto persone raccomandare Mapnik per il rendering dei dati da SQL Server in thread come questo: Qualsiasi buon motore di rendering di mappe per SqlGeometry / SqlGeography

Inoltre, il sito web mapnik afferma che "sono supportati tutti i formati OGR": http://mapnik.org/faq/#data

Tuttavia, non sono stato completamente in grado di utilizzare una connessione al mio database SQL Server locale come origine dati per un livello Mapnik. Come test, sto usando un test OGR VRT semplice, che esegue un'istruzione SQL su un SQL Server per selezionare un singolo poligono di geografia in linea come testo noto, come segue:

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

(Nota: ho anche provato questo con la sintassi SELECT * FROM Table più convenzionale). OGRINFO apre con successo questo VRT e riporta quanto segue:

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)

Tuttavia, l'impostazione di questo stesso file VRT come origine dati per un livello Mapnik segnala il seguente errore:

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

Sembra che ci sia qualche problema tra il modo in cui il driver OGR crea la connessione SQL Server e Mapnik, ma non so esattamente dove sia. Non ho ancora trovato prove o esempi per suggerire che qualcun altro sia stato in grado di raggiungere questo obiettivo con successo ...

Risposte:


2

Sembra che manchi una chiara panoramica nella pagina di aiuto del formato virtuale OGR . La frase che può "fornire un file di ancoraggio per l'accesso a origini dati non orientate ai file" sembra implicare l'utilizzo di qualsiasi tipo di connessione, ma non sono sicuro che sia così.

La sua funzione originale era quella di consentire la creazione di dati spaziali da fonti non spaziali, ad esempio combinando una colonna X e Y in una tabella di database per creare funzionalità punto.

Tuttavia, non vi è alcun motivo per cui un database spaziale non possa essere utilizzato anche per questo scopo, ma è necessario utilizzare una connessione ODBC standard anziché il driver MSSQL .

Per fare ciò, creare un DSN (Nome origine dati) in Windows. Quindi utilizzare la connessione ODBC e il DSN nella configurazione del livello virtuale. Quindi se il tuo DSN si chiama 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>

Ci sono alcuni dettagli in più sulla creazione di Livelli Virtuali nella pagina wiki e dati spaziali virtuali di MapServer .

Ottimo post sul blog a proposito. Non mi preoccuperei troppo di usare Python 3.x: quasi tutte le utili librerie GIS sono ancora in 2.xe i tipi Geometria e Geografia di SQL Server sono fantastici. L'unico aspetto negativo è che SQL Server purtroppo sembra un cittadino di seconda classe nel mondo open source in termini di post di blog e integrazione con altri strumenti.


Grazie per la risposta. Ho provato anche con una connessione ODBC a SQL Server in VRT e, sfortunatamente, questo porta allo stesso errore. Non penso che sia un problema con la connessione OGR VRT a SQL Server in quanto tale, perché posso caricare questo VRT in QGIS o OGR2OGR, per esempio, e accedere alle funzionalità SQL senza alcun problema. Penso che sia un problema con il driver Mapnik OGR, ma, come dici tu, purtroppo, non che molte persone OpenSource utilizzare SQL Server :( Forunately, MapServer fa il lavoro con SQL Server in modo, anche se io preferisco di rendering di Mapnik, dovrò lavorare con quello invece
Alastair Aitchison il

@alastair - Sei sicuro che non ci siano differenze? Con MSSQL non è stato possibile raggiungere il database tramite Mapnik, ma con ODBC SQL Profiler ha mostrato che le query venivano eseguite. Proverò con dati reali più tardi.
geographika,

0

È possibile utilizzare il formato virtuale (GDAL) per estrarre i dati dal database 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>

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

Anche se raccomandare Postgres PostGIS (ha funzioni geometriche migliori sul lato database)


MySQL -> MS SQL. Volevo correggerlo da solo, ma mi lamento di "almeno 6 caratteri necessari nella modifica".
Igor Brejc,

1
Non so se te ne sei reso conto, ma il link al blog che hai fornito proviene dall'autore della domanda ....
Kelso

@Mapperz - grazie per aver dedicato del tempo a rispondere, ma ti preghiamo di leggere di nuovo la mia domanda - Voglio sentire chiunque confermi personalmente di avere Mapnik per connettersi a SQL Server - non solo che teoricamente dovrebbe essere possibile. Come sottolinea Kelso, l'articolo del blog a cui ti colleghi è scritto da me e inoltre, se lo leggi effettivamente, vedrai che descrivo come non sono riuscito a far funzionare la connessione OGR (quindi perché sto postando questa domanda)!. Inoltre, su quale base diresti che PostGIS ha funzioni geometriche migliori?
Alastair Aitchison,

@Alastair: prova a porre la domanda sulla mailing list di OSM-dev ( lists.openstreetmap.org/listinfo/dev ), ci sono molti Mapniker lì.
Igor Brejc,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.