ベースOSMおよびGeoserver WMSレイヤーでOpenlayerを印刷するにはどうすればよいですか?


9

ユーザーがいくつかのレイヤーを開いたら、印刷したいマップがあります。レイヤーはジオサーバーwmsで、ベースレイヤーはOSMです。

geoserverに印刷モジュールがあることを知っています(geoserver / pdf / info.json?var = printCapabilitiesから返信があるため、インストールされて機能しています)

私が理解していないのは、それを使用して現在のマップを表示レイヤーで印刷する方法です。

私はGeoExtの例(mapfish)を見てきましたが、理解に役立ちませんでした。

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

空のPDF(タイトルのみ)を取得しています...何が問題なのでしょうか?


1
「オンライン印刷ツール」が必要ですか、それとも「オフラインPDFジェネレーター」の方が優れていますか?(適切な管理と品質保証のためにPDFのみが安全です)
Peter Krauss

dev.openlayers.org/sandbox/camptocamp/canvas/openlayers/をチェックしてくださいそれがお役に立てば幸いです。
Farhat Abbas

あなたが何を成し遂げようとしているのか正確には理解できません。ユーザーが(Webで)印刷できるようにしたいですか、それともosmレイヤー+ geoserver wmsからマップ(pdfとしましょう)を印刷しますか?
tudorbarascu 2013年

@Alophind:pplがコメントで尋ねた質問に答える必要があります。それはあなたが得る答えを決定します。
Devdatta Tengshe 2013年

私は不在でした、@ PeterKrauss-任意のブラウザーでマップのセクションを印刷する機能が必要です。PDFも使用できます。
Alophind 2013年

回答:


7

Geoserverの印刷プロセスには2つのステップがあります。

まずサーバー側で、config.yamlと呼ばれるyamlファイルを設定する必要があります。MapFish印刷モジュールのドキュメントページで詳細なドキュメントを確認します

これが完了すると、2番目のステップはクライアント側です。フロントエンドにopenlayersを使用していることを考えると、可視レイヤーのリストを取得するには、可視性チェック付きの単純なループが必要です。たとえば、

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

これを印刷URLに渡す必要があります。例えば

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エラーが発生:PDFの生成中にエラーが発生しました:org.mapfish.print.JsonMissingException:属性[spec.mapTitle]がありません
Alophind

URLと例外の例を追加しましたが、私が間違っていることを提案できますか?
Alophind 2013年

1
getMapScale関数の内容は何ですか?
Alophind 2013年

1
OSMまたはgoogleベースレイヤーで動作しますか?
Alophind 2013年

1
@Alophind Googleマップレイヤーでこれをチェックしていません。Googleマップ以外のAPIを介してGoogleマップレイヤーを使用するAFAIKは違法であるためです。この特定のWebサイトにはOSMレイヤーもありませんが、印刷機能を備えた他のアプリケーションでOSMを使用しました。
thelastray 2013年

1

Chromeユーザーの場合、すばやく簡単な方法はGoogleクラウドプリントですが、ウェブページ全体を印刷するように設計されていますが、全画面表示を使用して印刷することもできます。

別の利点は、アカウントにプリンターを登録したどこからでも接続されたプリンターに印刷できるため、接続されたプリンターを備えたデスクトップPC、またはGoogleアカウントに対して登録したPCとプリンターでモバイル印刷を利用できることです。Googleクラウドプリントで動作するように特別に設計されたレガシープリンターとネットワークプリンターをサポートします。


1
クロムだけでなく、最近のすべてのブラウザをサポートする必要があります
Alophind

1

geoserverとmapfishプラグインを使用して、正しい方向に進んでいると思います。これは、WMSおよびOSMベースレイヤーの印刷に使用するものです。ただし、この方法を使用する場合は注意すべきことが1つあります。印刷されたマップが正しく呼び出されるようにしたい場合は、そこにある投影法が正しくスケーリングされないため、そのサイトから直接OSMを使用できません。データをデータベースにロードし、別のSRSを使用する必要があります。

