क्या WMS / WFS का अनुरोध करने और छवि / PDF के रूप में सहेजने के लिए एक पायथन लीब है?


18

मैं सोच रहा हूं कि क्या वहाँ पाइथन ओपन-सोर्स जीआईएस लिबास है, जिसके पास दूसरे जीआईएस सर्वर (जैसे, जियोसेवर) से कॉल डब्ल्यूएमएस / डब्ल्यूएफएस का समर्थन करने के लिए एपीआई है और फिर चित्रों के माध्यम से प्रतिक्रिया डेटा (डब्ल्यूएमएस बासमाप और डब्ल्यूएफएस परत) को बचाएं।

कोई सिफारिशें?

किसी भी जानकारी के लिए धन्यवाद!

अद्यतन :

मैं जो करने की कोशिश कर रहा हूं वह एक मैप प्रिंटिंग सेवा है, OpenLayers को फ्रंट-एंड के रूप में और सर्वर के रूप में Django का उपयोग करके; क्लाइंट उपयोगकर्ता सीमा और परतें निर्धारित करते हैं और फिर प्रिंट अनुरोध (जो मापदंडों, अर्थात मानचित्र की सीमा, परतों के नाम) को सर्वर को भेजते हैं, तब सर्वर इस अनुरोध को लेता है और अनुरोध पैरामीटर का उपयोग करके फिर से WMS / WFS को कॉल करता है, बचाएं पीडीएफ के रूप में प्रतिक्रिया, इस पीडीएफ लिंक को ग्राहक को निर्यात करें।

मुश्किल हिस्सा यह है कि कैसे सर्वर WMS / WFS को कॉल करते हैं और इन प्रतिक्रियाओं को एक साथ जोड़ते हैं / ओवरले करते हैं (यानी, इन मैप्स / लेयर्स को एक साथ रखें, क्योंकि WMS आमतौर पर बेस मैप है, WFS फीचर लेयर्स की ओर इशारा करता है), आखिरकार इस संयुक्त ऑब्जेक्ट को सेव करें। छवि के रूप में।

वर्तमान उत्तरों में, urllib एक अच्छा लगता है, लेकिन मुझे यकीन नहीं है कि इन प्रतिक्रियाओं (WMS, WFS) को एक साथ कैसे जोड़ा जाए; OWSLib भी एक और अच्छा विकल्प लगता है, लेकिन यह इंगित करता है कि यह एक क्लाइंट प्रोग्रामिंग टूल है, मैं थोड़ा भ्रमित हूं कि क्या यह मेरे लिए उपयुक्त है ...

किसी भी अन्य जानकारी ???

सराहना!


मुझे नहीं लगता कि वहाँ है, लेकिन यह एक अच्छा विचार है!
ऑप्टिमाइज़प्राइम

बस ध्यान दिया अद्यतन प्रश्न WMS को पीडीएफ में संयोजित करने के बारे में मेरे प्रश्न से संबंधित है ।
MarkJ

जवाबों:


18

नहीं है OWSLib जो वास्तव में आपको क्या चाहिए प्रदान करना चाहिए।

OWSLib क्लाइंट प्रोग्रामिंग के लिए ओपन जियोस्पेशियल कंसोर्टियम (OGC) वेब सेवा (इसलिए OWS) इंटरफ़ेस मानकों और उनके संबंधित सामग्री मॉडल के साथ एक पायथन पैकेज है।

OWSLib कई OGC वेब सेवा इंटरफेस के लिए सेवा मेटाडेटा और रैपर तक पहुंचने के लिए एक आम एपीआई प्रदान करता है।

प्रलेखन और उदाहरण यहाँ । इस संदर्भ में क्लाइंट का अर्थ है कि यह डब्ल्यूएमएस / डब्ल्यूएफएस सर्वर के लिए एक क्लाइंट एप्लिकेशन है - यदि आवश्यक हो तो इसे सर्वर पर चलाया जा सकता है।

जब आप अपने उत्तर में अधिक विवरण जोड़ लेते हैं तो ऐसा लगता है कि MapFish प्रिंट एप्लिकेशन आपकी आवश्यकताओं के अनुरूप है। यह एक जावा एप्लिकेशन है जिसे ओपन लाइयर्स और टांके टाइल्स, डब्ल्यूएमएस, डब्ल्यूएफएस आदि के साथ एकीकृत किया जा सकता है और एक पीडीएफ का उत्पादन किया जा सकता है।

के रूप में यह एक कमांड लाइन आवेदन है यह पायथन आवरण के साथ हेरफेर किया जा सकता है। अधिक जानकारी के लिए निम्नलिखित लिंक देखें:

http://geographika.co.uk/mapfish-print-module-for-iis

https://github.com/amercader/MapFish-Print-IIS


