기본 OSM 및 Geoserver WMS 레이어로 Openlayers를 어떻게 인쇄 할 수 있습니까?


9

사용자가 일부 레이어를 열면 인쇄하려는 맵이 있습니다. 계층은 지오 서버 wms이고 기본 계층은 OSM입니다.

지오 서버에 인쇄 모듈이 있다는 것을 알고 있습니다.

내가 이해하지 못하는 것은 표시되는 레이어로 현재지도를 인쇄하는 데 사용하는 방법입니다.

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

나는 당신이 성취하려는 것을 정확하게 이해할 수 없습니다. 사용자가 웹에서 인쇄 할 수 있도록 하시겠습니까, osm 레이어 + 지오 서버 WMS에서 맵을 인쇄 하시겠습니까 (pdf)?
tudorbarascu

@Alophind : ppl이 의견에서 질문 한 내용에 답변해야합니다. 귀하가받을 답변을 결정합니다.
Devdatta Tengshe

나는 @PeterKrauss를 떠났습니다. 어떤 브라우저에서도지도의 섹션을 인쇄 할 수 있기를 원합니다. PDF도 좋습니다.
Alophind

답변:


7

지오 서버 인쇄 프로세스에는 두 단계가 포함됩니다.

먼저 서버 측 에서 config.yaml이라는 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);

이제 이것을 인쇄 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();

그리고 완료 !!!


오류가 발생했습니다 : PDF 생성 중 오류 : org.mapfish.print.JsonMissingException : 속성 [spec.mapTitle] 누락
Alophind

URL 및 예외에 대한 예를 추가했습니다. 내가 뭘 잘못하고 있는지 제안 할 수 있습니까?
Alophind

1
getMapScale 함수의 내용은 무엇입니까?
Alophind

1
OSM 또는 Google 기본 계층에서 작동합니까?
Alophind

1
@Alophind 나는 구글 맵 레이어를 위해 이것을 체크하지 않았다. 왜냐하면 구글 맵 이외의 API를 통해 구글 맵 레이어를 사용하는 AFAIK는 불법이기 때문이다. 이 특정 웹 사이트에는 OSM 계층이 없지만 인쇄 기능이있는 다른 응용 프로그램에서 OSM을 사용했습니다.
thelastray

1

Chrome 사용자 인 경우 빠르고 간단한 방법 은 Google Cloud Print 이지만 전체 웹 페이지를 인쇄하도록 설계되었지만 전체 화면 표시를 사용하여 인쇄 할 수 있습니다.

다른 장점은 계정에 프린터를 등록한 어느 곳에서나 연결된 프린터로 인쇄 할 수 있으므로 연결된 프린터 또는 Google 계정에 대해 등록한 PC 및 프린터를 사용하여 데스크탑 PC에서 모바일 인쇄를 사용할 수 있다는 것입니다. Google 클라우드 프린트와 함께 작동하도록 특별히 설계된 레거시 프린터 및 네트워크 프린터를 지원합니다.


1
크롬뿐만 아니라 모든 최신 브라우저를 지원해야합니다
Alophind

1

지오 서버와 맵 피쉬 플러그인으로 올바른 길을 가고 있다고 생각합니다. WMS 및 OSM 기본 계층에 인쇄하는 데 사용합니다. 그래도이 방법을 사용한다면주의 할 점이 있습니다. 인쇄 된지도를 올바르게 불러 오려면 해당 투영법이 올바르게 확장되지 않아 해당 사이트에서 직접 OSM을 사용할 수 없습니다. 데이터를 데이터베이스에로드하고 다른 SRS를 사용해야합니다.

이것에 대해 말하면 지오 서버에서 mapfish 플러그인으로 인쇄 작업을 수행하는 방법에 대해 간략하게 설명합니다.

먼저 mapfish 플러그인을 다운로드하여 geoser 설치에 설치해야합니다. 처음이 작업을 수행했을 때 해당 단계는 인쇄용 자습서 또는 데모의 어느 부분에도 문서화되지 않은 것으로 보였으므로 이해하기 전에 잠시 시간이 걸렸습니다. 또한 플러그인을 찾기가 다소 어려웠습니다.

