2011-03-17 3 views
6

나는 스스로 할 수있는 일종의 사람이지만, 나는 내가 씹을 수있는 것보다 더 많이 물어 뜯으려고 스스로를하려고하지 않을 것임을 확신하고 싶다.WMS/WFS 서버 : 내 자신을 쓸 때 미친가요?

나는 최종 사용자의 컴퓨터에서 독립 실행 형 (인터넷에 연결되어 있지 않음) 실행 옵션이 필요한 브라우저 기반 매핑 응용 프로그램을 작성 중입니다. 즉, 응용 프로그램은 일종의 서버로 대부분의 경우 최종 사용자의 컴퓨터에 설치되며 브라우저는 일부 로컬 호스트 URL을 가리켜 해당 서버에 액세스합니다.

나는 클라이언트 측에서 MapLayers를 사용할 것이고 서버 측은 특정 사용자 정의 방식으로지도에서 클릭 이벤트를 처리하고지도에 다양한 사용자 정의 객체를 생성하는 등 응용 프로그램에 특정한 사용자 정의 논리를 가질 것입니다 특정 시간에, 등등.

서버의 "비즈니스 논리"부분에 대해서는 python으로 paste/webob을 사용하여 기쁘게 생각합니다. 이 모든 사용자 정의 논리를 쉽게 넣을 수있는 간단한 인프라입니다.

클라이언트가 두 개의 서버 (이 붙여 넣기/webob 비즈니스 로직 서버 및 WMS 및 WFS 맵 요소를 제공하기위한 서버)와 통신한다고 생각했습니다. 그래서 MapServer와 GeoServer에서지도 부분을 처리하려고합니다 ... 나는 행복하지 않습니다.

클라이언트 컴퓨터에서 "짐승"에 대해 걱정할 필요가 없기 때문에 나는 행복하지 않습니다. MapServer의 경우 Apache와 같은 본격적인 웹 서버를 설치하고 싶지는 않으며 CGI와 PHP 및 MapScript를 처리해야합니다. GeoServer의 경우 Java를 설치하고 (잠재적으로) GeoServer 설정 및 관리의 다양한 복잡성을 처리합니다.

일부는 학습 곡선 문제 일뿐입니다. 피할 수 있다면 MapServer 나 GeoServer의 복잡함을 배우는 데 특별히 관심이 없습니다. GeoServer를 설치하고 일부 데이터를 가리키며 GeoServer의 멋진 웹 관리자에 내장 된 MapLayers 미리보기를 사용하여 데이터를 볼 수있었습니다. 그러나 GeoServer에서 지적한 내 자신의 MapLayers 웹 페이지를 사용하여 실제 데이터를 제공하려고 시도했을 때 GeoServer가 손상되었습니다. 클라이언트에서 기형적 인 요청을 보내는 것만으로도 서버가 다운 될 수 있다는 것은 나에게 상당히 놀라운 일이었습니다. 그리고 내가 내가 잘못했는지 알아 내려고 GeoServer 로그를 파고 수 있지만 ... 나는 정말 그것에 많은 시간을 보내고 싶지 않아요.

그래서 저는 이미 가지고있는 붙여 넣기/webob 서버를 사용하여 WMS 및 WFS 인터페이스의 일부를 구현하는 것을 고려하고 있습니다. 실제로 클라이언트에 데이터를 전달하는 간단한 사용자 정의 프로토콜을 통해 벡터 객체를 처리 할 수 ​​있으므로 OpenLayers를 사용하여 객체를 직접 만들고 조작 할 수 있으므로 벡터 객체를 처리 할 수 ​​있으므로 WMS 만 필요합니다.

WMS에 대한 사양 및 예제 메시지 (WFS에서는 조금 적음)를 살펴 보았습니다. 이 프로토콜을 직접 구현하는 것은 그리 어렵지 않은 것처럼 보입니다. 특히이 경우 클라이언트를 완전히 제어 할 수 있기 때문에 어렵습니다. 일반적인 WMS 또는 WFS 서버로 작동 할 수 있어야합니다. 난 그냥 내 자신의 OpenLayers 클라이언트를 행복하게 만들어야합니다.내가 가지고하기 위해 WMS 서버가 필요

