क्या Mapnik SQL सर्वर से स्थानिक डेटा प्रस्तुत कर सकता है?


10

यह एक बहुत ही सरल सवाल है - मैं सिर्फ यह जानना चाहता हूं कि क्या कोई यह पुष्टि कर सकता है कि उन्होंने SQL सर्वर में रखे डेटा से सीधे टाइल रेंडर करने के लिए सफलतापूर्वक मैपनिक का उपयोग किया है। (और, यदि ऐसा है, तो आपने इसे काम करने के लिए क्या किया?) कृपया जवाब न दें जब तक कि आपने व्यक्तिगत रूप से पुष्टि नहीं की है कि यह संभव है ... बस यह नहीं कि यह संभव होना चाहिए

मैंने देखा है कि लोग Mapnik को SQL सर्वर से थ्रेड्स में डेटा रेंडर करने के लिए सुझाते हैं जैसे कि: SqlGeometry / SqlGeography के लिए कोई भी अच्छा मैप रेंडरिंग इंजन

इसके अलावा, Mapnik वेबसाइट बताती है कि "सभी OGR प्रारूप समर्थित हैं": http://mapnik.org/faq/#data

हालाँकि, मैं अपने स्थानीय SQL सर्वर डेटाबेस के लिए एक कनेक्शन का उपयोग करने में पूरी तरह से असमर्थ रहा हूँ एक Mapnik परत के लिए एक डेटा स्रोत। एक परीक्षण के रूप में, मैं एक सीधा परीक्षण OGR VRT का उपयोग कर रहा हूं, जो एक SQL इनलाइन पर SQL स्टेटमेंट को एक इनलाइन भूगोल बहुभुज को अच्छी तरह से ज्ञात पाठ के रूप में चुनने के लिए निष्पादित करता है, जो निम्नानुसार है:

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

(नोट मैंने इसे अधिक पारंपरिक चयन * टेबल सिंटैक्स से भी आज़माया है)। 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 सर्वर कनेक्शन और Mapnik बनाने के तरीके के बीच कुछ समस्या है, लेकिन मुझे नहीं पता कि यह कहाँ है। मुझे अभी तक कोई ऐसा सबूत या उदाहरण नहीं मिला है जिससे यह पता चले कि किसी और को भी इसे हासिल करने में सफलता मिली है ...

जवाबों:


2

ऐसा लगता है कि OGR वर्चुअल फॉर्मेट हेल्प पेज पर एक स्पष्ट अवलोकन की कमी है । यह वाक्यांश "गैर-फाइल उन्मुख डेटा स्रोतों तक पहुंच के लिए एक एंकर फ़ाइल प्रदान कर सकता है " लगता है कि किसी भी प्रकार के कनेक्शन का उपयोग किया जा सकता है, लेकिन मुझे यकीन नहीं है कि यह मामला है।

इसका मूल कार्य गैर-स्थानिक स्रोतों से स्थानिक डेटा बनाने की अनुमति देना था, उदाहरण के लिए बिंदु सुविधाओं को बनाने के लिए डेटाबेस तालिका में X और Y कॉलम को मिलाकर।

हालाँकि, कोई कारण नहीं है कि एक स्थानिक डेटाबेस का उपयोग इस उद्देश्य के लिए भी नहीं किया जा सकता है, लेकिन फिर आपको MSSQL ड्राइवर के बजाय एक मानक ODBC कनेक्शन का उपयोग करना चाहिए ।

ऐसा करने के लिए Windows में DSN (डेटा स्रोत का नाम) बनाएं। फिर वर्चुअल लेयर कॉन्फ़िगरेशन में 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 wiki और Virtual Spatial Data पेज में Virtual Layers के निर्माण पर कुछ और विवरण हैं ।

वैसे बढ़िया ब्लॉग पोस्ट । मैं अजगर 3.x का उपयोग करने के बारे में बहुत ज्यादा चिंता नहीं करूंगा - लगभग सभी उपयोगी जीआईएस लाइब्रेरी अभी भी 2.x में हैं और SQL सर्वर ज्यामिति और भूगोल प्रकार महान हैं। केवल डाउनसाइड्स यह है कि SQL सर्वर दुर्भाग्य से ब्लॉग पोस्ट के संदर्भ में ओपनसोर्स की दुनिया में एक द्वितीय श्रेणी का नागरिक लगता है, और अन्य उपकरणों के साथ एकीकरण करता है।


