Mapnik สามารถแสดงผลข้อมูลเชิงพื้นที่จาก SQL Server ได้หรือไม่


10

นี่เป็นคำถามง่าย ๆ - ฉันแค่อยากรู้ว่าใครสามารถยืนยันได้ว่าพวกเขาใช้ Mapnik ในการเรนเดอร์ไทล์โดยตรงจากข้อมูลที่เก็บไว้ใน SQL Server (และถ้าเป็นเช่นนั้นคุณทำอะไรเพื่อให้มันใช้งานได้) โปรดอย่าตอบกลับจนกว่าคุณจะได้รับการยืนยันเป็นการส่วนตัวว่าเป็นไปได้ ... ไม่ใช่แค่ว่ามันควรจะเป็นไปได้

ฉันเคยเห็นผู้คนแนะนำ Mapnik สำหรับการแสดงข้อมูลจาก SQL Server ในเธรดเช่นนี้: เอ็นจินการเรนเดอร์แผนที่ที่ดีสำหรับ SqlGeometry / SqlGeography

นอกจากนี้เว็บไซต์ mapnik ระบุว่า "รองรับรูปแบบ OGR ทั้งหมด": http://mapnik.org/faq/#data

อย่างไรก็ตามฉันไม่สามารถใช้การเชื่อมต่อกับฐานข้อมูล SQL Server ในพื้นที่ของฉันเป็นแหล่งข้อมูลสำหรับเลเยอร์ Mapnik ได้ เป็นการทดสอบฉันใช้ OGR VRT ทดสอบตรงไปตรงมาซึ่งดำเนินการคำสั่ง SQL บน SQL Server เพื่อเลือกรูปหลายเหลี่ยมแบบอินไลน์ภูมิศาสตร์เดียวกับข้อความที่รู้จักกันดีดังต่อไปนี้:

<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 แต่ฉันไม่รู้ว่ามันอยู่ตรงไหน ฉันยังไม่พบหลักฐานหรือตัวอย่างใด ๆ ที่จะชี้ให้เห็นว่าใครก็ตามที่สามารถประสบความสำเร็จในการบรรลุเป้าหมายนี้ ...

คำตอบ:


2

ดูเหมือนว่าจะมีการขาดภาพรวมที่ชัดเจนในรูปแบบเสมือนจริง OGRหน้าความช่วยเหลือ วลีที่สามารถ"มอบไฟล์สมอสำหรับการเข้าถึงแหล่งข้อมูลที่ไม่ใช่ไฟล์"ดูเหมือนว่าบ่งบอกถึงประเภทการเชื่อมต่อใด ๆ ที่สามารถใช้งานได้ แต่ฉันไม่แน่ใจว่าเป็นกรณีนี้

ฟังก์ชั่นดั้งเดิมของมันคือการอนุญาตให้สร้างข้อมูลเชิงพื้นที่จากแหล่งที่ไม่ใช่เชิงพื้นที่ตัวอย่างเช่นโดยการรวมคอลัมน์ X และ Y ในตารางฐานข้อมูลเพื่อสร้างคุณสมบัติจุด

อย่างไรก็ตามไม่มีเหตุผลที่ฐานข้อมูลเชิงพื้นที่ไม่สามารถใช้สำหรับวัตถุประสงค์นี้ได้ แต่คุณควรใช้การเชื่อมต่อODBCมาตรฐานแทนที่จะใช้ไดรเวอร์MSSQL

เมื่อต้องการทำสิ่งนี้ให้สร้าง DSN (ชื่อแหล่งข้อมูล) ใน Windows จากนั้นใช้การเชื่อมต่อ 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และเสมือนจริงข้อมูลเชิงพื้นที่หน้า

โพสต์บล็อกที่ยอดเยี่ยมโดยวิธีการ ฉันไม่ต้องกังวลเกี่ยวกับการใช้ Python 3.x มากนัก - ห้องสมุด GIS ที่มีประโยชน์เกือบทั้งหมดยังอยู่ใน 2.x และ SQL Server Geometry และ Geography types นั้นยอดเยี่ยม ข้อเสียเพียงอย่างเดียวคือ SQL Server โชคไม่ดีที่ดูเหมือนว่าเป็นพลเมืองชั้นสองในโลกโอเพนซอร์สในแง่ของการโพสต์บล็อกและการทำงานร่วมกับเครื่องมืออื่น ๆ


ขอบคุณสำหรับการตอบกลับ. ฉันได้ลองกับการเชื่อมต่อ ODBC กับ SQL Server ใน VRT ด้วยและน่าเสียดายที่ผลลัพธ์นี้มีข้อผิดพลาดเดียวกัน ฉันไม่คิดว่ามันเป็นปัญหากับการเชื่อมต่อ OGR VRT กับ SQL Server เช่นนี้เพราะฉันสามารถโหลด VRT นี้ใน QGIS หรือ OGR2OGR พูดและเข้าถึงคุณลักษณะ SQL ได้โดยไม่มีปัญหา ฉันคิดว่ามันเป็นปัญหากับคนขับ Mapnik OGR แต่ตามที่คุณบอกว่าน่าเสียดายที่ไม่ว่าคน OpenSource จำนวนมากใช้ SQL Server :( Forunately, MapServer ไม่ทำงานกับ SQL Server ดังนั้นแม้ว่าฉันชอบการแสดงผล Mapnik ของฉันจะต้องทำงานร่วมกับ นั่นแทน
Alastair Aitchison

@alastair - คุณแน่ใจหรือว่าไม่มีความแตกต่าง? ด้วย MSSQL ไม่มีสิ่งใดเข้าถึงฐานข้อมูลผ่าน Mapnik แต่ด้วย ODBC SQL Profiler แสดงว่ามีการดำเนินการค้นหา ฉันจะลองกับข้อมูลจริงในภายหลัง
geographika

0

คุณสามารถใช้Virtual Format (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 (มีฟังก์ชันเรขาคณิตที่ดีกว่าในด้านฐานข้อมูล)


MySQL -> MS SQL ฉันต้องการแก้ไขด้วยตนเอง แต่มันบ่นเกี่ยวกับ "อย่างน้อย 6 ตัวอักษรที่จำเป็นในการแก้ไข"
Igor Brejc

1
ผมไม่ทราบว่าคุณรู้ แต่การเชื่อมโยงบล็อกที่คุณให้มาจากผู้เขียนคำถาม ....
เคล

@Mapperz - ขอบคุณที่สละเวลาในการตอบกลับ แต่โปรดอ่านคำถามของฉันอีกครั้ง - ฉันต้องการได้ยินจากใครก็ตามที่ยืนยันเป็นการส่วนตัวว่าพวกเขามี Mapnik เพื่อเชื่อมต่อกับ SQL Server - ไม่ใช่แค่ในทางทฤษฎี ตามที่เคลโซระบุไว้บทความบล็อกที่คุณเชื่อมโยงไปนั้นถูกเขียนขึ้นโดยฉันและมีอะไรเพิ่มเติมถ้าคุณอ่านจริง ๆ แล้วคุณจะเห็นว่าฉันอธิบายว่าฉันไม่ประสบความสำเร็จในการเชื่อมต่อ OGR อย่างไร คำถามนี้)!. นอกจากนี้บนพื้นฐานที่คุณจะพูดว่า PostGIS มีฟังก์ชั่นเรขาคณิตที่ดีกว่า
Alastair Aitchison

@Alastair: ลองถามคำถามในรายการส่งเมล OSM-dev ( lists.openstreetmap.org/listinfo/dev ) มี Mapnikers อยู่มากมาย
Igor Brejc
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.