두 가지 주요 능력은 다음과 같습니다

  • 내가 시간 앞서 만든 사전 렌더링 타일의 상점에서 타일을 봉사 (I는 OpenStreetMap에를 사용하여 타일을 사전 렌더링합니다 데이터 및 mapnik을 저장 엔진으로 사용하고, OpenLayers가 예상하는 일반적인 Google Maps 스타일 타일 명명 체계를 사용하여 저장하고 액세스합니다.

  • 내가 저장하는 특정 데이터가있는 경우 이러한 타일의 수정 된 버전을 서버에 저장할 수 있습니다 국부적으로 타일의 위에 그린다. 예를 들어 하나의 "레이어"에 10000 개의 점이 있고 다른 레이어에 10000 개의 폴리곤이있을 수 있습니다. 사용자가이 레이어를 활성화하면 동일한 기본 타일을 제공하지만이 타일을 제공 할 때 렌더링 할 것입니다. 이러한 추가 기능이 맨 위에 있으며, 아마도이 오버 렌더링 타일을 일정 시간 동안 유지하는 간단한 캐싱 체계를 구현할 것입니다.

그래서 제 질문은 : 나는 나를 그냥 응답하는 것이 적은 작업이처럼이 일 (맵 서버, GeoServer, TileCache, 다른 사람들이) 내가 실제로 기분 수행이 존재하는 도구를 알고 있지만 몇 가지 간단한 WMS 메시지를 작성하고, 파이썬에서 내 타일에 직접 추가하여 그림을 그리거나, 모든 것이 올바르게 투영되는지 확인하는 등의 작업을 수행 할 수 있습니다. 이러한 넓은 레이어 나 단순한 선 , 아이콘, 그리고 아마도 레이블. 파이썬 전용 솔루션을 사용하는 것이 좋고 간단합니다.

내가 WMS/WFS 프로토콜을 더 이상 지원하도록 확장해야하거나 멋진 오버 드로를 수행해야한다면 그 시점에 MapServer/GeoServer를 삽입하면됩니다.

여기에 함정이 있습니까?

답변

1

Mapserver는 설정과 학습이 매우 쉽습니다. 혼자서 모든 종류의 렌더링을 구현하려면 훨씬 더 많은 노력이 필요하며, 예기치 않은 많은 트랩을 발견하게 될 것입니다.

mapserver cgi로 충분해야합니다. 매우 구체적인 조정이 필요한 경우 mapscript가 유용 할 수 있습니다.

순수 JavaScript 응용 프로그램을 만들고 웹 서버 (및 맵 서버)를 설치하지 않아도 될 수 있다고 생각합니다. 타일 ​​모자이크를 탐색 할 필요가 있다면 자바 스크립트 (각 타일에 대해 셀이있는 html 테이블 생성)만으로도 가능할 수 있습니다. JavaScript로 포인트 또는 폴리곤을 렌더링 할 수 있습니다. 캔버스를 사용하고 지형 점을 픽셀로 변환하기위한 몇 가지 기본 좌표 변환을 수행 할 수 있습니다. Openlayers에는이 기능이 있다고 생각합니다.

편집 : 그냥 확인했는데 Openlayers으로 로컬 타일을 탐색 할 수 있으며 kml 및 다른 vect 데이터를 렌더링 할 수 있습니다. 그래서 저는 Openlayers에게 한 번 시험해보아야한다고 생각합니다.

+0

감사합니다. 지금은이 python 전용 솔루션이 작동하도록했습니다. 붙여 넣기가 한 번에 너무 많은 타일 요청을 처리하는 데 문제가있는 것처럼 보였으므로 CherryPy를 사용하여 서버를 종료했습니다. 예, Mapserver를 미래에 시험해 볼 수도 있습니다 만, 지금은 파이썬에서 내 타일을 기쁜 마음으로 제공하고 있습니다. 타일에서 수행해야하는 과도한 작업은 현재 매우 적기 때문에 손으로 직접 처리 할 것입니다. –

+0

순수한 OpenLayers 솔루션을 사용해 주셔서 감사합니다.하지만 실용적으로 만들기에는 데이터를 너무 많이 모으고 있으며 로컬 컴퓨터가 타일을 제공하는 것이 항상 보장되는 것은 아닙니다. –

+0

CGI 옵션을 사용하려면 paste.cgiapp을 사용하여 줄 바꿈을 할 수 있습니다. –

1

wms/wfs가 필요하지 않습니다. 필요한 것은 타일 구현입니다. 기본적으로 어떤 종류의 중앙 서비스 또는 타일을 생성하는 데스크탑 서비스가 있어야합니다. 일단 이러한 타일이 생성되면, 단순히 "진짜가 아닌 웹 서버 아키텍처"파일 시스템으로 변환 할 수 있습니다. /{x}/{y}/{z}.png를 준수하는 디렉토리 구조를 만들고 javascript에서 호출 할 수 있습니다.

OpenStreetMap에이 작업을 수행하는 방법의 예

는 여기에서 찾을 수 있습니다 : 당신은 featureserver했습니다 http://wiki.openstreetmap.org/wiki/OpenLayers_Simple_Example

+1

네, 맞습니다. wms/wfs 메타 데이터 종류의 요청에 응답 할 필요없이 OpenLayers의 tile/z/y/x 메시지에 간단하게 응답 할 수있었습니다. OpenLayers.Layer.XYZ 레이어 유형을 사용했습니다. –

관련 문제