Temel OSM ve Geoserver WMS katmanlarıyla Openlayers'ı nasıl yazdırabilirim?


9

Kullanıcı bazı katmanları açtıktan sonra yazdırmak istediğim bir harita var. Katmanlar geoserver wms ve temel katman OSM'dir.

Geoserver'ın yazdırma modülü olduğunu biliyorum (yüklü ve çalışıyor çünkü geoserver / pdf / info.json? Var = printCapability'den yanıt alıyorum

Anlamadığım şey, haritayı görünür katmanlarla yazdırmak için nasıl kullandığım.

GeoExt örneğine (mapfish) baktım ama anlamama yardımcı olmadı.

Güncelleme 1: Aşağıdaki URL'yi kodla oluşturdum:

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

ve boş PDF alıyorum (sadece başlık ile) ... Sorun ne olabilir?


1
"Çevrimiçi yazdırma aracına" mı ihtiyacınız var , yoksa "çevrimdışı PDF oluşturucu" daha mı iyi? (iyi kontrol ve kalite güvencesi için sadece PDF güvenlidir)
Peter Krauss


Neyi başarmaya çalıştığınızı tam olarak anlayamıyorum. Kullanıcının osm katmanları + geoserver wms'den (web'de) yazdırabilmesini veya bir harita (pdf diyelim) yazdırmasını istiyor musunuz?
tudorbarascu

@Alophind: ppl'nin yorumlarında sorduğu soruları cevaplamanız gerekiyor. Bu, alacağınız cevapları belirleyecektir.
Devdatta Tengshe

Uzaktaydım, @PeterKrauss - Haritanın bir bölümünü herhangi bir tarayıcıda yazdırma yeteneğini istiyorum, PDF de iyi.
Alophind

Yanıtlar:


7

Geoserver yazdırma işlemi iki adımdan oluşur.

İlk olarak sunucu tarafında , config.yaml adlı yaml dosyanızı yapılandırmanız gerekir. MapFish baskı modülü dokümantasyon sayfasındaki ayrıntılı dokümanları gözden geçirin .

Bu yapıldıktan sonra, ikinci adım müşteri tarafı içindir . Ön uç için açık katmanlar kullandığınız düşünüldüğünde, görünür katmanların listesini almak için görünürlük kontrolüne sahip basit bir döngüye ihtiyacınız olacaktır, ör.

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

Şimdi bunu yazdırma URL'nize iletmeniz gerekiyor. Örneğin

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}]}'

Elbette URL'de alakalı değişiklikler yapmanız gerekecektir. Sonra bu URL'yi yazdır düğmenize atayın ve ardından bir tıklama işlevini pragmatik olarak çağırın.

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

Ve bitti!!!


Hata alıyorum: PDF oluşturulurken hata: org.mapfish.print.JsonMissingException: attribute [spec.mapTitle] eksik
Alophind

URL ve istisna için örnek ekledim, ne yaptığımı önerebilir misiniz?
Alophind

1
GetMapScale işlevinin içeriği nedir?
Alophind

1
OSM veya google temel katmanı ile çalışır mı?
Alophind

1
@Alophind Google harita katmanı için bunu kontrol etmedim, çünkü Google harita katmanı dışında Google harita katmanı kullanan Google harita katmanını kullanan AFAIK yasa dışı. Bu web sitesinin OSM katmanı olmamasına rağmen, baskı tesisine sahip diğer uygulamalarda OSM kullandım.
thelastray

1

Bir Chrome Kullanıcısıysanız, hızlı ve basit bir yol Google Cloud Print'tir , ancak tüm web sayfasını yazdırmak için tasarlanmıştır, ancak tam ekran bir görüntü kullanabilir ve yazdırabilirsiniz.

Başka bir avantaj, hesabınızda kayıtlı yazıcıların olduğu her yere bağlı bir yazıcıya yazdırabilmenizdir, böylece bağlı bir yazıcıyla masaüstü bilgisayarınızda veya Google hesabınıza kaydettiğiniz herhangi bir Pc ve Yazıcıda mobil yazdırma yapılabilir. Özellikle Google Cloud Print ile çalışmak üzere tasarlanmış Eski Yazıcıları ve ağ yazıcılarını destekler.


1
Tüm krom tarayıcıları desteklemem gerekiyor, sadece krom değil
Alophind

1

Geoserver ve mapfish eklentisi ile doğru yolda ilerlediğinizi düşünüyorum. WMS ve OSM taban katmanlarım için baskı yapmak için kullandığım şey bu. Yine de bu yöntemi kullanacaksanız dikkat etmeniz gereken bir şey var. Basılı haritalarınızın doğru bir şekilde görüntülenmesini istiyorsanız, içinde bulunduğu projeksiyon doğru şekilde ölçeklenmediğinden OSM'yi doğrudan o siteden kullanamazsınız. Verileri bir veritabanına yüklemeniz ve farklı bir SRS kullanmanız gerekir.