उत्तर के लिए धन्यवाद। मैंने वीआरटी में भी SQL सर्वर के लिए ओडीबीसी कनेक्शन के साथ प्रयास किया है, और दुर्भाग्य से उसी त्रुटि में यह परिणाम है। मुझे नहीं लगता कि यह ओजीआर वीआरटी कनेक्शन के साथ एसक्यूएल सर्वर के लिए एक समस्या है, क्योंकि मैं इस वीआरटी को क्यूजीआईएस या ओजीआर 2 ओजीआर में लोड कर सकता हूं, कह सकता हूं और बिना किसी समस्या के एसक्यूएल सुविधाओं का उपयोग कर सकता हूं। मुझे लगता है कि यह Mapnik OGR ड्राइवर के साथ एक समस्या है लेकिन, जैसा कि आप कहते हैं, दुर्भाग्य से ऐसा नहीं है कि बहुत से OpenSource लोग SQL Server का उपयोग करते हैं :( सौभाग्य से, MapServer SQL सर्वर के साथ काम करता है, हालांकि मैं Mapnik के रेंडरिंग को पसंद करता हूं, मुझे इसके साथ काम करना होगा। इसके बजाय।
एलेस्टेयर एचिसन

@alastair - क्या आप सुनिश्चित हैं कि कोई अंतर नहीं है? MSSQL के साथ मेपनिक के माध्यम से डेटाबेस तक कुछ भी नहीं पहुंच रहा था, लेकिन ODBC SQL Profiler ने दिखाया कि क्वेरीज़ निष्पादित की जा रही हैं। मैं वास्तविक डेटा के साथ बाद में कोशिश करूँगा।
जियोग्राफिका

0

आप अपने MSSQL डेटाबेस से डेटा खींचने के लिए वर्चुअल फॉर्मेट (GDAL) का उपयोग कर सकते हैं

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/

हालांकि PostGIS PostGIS की अनुशंसा करें (डेटाबेस पक्ष पर बेहतर ज्यामिति कार्य है)


MySQL -> MS SQL। मैं इसे स्वयं सही करना चाहता था, लेकिन यह "संपादन में कम से कम 6 वर्णों की आवश्यकता" के बारे में शिकायत करता है।
इगोर ब्रेजक

1
मुझे नहीं पता कि आपको एहसास हुआ है, लेकिन आपके द्वारा प्रदान किया गया ब्लॉग लिंक प्रश्न लेखक से है ....
केल्सो

@Mapperz - जवाब देने के लिए समय निकालने के लिए धन्यवाद, लेकिन कृपया मेरे प्रश्न को फिर से पढ़ें - मैं किसी ऐसे व्यक्ति से सुनना चाहता हूं जो व्यक्तिगत रूप से पुष्टि करता है कि उन्हें Mapnik को SQL सर्वर से कनेक्ट करने के लिए मिला है - न केवल यह कि यह सैद्धांतिक रूप से संभव होना चाहिए। जैसा कि केल्सो बताते हैं, आपके द्वारा लिंक किया गया ब्लॉग लेख मेरे द्वारा लिखा गया है और क्या अधिक है, यदि आप वास्तव में इसे पढ़ते हैं, तो आप देखेंगे कि मैं वर्णन करता हूं कि मैं काम करने के लिए ओजीआर कनेक्शन प्राप्त करने में असफल कैसे रहा (इसलिए मैं क्यों पोस्ट कर रहा हूं यह प्रश्न)!। इसके अलावा, आप किस आधार पर कहेंगे कि PostGIS के पास बेहतर ज्यामिति कार्य हैं?
एलेस्टेयर एचिसन

@ ऑलस्टेयर: ओएसएम-देव मेलिंग लिस्ट ( lists.openstreetmap.org/listinfo/dev ) पर सवाल पूछने की कोशिश करें , वहां बहुत सारे Mapnikers हैं।
इगोर ब्रेजक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.