これを述べた上で、geoserverでmapfishプラグインを使用して印刷を行う方法について簡単に説明します。

まず、mapfishプラグインをダウンロードし、それをgeoserインストールにインストールする必要があります。私が最初にこれを行ったとき、そのステップはチュートリアルや印刷のデモのどこにも文書化されていないようだったので、それを理解するまでしばらくかかりました。また、プラグインを見つけるのがやや困難でした。

このページには、プラグインをインストールして使用する方法に関するGeoserverからの指示が表示されます。基本的には次のように分類されます。

  • このページに移動し、geoserver-2.1-SNAPSHOT-printing-plugin.zipファイルをダウンロードします。
  • ZIPアーカイブの内容をGeoServer Webアプリケーションの/ WEB-INF / lib /に抽出します
  • Geoserverを再起動します

プラグインがインストールされたので、「thelastray」が上記の回答で説明しているconfig.yamlファイルを変更して、プラグインを構成する必要があります。このファイルは、GeoServerの再起動時に作成され、次の場所にあります。

GEOSERVER_DATA_DIR / printing / config.yaml

これには多くのオプションがあるため、ここのMapfish Webサイトのドキュメントを参照する必要があります。

次のステップは、このプラグインを使用して印刷を行うアプリケーションを作成することです。この設定を使用してGeoEXTを使用して印刷するアプリケーションの例は、こちらにあります。さらに例をご覧になりたい場合は、このページをご覧ください。

うまくいけば、それがあなたを始めるでしょう。


クイックオフ/トピックの質問、データベースからOSMを印刷するとき、どのようにしてWMSサーバーのスタイルをOSMスタイルに一致させましたか?(または、異なるスタイルを実行し、100%一致していません)
Alophind 2013年

自分のスタイルを作りました。OSMよりもGoogleマップスタイルに近づいてしまいました。
Darkcylde 2013年

2
共有して頂けますか?
Alophind 2013年


0

「紙に写す」は単なる「画像をページに合わせる」だけではありません...カートグラフィの歴史は紙に書かれており、今日でも一部のカートグラフィック製品は紙を必要としています。

今日、紙はPDFです。EPUBや「ブラウザによる印刷」を忘れて、彼らは標準、CSS3などを待ち望んでいます...そして、良質の(紙)カートグラフィック製品にXSLT-FOまたはCSS2が必要です。(X)HTML + CSS2を使用すると、優れたPDFを生成できます(!)...そのHTMLは「ブラウザ用」ではなく、「PDF生成」ツール(オンザフライまたはオフラインでPDFを生成する)用です。

唯一のプロ「を生成するためのツールの良いPDF私の知っていることをHTML + CSS2と」を、あるPrinceXML:私は、「オン飛ぶイメージ」(SVG、JPGやPNG)でテストからWFSWMSの プロトコル、と OpenLayersを、それとてもうまくいきます(!)


0

私はこれをやったばかりです:

ダウンロードしたhtml2canvas.js(https://github.com/niklasvh/html2canvas/releases

ダウンロードしたhtml2canvas-proxy.php(https://github.com/adjdred/html2canvas-proxy-php

私のサーバーとタグの.jsへの参照と私のJSの両方にそれらをインストールしました:

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

現在のマップの.pngを取得します-私は何でもできる-私のPCでは1秒もかかりません。

ミニ


-2

手持ちのツールを使用してWebに直接印刷することは可能ですが、必要のないスキルが必要になります。

私のソリューションは、QGISを使用することです。QGISにOpenLayersプラグインをインストールすることで、必要なOSMレイヤーにアクセスし、(WMSレイヤーを追加することにより)Geoserver WMSレイヤーを追加できます。

次に、この強力なツールを使用して、希望する外観などで印刷できます。最高、チューダー

PS。私の答えはおそらくあなたが期待したものではないことを知っていますが、それは機能し、どのWebソリューションよりも多くの印刷カスタマイズを提供します。


1
これはブラウザを使用するWebアプリケーションです... QGISはこのソリューションには関係ありません。
Alophind 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.