मैं आधार ओएसएम और जियोसर्वर डब्ल्यूएमएस परतों के साथ ओपनलेयर कैसे प्रिंट कर सकता हूं?


9

उपयोगकर्ता के कुछ लेयर खोलने के बाद मेरा एक नक्शा है जिसे मैं प्रिंट करना चाहता हूं। लेयर्स जियोसर्वर wms हैं और बेस लेयर OSM है।

मुझे पता है कि जियोसेवर में प्रिंटिंग मॉड्यूल है (जो स्थापित है और काम कर रहा है क्योंकि मुझे जियोसर्वर / पीडीएफ / जे.जेन्सन से उत्तर मिलता है? Var = PrintCapabilities

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

मैंने जियोएक्स्ट उदाहरण (मैपफिश) को देखा है लेकिन इससे मुझे समझने में मदद नहीं मिली।

अद्यतन 1: मैंने कोड द्वारा निम्नलिखित URL तैयार किया है:

http://77.235.53.170/geoserver/pdf/print.pdf?spec={%22units%22:%22degrees%22,%22srs%22:%22EPSG:4326%22,%22layout%22:%22A4%22,%22dpi%22:%22300%22,%22mapTitle%22:%22This%20is%20the%20map%20title%22,%22comment%22:%22This%20is%20the%20map%20comment%22,%22resourcesUrl%22:%20%22http://77.235.53.170/img%22,%22layers%22:[{%22baseURL%22:%22http://77.235.53.170/geoserver/Lehavim/wms%22,%22opacity%22:1,%22singleTile%22:true,%22type%22:%22WMS%22,%22layers%22:[%22%D7%A7%D7%95%20%D7%9E%D7%99%D7%9D%22],%22format%22:%22image/jpeg%22,%22styles%22:[%22%22]}],%22pages%22:[{%22center%22:[3875254.1134954,3680894.557955],%22scale%22:32000,%22rotation%22:0}]}

और मुझे खाली पीडीएफ मिल रही है (केवल शीर्षक के साथ) ... क्या गलत हो सकता है?


1
आपको "ऑनलाइन प्रिंटिंग टूल" की आवश्यकता है , या "ऑफ़लाइन पीडीएफ जनरेटर" बेहतर है? (अच्छे नियंत्रण और गुणवत्ता आश्वासन के लिए केवल पीडीएफ सुरक्षित है)
पीटर क्रूस

कृपया पहले, dev.openlayers.org/sandbox/camptocamp/canvas/openlayers/... मैं आशा है कि यह मदद मिलेगी।
फरहत अब्बास

मैं ठीक से समझ नहीं पा रहा हूं कि आप क्या हासिल करना चाहते हैं। क्या आप चाहते हैं कि उपयोगकर्ता (वेब ​​में) प्रिंट करने में सक्षम हो या क्या आप ऑस्म लेयर्स + जियोसर्वर wms से एक नक्शा (पीडीएफ चलो कहना चाहते हैं) प्रिंट करना चाहते हैं?
tudorbarascu

@Alophind: आपको उन सवालों के जवाब देने की ज़रूरत है जो ppl ने टिप्पणियों में पूछे हैं। यह उन उत्तरों को निर्धारित करेगा जो आपको मिलेंगे।
देवदत्त तेंगशे

मैं दूर था, @PeterKrauss - मैं किसी भी दिए गए ब्राउज़र पर मानचित्र के अनुभाग को प्रिंट करने की क्षमता चाहता हूं, पीडीएफ भी अच्छा है।
अलॉफिंद

जवाबों:


7

जियोसेवर प्रिंट प्रक्रिया में दो चरण शामिल हैं।

सबसे पहले सर्वर की तरफ , आपको अपनी yaml फाइल को कॉन्फ़िगर करना होगा, जिसे config.yaml कहा जाता है। MapFish प्रिंट मॉड्यूल प्रलेखन पृष्ठ पर विस्तृत प्रलेखन के माध्यम से जाओ ।

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

var layers = "";
for (var i = 0; i < map.layers.length; i++) {
    if(map.layers[i].visibility == true){
        //get a string of visible layers
        layers = layers + map.layers[i].name + ','
    }
}
//remove the trailing ','
layers = layers.slice(0, -1);

अब आपको इसे अपने प्रिंट यूआरएल में पास करना होगा। जैसे

var maptitle= "This is the map title";
var mapcomment= "This is the map comment"
var printurl = "http://host:post/geoserver/pdf/print.pdf?spec={"units":"degrees","srs":"EPSG:4326","layout":"A4","dpi":"300","maptitle":"This is the map title","comment":"This is the map comment","resourcesUrl": "http://host:port/img","layers":[{"baseURL":"http://host:port/geoserver/workspace/wms","opacity":1,"singleTile":true,"type":"WMS","layers":["' + layers + '"],"format":"image/jpeg","styles":[""]}],"pages":[{"center":[' + map.getCenter().lon + ',' + map.getCenter().lat + '],"scale":' + getMapScale(Math.ceil(map.getScale())) + ',"rotation":0}]}'

बेशक आपको URL में प्रासंगिक परिवर्तन करने होंगे। अगला इस URL को अपने प्रिंट बटन पर असाइन करें और फिर एक क्लिक फ़ंक्शन को व्यावहारिक रूप से कॉल करें।

$("#btnprint").attr("href", printUrl);
$('#btnprint')[0].click();

और हो गया!!!


Im त्रुटि हो रही है: पीडीएफ जनरेट करते समय त्रुटि: org.mapfish.print.JsonMissingException: विशेषता [spec.mapTitle] अनुपलब्ध
Alophind

मैंने URL और अपवाद के लिए उदाहरण जोड़ा है, क्या आप सुझाव दे सकते हैं कि मैं क्या गलत कर रहा हूँ?
अल्फाइंड

1
GetMapScale फ़ंक्शन की सामग्री क्या है?
अल्फाइंड

1
क्या यह OSM या गूगल बेस लेयर के साथ काम करता है?
अलॉफिंद

1
@Alophind मैंने Google मानचित्र परत के लिए इसकी जाँच नहीं की है, क्योंकि AFAIK Google मानचित्र के अलावा API के माध्यम से Google मानचित्र परत का उपयोग करना अवैध है। हालाँकि इस विशिष्ट वेबसाइट में OSM परत नहीं है, लेकिन मैंने मुद्रण सुविधा के साथ अन्य अनुप्रयोगों में OSM का उपयोग किया है।
द एलाट्रे

1

यदि आप Chrome उपयोगकर्ता हैं, तो एक त्वरित और सरल तरीका Google क्लाउड प्रिंट है , लेकिन इसे पूरे वेब पेज को प्रिंट करने के लिए डिज़ाइन किया गया है, लेकिन आप पूर्ण स्क्रीन डिस्प्ले का उपयोग कर सकते हैं और प्रिंट कर सकते हैं।

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


1
मुझे सभी हालिया ब्राउज़रों का समर्थन करने की आवश्यकता है, न केवल क्रोम
एलोफिंड

1

मुझे लगता है कि आप जियोसर्वर और मैपफिश प्लगइन के साथ सही रास्ते पर जा रहे हैं। यह वही है जो मैं अपने WMS और OSM बेसलियर्स के लिए प्रिंटिंग करने के लिए उपयोग करता हूं। यदि आप इस विधि का उपयोग करने जा रहे हैं, तो एक बात ध्यान रखें। यदि आप चाहते हैं कि आपके मुद्रित नक्शे सही ढंग से स्कैन किए जाएं, तो आप सीधे साइट से ओएसएम का उपयोग नहीं कर पाएंगे क्योंकि यह प्रोजेक्शन सही तरीके से नहीं है। आपको डेटा को डेटाबेस में लोड करना होगा और एक अलग एसआरएस का उपयोग करना होगा।

यह कहने के बाद, मैं आपको एक त्वरित तरीका बताऊँगा कि कैसे जियोसर्वर में मैपफिश प्लगइन के साथ काम करने के लिए मुद्रण प्राप्त करें।

सबसे पहले आपको मैपफिश प्लगइन डाउनलोड करना होगा और इसे अपने जियोसर इंस्टॉलेशन में इंस्टॉल करना होगा। जब मैंने पहली बार ऐसा किया था कि इस कदम को प्रिंट करने के लिए ट्यूटोरियल या डेमो में कहीं भी प्रलेखित नहीं किया गया था, तो इससे पहले कि मुझे लगा कि कुछ समय हो गया है। इसके अलावा प्लगइन खोजना कुछ कठिन था।

यह पृष्ठ जियोसर्वर से निर्देश दिखाता है कि प्लगइन कैसे स्थापित करें और इसका उपयोग कैसे करें। मूल रूप से यह टूट जाता है:

  • इस पृष्ठ पर जाएं और geoserver-2.1-SNAPSHOT-printing-plugin.zip फ़ाइल डाउनलोड करें।
  • जिप्सर वेबैप में / WEB-INF / lib / में ज़िप संग्रह की सामग्री को निकालें
  • जियोसेवर को फिर से शुरू करें

ठीक है कि अब प्लगइन स्थापित हो गया है, आपको उस प्लगइन को कॉन्फ़िगर करने की आवश्यकता होगी जो config.yaml फ़ाइल को संशोधित करके किया जाता है जो 'thelastray' ऊपर दिए गए उनके उत्तर के बारे में बात करता है। फ़ाइल को तब बनाया जाना चाहिए जब GeoServer को पुनः आरंभ किया जाए और निम्न स्थान पर पाया जाए:

GEOSERVER_DATA_DIR / प्रिंटिंग / config.yaml

इसके लिए बहुत सारे विकल्प हैं, इसलिए आपको यहां Mapfish वेबसाइट पर प्रलेखन से गुजरना होगा

अगला कदम एक एप्लिकेशन बनाना है जो प्रिंटिंग करने के लिए इस प्लगइन का उपयोग करता है। जियोक्स्ट का उपयोग करके प्रिंटिंग के लिए इस सेटअप का उपयोग करने वाले एप्लिकेशन का एक उदाहरण यहां पाया जा सकता है । यदि आप इस पृष्ठ पर कुछ और उदाहरण देखना चाहते हैं ।

उम्मीद है कि आप शुरू कर देंगे।


त्वरित बंद / विषय प्रश्न, अपने डेटाबेस से OSM प्रिंट करते समय, आपको OSM शैली से मिलान करने के लिए अपने WMS सर्वर में शैली कैसे मिली? (या आपने अलग-अलग शैली और इसके 100% मैच नहीं किए)
अल्फिंद

मैंने अपना खुद का स्टाइल बनाया। मैंने इसे OSM की तुलना में Google मानचित्र शैली में बंद कर दिया है।
बजे

2
क्या आप कृपया इसे साझा कर सकते हैं?
एल्फिंड


0

"पेपर में मैप" सरल से अधिक हो सकता है "पृष्ठ पर छवि फिट करें" ... कार्टोग्राफी का इतिहास कागज में लिखा गया था, और आज भी कुछ कार्टोग्राफिक उत्पाद अभी भी कागज की मांग करते हैं।

आज, कागज पीडीएफ है - EPUB या "ब्राउज़र द्वारा प्रिंट" को भूल जाओ , वे प्रतीक्षा कर रहे हैं मानक, CSS3, आदि, भविष्य के लिए हैं ... और अच्छी गुणवत्ता (कागज) के कार्टोग्राफिक उत्पादों को XSLT-FO या CSS2 की आवश्यकता होती है । (X) HTML + CSS2 के साथ आप अच्छे पीडीएफ का उत्पादन कर सकते हैं (!) ... वह HTML "ब्राउज़र के लिए" नहीं है, एक "पीडीएफ पीढ़ी" टूल के लिए है (जो पीडीएफ ऑन-फ्लाई या ऑफलाइन उत्पन्न करता है)।

केवल पेशेवर "उपकरण उत्पन्न करने के लिए अच्छा पीडीएफ है कि मैं के बारे में पता के साथ HTML + सीएसएस 2", है PrinceXML : मैं "पर मक्खी छवियों" (एसवीजी, JPG और PNG) से के साथ परीक्षण किया WFS और WMS प्रोटोकॉल, और साथ OpenLayers , और यह इतना अच्छा काम करता है (!)।


0

मैंने अभी यह किया है:

डाउनलोड किया गया html2canvas.js ( https://github.com/niklasvh/html2canvas/releases )

डाउनलोड किया गया html2canvas -xy.php ( https://github.com/adjdred/html2canvas-proxy-php )

मेरे सर्वर पर .js टैग में और मेरे जेएस में दोनों को स्थापित किया:

html2canvas(document.getElementById("map"), {
    proxy: "../lib/html2canvasproxy.php",
    logging : true,
    onrendered: function (canvas) {
        var img = canvas.toDataURL("image/png");
        window.open(img);
    }
});

मुझे वर्तमान मानचित्र का एक .png देता है - जो मैं अपने पीसी पर एक सेकंड से भी कम समय के साथ कर सकता हूं।

छोटा


-2

आपके पास जो उपकरण हैं उनके साथ सीधे वेब पर प्रिंट करना संभव है, लेकिन इसके लिए कुछ कौशल की आवश्यकता होगी जो आपके पास नहीं हैं।

आपके लिए मेरा समाधान QGIS का उपयोग करना होगा । QGIS में OpenLayers प्लगइन स्थापित करके आप OSM परत को एक्सेस कर सकते हैं जो आप चाहते हैं और Geoserver WMS लेयर (WMS लेयर जोड़कर) जोड़ सकते हैं।

फिर आप इस लुक के साथ प्रिंट कर सकते हैं जो आप चाहते हैं और इस शक्तिशाली टूल की मदद से और अधिक। ऑल द बेस्ट, ट्यूडर

पुनश्च। मुझे पता है कि मेरा जवाब शायद वह नहीं है जो आपने अपेक्षा की थी लेकिन यह काम करेगा और किसी भी वेब समाधान की तुलना में अधिक मुद्रण अनुरूपण प्रदान करेगा।


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