1
OWSLib के लिए सूचक के लिए धन्यवाद, मैंने इसके बारे में कभी नहीं सुना।
user2856

7

आप सीधे WMS को कॉल करने और किसी फ़ाइल पर प्रतिक्रिया लिखने के लिए अजगर urllib लाइब्रेरी का उपयोग कर सकते हैं। इस उत्तर में urllib का उपयोग करने का एक सभ्य उदाहरण है । WMS के लिए URL को एक के साथ बदलें, जैसे http: //some.wms.service? Request = GetMap और VERSION = 1.1.1 और BBOX = 141.00, -29.00,141.80, -28.40 और SRH = EPSG: 4326 और LAYERS = LANDSAT_MOSAIC और WIDTH = 800-100- एचआईटीएस छवि / पीएनजी

तुम भी उपयोग कर सकते WMS के लिए GDAL पुस्तकालय (उपयोग कर सकते हैं http://www.gdal.org/frmt_wms.html ) और पहुँच WFS को OGR पुस्तकालय ( http://www.gdal.org/ogr/drv_wfs.html )

यदि आप WFS का चित्र बनाना चाहते हैं, तो आप jpg बनाने के लिए gdal.RasterizeLayer फ़ंक्शन का उपयोग कर सकते हैं। यहाँ एक उदाहरण है


2

ये रहा एक सरल उदाहरण। सर्वर की ओर:

def get_wfs():
    '''
    Get data from wfs server. Example url is:
    http://192.168.0.1:8080/geoserver/wfs?request=GetFeature&version=1.0.0&service=WFS&typeName=ChistaWS:Chista_new_POIs&maxfeatures=20&srsname=EPSG:4326&outputFormat=json
    We can add CQL filter like this:
    CQL_FILTER=name LIKE 'A%25'
    or
    CQL_FILTER=type=1913

    '''
    cql = ''
    if request.vars.cql:
        cql = urllib.quote_plus(request.vars.cql)
    req = 'GetFeature' # request
    version = '1.0.0'
    service = 'WFS'
    typeName = 'Test:Test_Places'
    maxfeatures = 200000
    if request.vars.mf:
        maxfeatures = request.vars.mf
    srsname = 'EPSG:4326'
    outputFormat = 'json'   
    # format_options = 'callback:getLayerFeatures_MY'
    wfs_url = '%s?request=%s&version=%s&service=%s&typeName=%s&maxfeatures=%s&srsname=%s&outputFormat=%s' % \
                (wfs_server, req, version, service, typeName,\
                 maxfeatures, srsname, outputFormat)
    if cql:
        # print cql
        wfs_url += '&CQL_FILTER=%s'%cql
    # print wfs_url
    try:
        jsonp = urllib2.urlopen(wfs_url).read()  # Get the raw server data
    except urllib2.HTTPError:
        return 'WFS Server <a target="_new" href="%s">%s</a> is down!' % (wfs_server, wfs_server)
    # return jsonp
    # try:
        # apijson = jsonp[ jsonp.index("(") + 1 : jsonp.rindex(")") ]
    # except ValueError:
    apijson = jsonp
    try:
        data = sj.loads(apijson)
    except sj.JSONDecodeError:
        return 'Can not parse data. No JSON! here is the data: <pre>%s</pre>' % apijson
    # return data
    features =[{
            'name':i['properties']['name'],
            'type':i['properties']['type'],
            'coordinates':i['geometry']['coordinates'],
            } for i in data['features']]
    # features =[i for i in data['features']]
    # return dict(features=features)
    return {'result':features, 'length':len(features)}

और ग्राहक पक्ष में jquery का उपयोग कर:

$.ajax({
dataType : 'json',
url: wfsurl,
success  : function (response) {
if (response.length>0){
$('#'+subitem).empty();
for (var i = 0, len = response.length; i < len; i++) {
name = response.result[i].name;
lng = response.result[i].coordinates[0];
lat = response.result[i].coordinates[1];
// console.log(name, lng, lat)
html = '<li class="li-subitem"><a onclick="lazyview($(this));" lat="'+lat+'" lng="'+lng+'">'+name+'</a></li>';
$('#'+subitem).append(html);
}}
else{
$('#'+subitem).toggle(100);
}}});

0

आप WMS / WFS सर्वर से डेटा लाने और Java ग्राफिक्स ऑब्जेक्ट को रेंडर करने के लिए जियोटूल का उपयोग कर सकते हैं । तब iText जैसी कोई चीज़ पीडीएफ में बदल सकती है।

यदि आपको वास्तव में पायथन का उपयोग करना है तो मुझे उम्मीद है कि आप इसे प्रबंधित करने के लिए एक रैपर का उपयोग कर सकते हैं।


1
धन्यवाद। लेकिन मैं सिर्फ अजगर का उपयोग करना चाहता हूं ...
साइमन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.