페이지는 플러그인 설치 및 사용 방법에 대한 Geoserver의 지침을 보여줍니다. 기본적으로 다음과 같이 분류됩니다.

  • 이 페이지로 이동 하여 geoserver-2.1-SNAPSHOT-printing-plugin.zip 파일을 다운로드하십시오.
  • ZIP 아카이브의 내용을 GeoServer webapp의 / WEB-INF / lib /에 추출하십시오.
  • 지오 서버 재시작

이제 플러그인이 설치되었으므로 위의 답변에서 'thelastray'가 말한 config.yaml 파일을 수정하여 플러그인을 구성해야합니다. GeoServer가 재시작 될 때 파일이 생성되어야하며 다음 위치에 있습니다.

GEOSERVER_DATA_DIR / printing / config.yaml

이에 대한 많은 옵션이 있으므로 Mapfish 웹 사이트의 설명서를 참조하십시오.

다음 단계는이 플러그인을 사용하여 인쇄하는 응용 프로그램을 만드는 것입니다. GeoEXT를 사용하여 인쇄하기 위해이 설정을 사용하는 응용 프로그램의 예는 여기 에서 찾을 수 있습니다 . 더 많은 예제를 보려면 페이지를보십시오.

잘만되면 그것은 당신을 시작할 것입니다.


빠른 시작 / 주제 질문, 데이터베이스에서 OSM을 인쇄 할 때 WMS 서버에서 OSM 스타일과 일치하는 스타일을 어떻게 얻었습니까? (또는 다른 스타일과 100 % 일치하지 않음)
Alophind

나만의 스타일을 만들었습니다. OSM보다 Google 맵 스타일을 닫았습니다.
Darkcylde

2
당신은 그것을 공유 할 수 있습니까?
Alophind


0

"용지에 매핑"은 단순한 "이미지를 페이지에 맞추기"그 이상일 수 있습니다.지도 제작의 역사는 종이로 작성되었으며 오늘날 일부지도 제작 제품은 여전히 ​​용지를 요구합니다.

오늘날 종이는 PDF입니다. EPUB 또는 "브라우저로 인쇄"는 잊어 버리고 대기 표준, CSS3 등은 미래를위한 것입니다 ... 그리고 양질의 (용지)지도 제작 제품 에는 XSLT-FO 또는 CSS2 가 필요합니다 . (X) HTML + CSS2를 사용하면 좋은 PDF (!)를 생성 할 수 있습니다 ... HTML은 "브라우저 용"이 아니며 "PDF 생성"도구 (즉석에서 또는 오프라인으로 PDF를 생성)를위한 것입니다.

내가 아는 유일한 전문 " HTML + CSS2로 좋은 PDF 를 생성하는 도구 "는 PrinceXML입니다 . WFSWMS 프로토콜의 "온-플라이 이미지"(SVG, JPG 및 PNG) 와 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

가지고있는 도구를 사용하여 웹에서 직접 인쇄 할 수 있지만 소유하지 않은 기술이 필요합니다.

당신을위한 나의 해결책은 QGIS 를 사용하는 것 입니다. QGIS에 OpenLayers 플러그인을 설치하면 원하는 OSM 계층에 액세스하고 WMS 계층을 추가하여 Geoserver WMS 계층을 추가 할 수 있습니다.

그런 다음이 강력한 도구를 사용하여 원하는 모양으로 인쇄 할 수 있습니다. 모두 최고, 튜더

추신. 내 대답은 아마 당신이 기대 한 것이 아니지만 작동하며 웹 솔루션보다 더 많은 인쇄 사용자 정의를 제공한다는 것을 알고 있습니다.


1
이것은 브라우저를 사용하는 웹 애플리케이션입니다 ... QGIS는이 솔루션과 관련이 없습니다.
Alophind
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.