Bisakah Mapnik membuat data spasial dari SQL Server?

10

Ini adalah pertanyaan yang sangat sederhana - Saya hanya ingin tahu apakah ada yang bisa mengkonfirmasi bahwa mereka telah berhasil menggunakan Mapnik untuk membuat ubin langsung dari data yang disimpan di SQL Server. (Dan, jika demikian, apa yang Anda lakukan untuk membuatnya berfungsi?) Tolong jangan balas kecuali Anda secara pribadi mengkonfirmasi bahwa ini mungkin ... bukan hanya bahwa itu harus mungkin

Saya telah melihat orang merekomendasikan Mapnik untuk merender data dari SQL Server dalam utas seperti ini: Apa pun Mesin Pencetak Peta yang Baik untuk SqlGeometry / SqlGeography

Juga, situs web mapnik menyatakan bahwa "semua format OGR didukung": http://mapnik.org/faq/#data

Namun, saya benar-benar tidak dapat menggunakan koneksi ke database SQL Server lokal saya sebagai sumber data untuk lapisan Mapnik. Sebagai pengujian, saya menggunakan tes langsung OGR VRT, yang mengeksekusi pernyataan SQL pada SQL Server untuk memilih satu geografi sebaris Poligon sebagai Teks Yang Dikenal, sebagai berikut:

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

(Catatan Saya juga sudah mencoba ini dengan sintaks SELECT * FROM Table yang lebih konvensional). OGRINFO berhasil membuka VRT ini dan melaporkan yang berikut:

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)

Namun, pengaturan file VRT yang sama ini sebagai sumber data untuk lapisan Mapnik melaporkan kesalahan berikut:

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

Tampaknya ada beberapa masalah antara cara driver OGR membuat koneksi SQL Server dan Mapnik, tapi saya tidak tahu persis di mana itu. Saya belum menemukan bukti atau contoh yang menunjukkan bahwa orang lain telah berhasil mencapai ini ...

Alastair Aitchison
sumber

Jawaban:

2

Tampaknya tidak ada gambaran yang jelas tentang halaman bantuan Format Virtual OGR . Ungkapan itu dapat "menyediakan file jangkar untuk akses ke sumber data berorientasi non-file" tampaknya menyiratkan jenis koneksi apa pun dapat digunakan, tapi saya tidak yakin ini masalahnya.

Fungsi aslinya adalah untuk memungkinkan data spasial dibuat dari sumber non-spasial, misalnya dengan menggabungkan kolom X dan Y dalam tabel database untuk membuat fitur titik.

Namun tidak ada alasan mengapa database spasial juga tidak dapat digunakan untuk tujuan ini, tetapi Anda kemudian harus menggunakan koneksi ODBC standar daripada driver MSSQL .

Untuk melakukan ini, buat DSN (Nama Sumber Data) di Windows. Kemudian gunakan koneksi ODBC dan DSN dalam konfigurasi lapisan virtual. Jadi jika DSN Anda bernama 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>

Ada beberapa detail lebih lanjut tentang pembuatan Lapisan Virtual di wiki MapServer dan halaman Data Spasial Virtual .

Besar posting blog dengan cara. Saya tidak akan terlalu khawatir tentang penggunaan Python 3.x - hampir semua pustaka GIS yang berguna masih dalam 2.x Dan tipe SQL Server Geometry dan Geography sangat bagus. Satu-satunya kelemahan adalah bahwa SQL Server sayangnya tampaknya warga negara kelas dua di dunia opensource dalam hal posting blog, dan integrasi dengan alat-alat lain.

geografi
sumber
Terima kasih balasannya. Saya telah mencoba dengan koneksi ODBC ke SQL Server di VRT juga, dan sayangnya ini menghasilkan kesalahan yang sama. Saya tidak berpikir itu masalah dengan koneksi OGR VRT ke SQL Server, karena saya dapat memuat VRT ini dalam QGIS atau OGR2OGR, katakanlah, dan akses fitur SQL tanpa masalah. Saya pikir itu masalah dengan driver Mapnik OGR tetapi, seperti yang Anda katakan, sayangnya tidak banyak orang OpenSource menggunakan SQL Server :( Forunately, MapServer melakukan pekerjaan dengan SQL Server sehingga, meskipun saya lebih suka render Mapnik, saya harus bekerja dengan itu sebaliknya
Alastair Aitchison
@alastair - Apakah Anda yakin tidak ada perbedaan? Dengan MSSQL tidak ada yang mencapai database melalui Mapnik, tetapi dengan ODBC SQL Profiler menunjukkan kueri sedang dieksekusi. Saya akan coba dengan data nyata nanti.
geografi
0

Anda dapat menggunakan Format Virtual (GDAL) untuk menarik data dari Database MSSQL Anda

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>

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

Meskipun merekomendasikan Postgres PostGIS (memiliki fungsi Geometri yang lebih baik di sisi basis data)

Mapperz
sumber
MySQL -> MS SQL. Saya ingin memperbaikinya sendiri, tetapi mengeluh tentang "setidaknya 6 karakter yang diperlukan dalam pengeditan".
Igor Brejc
1
Saya tidak tahu apakah Anda sadar, tetapi tautan blog yang Anda berikan adalah dari penulis pertanyaan ....
Kelso
@Mapperz - terima kasih telah meluangkan waktu untuk menjawab, tapi tolong baca lagi pertanyaan saya - Saya ingin mendengar dari siapa pun yang secara pribadi mengkonfirmasi bahwa mereka telah memiliki Mapnik untuk terhubung ke SQL Server - bukan hanya karena secara teori seharusnya dimungkinkan. Seperti yang ditunjukkan Kelso, artikel blog yang Anda tautkan ditulis oleh saya dan terlebih lagi, jika Anda benar-benar membacanya, Anda akan melihat bahwa saya menggambarkan bagaimana saya tidak berhasil membuat koneksi OGR berfungsi (oleh karena itu mengapa saya memposting pertanyaan ini)!. Juga, atas dasar apa menurut Anda PostGIS memiliki fungsi geometri yang lebih baik?
Alastair Aitchison
@Alastair: coba ajukan pertanyaan di mailing list OSM-dev ( lists.openstreetmap.org/listinfo/dev ), ada banyak Mapnikers di sana.
Igor Brejc