Bunu söyledikten sonra nasıl geoserver mapfish eklentisi ile çalışma almak için hızlı bir özet verecek.

Öncelikle mapfish eklentisini indirmeniz ve geoser kurulumunuza yüklemeniz gerekecek. Bunu ilk yaptığımda, bu adım öğreticiler veya baskı için demoların herhangi bir yerinde belgelenmiş gibi görünmüyordu, bu yüzden anladım önce bir süre oldu. Ayrıca eklentiyi bulmak biraz zor oldu.

Bu sayfa, Geoserver tarafından eklentinin nasıl kurulacağı ve kullanılacağı ile ilgili talimatları göstermektedir. Temel olarak aşağıdakilere ayrılır:

  • Git bu sayfayı ve geoserver-2.1-SNAPSHOT-printing-plugin.zip dosyasını indirin.
  • ZIP arşivinin içeriğini GeoServer web uygulamasındaki / WEB-INF / lib / dizinine çıkarın
  • Geoserver'ı yeniden başlat

Tamam şimdi eklenti yüklendi, yukarıdaki cevabında 'thelastray' hakkında konuştuğu config.yaml dosyasını değiştirerek yapılan eklentiyi onaylamanız gerekecektir. GeoServer yeniden başlatıldığında ve aşağıdaki konumda bulunduğunda dosya oluşturulmalıdır:

GEOSERVER_DATA_DIR / baskı / config.yaml

Bunun için birçok seçenek var, bu yüzden burada Mapfish web sitesindeki belgeleri incelemeniz gerekecek .

Bir sonraki adım, yazdırma işlemi için bu eklentiyi kullanan bir uygulama oluşturmaktır. GeoEXT kullanarak yazdırmak için bu kurulumu kullanan bir uygulama örneği burada bulunabilir . Daha fazla örnek görmek isterseniz bu sayfaya bakın.

Umarım bu seni başlatır.


Hızlı kapalı / konu sorusu, Veritabanınızdan OSM yazdırırken, WMS sunucunuzdaki stili OSM stiline uyacak şekilde nasıl edindiniz? (ya da farklı bir stil ve% 100 eşleşmedi)
Alophind

Kendi tarzımı yarattım. Google Haritalar stiline OSM'den daha yakın hale getirdim.
Darkcylde

2
Paylaşır mısın lütfen?
Alophind


0

"Kağıda harita" daha basit olabilir "Görüntüyü sayfaya sığdır" ... Kartografinin tarihi kağıda yazıldı ve bugün bazı kartografik ürünler hala kağıt istiyor.

Günümüzde kağıdıdır PDF unutmak - EPUB vb veya "tarayıcı tarafından print", onlar standartlarını bekliyor, CSS3, gelecek için vardır ... Ve kaliteli (kağıt) kartografik ürünler ihtiyaç XSLT-FO ya da CSS2 . (X) HTML + CSS2 ile iyi PDF (!) Üretebilirsiniz ... Bu HTML "tarayıcı için" değil, "PDF oluşturma" aracı içindir (anında veya çevrimdışı PDF üreten).

Bildiğim HTML + CSS2 ile iyi PDF oluşturmak için tek profesyonel "araç PrinceXML : WFS ve WMS protokollerinden " Open-Layer "(SVG, JPG ve PNG) ve OpenLayers ile test ettim ve çok iyi çalışıyor (!).


0

Bunu yeni yaptım:

İndirilen html2canvas.js ( https://github.com/niklasvh/html2canvas/releases )

İndirilen html2canvas-proxy.php ( https://github.com/adjdred/html2canvas-proxy-php )

İkisini de sunucumda + ref etiketinde ve JS'de yükledim:

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

Bana mevcut haritanın bir .png verir - hangi ne olursa olsun yapabilirsiniz - benim pc bir saniyeden daha az sürer.

Mini


-2

Sahip olduğunuz araçlarla doğrudan web'e yazdırmak mümkündür, ancak sahip olmadığınız bazı beceriler gerektirir.

Sizin için çözümüm QGIS kullanmak olacaktır . OpenLayers eklentisini QGIS'e yükleyerek istediğiniz OSM katmanına erişebilir ve Geoserver WMS katmanını ekleyebilirsiniz (bir WMS katmanı ekleyerek).

Ardından, bu güçlü aracın yardımıyla istediğiniz görünüme ve daha fazlasına baskı yapabilirsiniz. En iyi dileklerimle, Tudor

PS. Cevabımın muhtemelen beklediğiniz gibi olmadığını biliyorum, ancak işe yarayacak ve herhangi bir web çözümünden daha fazla baskı özelleştirmesi sağlayacak.


1
Bu bir web uygulamasıdır, tarayıcıları kullanır ... QGIS bu çözümle ilgili değildir.
Alophind
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.