Mapnik, SQL Server'dan uzamsal veriler oluşturabilir mi?


10

Bu çok basit bir soru - sadece herkes başarıyla SQL Server'da tutulan verilerden fayans oluşturmak için Mapnik kullandıklarını onaylamak olup olmadığını bilmek istiyorum. (Ve eğer öyleyse, bunun çalışması için ne yaptınız?) Lütfen bunun mümkün olduğunu kişisel olarak teyit etmedikçe cevap vermeyin ... sadece mümkün olması gerektiğini değil

İnsanların Mapnik'i SQL Server'dan bu gibi konularda veri oluşturmaları için önerdiklerini gördüm: SqlGeometry / SqlGeography için herhangi bir İyi Harita Oluşturma Motoru

Ayrıca, mapnik web sitesinde "tüm OGR formatlarının desteklendiği" belirtilmektedir: http://mapnik.org/faq/#data

Ancak, bir Mapnik katmanı için veri kaynağı olarak yerel SQL Server veritabanımla bağlantıyı tamamen kullanamadım. Bir test olarak, aşağıdaki gibi tek bir satır içi coğrafya çokgen çokgen seçmek için bir SQL Server'da bir SQL deyimi yürüten basit bir test OGR VRT kullanıyorum:

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

(Not da daha geleneksel SELECT * FROM Tablo sözdizimi ile denedim). OGRINFO bu VRT'yi başarıyla açar ve aşağıdakileri rapor eder:

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)

Ancak, aynı VRT dosyasını bir Mapnik katmanı için veri kaynağı olarak ayarlamak aşağıdaki hatayı bildirir:

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

Görünüşe göre OGR sürücüsünün SQL Server bağlantısını oluşturma biçimi ile Mapnik arasında bir sorun var, ama tam olarak nerede olduğunu bilmiyorum. Başka birinin de bunu başarıyla başarabildiğini gösteren herhangi bir kanıt veya örnek bulamadım ...

Yanıtlar:


2

OGR Sanal Format yardım sayfasında net bir genel bakış eksikliği var gibi görünüyor . "Dosya odaklı olmayan veri kaynaklarına erişim için bir çapa dosyası sağlayabilir " ifadesi, herhangi bir bağlantı türünün kullanılabileceğini ima ediyor gibi görünüyor, ancak durumun bu olduğundan emin değilim.

Orijinal işlevi, örneğin nokta özellikleri oluşturmak için bir veritabanı tablosundaki bir X ve Y sütununu birleştirerek, uzamsal olmayan kaynaklardan uzamsal verilerin oluşturulmasına izin vermekti.

Ancak, uzamsal bir veritabanının da bu amaçla kullanılamamasının bir nedeni yoktur, ancak MSSQL sürücüsü yerine standart bir ODBC bağlantısı kullanmalısınız .

Bunu yapmak için Windows'ta bir DSN (Veri Kaynağı Adı) oluşturun. Ardından sanal katman yapılandırmasında ODBC bağlantısını ve DSN'yi kullanın. DSN'niz OSVectorMap olarak adlandırılmışsa:

<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 ve Sanal Uzamsal Veriler sayfasında Sanal Katmanlar oluşturma hakkında birkaç ayrıntı daha vardır .

Bu arada harika bir blog yazısı . Python 3.x kullanımı hakkında çok fazla endişe etmem - neredeyse tüm yararlı GIS kütüphaneleri hala 2.x'te ve SQL Server Geometri ve Coğrafya türleri harika. Tek dezavantajı, SQL Server'ın maalesef açık kaynak dünyasında blog gönderileri ve diğer araçlarla entegrasyon açısından ikinci sınıf bir vatandaş gibi görünmesidir.


Yanıtınız için teşekkürler. VRT'de SQL Server'a ODBC bağlantısı ile de denedim ve maalesef bu aynı hatayla sonuçlanıyor. SQL Server'a OGR VRT bağlantısıyla ilgili bir sorun olduğunu düşünmüyorum, çünkü bu VRT'yi QGIS veya OGR2OGR'a yükleyebilir, SQL özelliklerine herhangi bir sorun olmadan erişebilirim. Dediğiniz gibi ne yazık ki pek açık kaynak kodlu kişi SQL Server :( Forunately kullandığını, MapServer, bu Mapnik OGR sürücüsünde bir sorun olduğunu düşünüyorum ama yok , SQL Server ile çalışma ben Mapnik en oluşturmayı tercih rağmen, ben çalışmak gerekecek, bu yüzden bunun yerine.
Alastair Aitchison

@alastair - Fark olmadığından emin misin? MSSQL ile hiçbir şey Mapnik aracılığıyla veritabanına ulaşamıyordu, ancak ODBC SQL Profiler ile sorguların yürütülmekte olduğunu gösterdi. Daha sonra gerçek verilerle deneyeceğim.
geographika

0

MSSQL Veritabanınızdan veri çekmek için Sanal Biçimi (GDAL) kullanabilirsiniz

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>

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

Postgres PostGIS'i önermekle birlikte (veritabanı tarafında daha iyi Geometri işlevlerine sahiptir)


MySQL -> MS SQL. Ben kendim düzeltmek istedim, ama "düzenleme gerekli en az 6 karakter" hakkında şikayet ediyor.
Igor Brejc

1
Fark ettiğinizi bilmiyorum, ancak sağladığınız blog bağlantısı soru yazarından ....
Kelso

@Mapperz - yanıtlamak için zaman ayırdığınız için teşekkür ederim, ancak lütfen sorumu tekrar okuyun - Mapnik'in SQL Server'a bağlanması için kişisel olarak onaylayan herkesten duymak istiyorum - sadece teorik olarak mümkün olmalı. Kelso'nun işaret ettiği gibi, bağlantı verdiğiniz blog makalesi benim tarafımdan yazılmıştır ve dahası, eğer gerçekten okuduysanız , OGR bağlantısını işe alma konusunda nasıl başarısız olduğumu açıkladığımı göreceksiniz (bu yüzden neden gönderiyorum bu soru)!. Ayrıca, PostGIS'in hangi temelde daha iyi geometri fonksiyonlarına sahip olduğunu söyleyebilirdiniz?
Alastair Aitchison

@Alastair: OSM-dev posta listesinde ( lists.openstreetmap.org/listinfo/dev ) soruyu sormayı deneyin , orada çok sayıda Mapniker var.
Igor Brejc
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.