내 OSM 데이터 서버가있는 OpenLayers


9

PostGIS 설정, Planet.osm 데이터 스냅 샷 가져 오기 (며칠 소요) 및 Mapnik / cascadenik 등 설정을 통해 자체 OSM 데이터베이스 / 타일 서버를 설정하는 과정을 거쳤습니다. 직접 수동으로 렌더링 할 수 있습니다. 와 샘플 타일을 사용 generate_image.py하여 수동으로 타일셋을 생성 할 수 있습니다 generate_tiles.py. 나는 cascadenik을 사용하여 나만의 커스텀 스타일 템플릿을 생성하고 타일을 생성하여 꽤 많은 시간을 보냈습니다.

내 새로운 문제는 OpenLayers를 사용하여 동일한 서버에서 실행되도록 샘플 미끄러운 맵을 설정하는 것입니다 ...

다소 구성되고 작동합니다. 설치 Apache, mod_python, TileCache 등입니다. 타일을 미끄러운 맵으로 렌더링하지만 OpenLayers에 매개 변수가 모두 고정되어 있다고 생각합니다. 여기 내가 현재 가지고있는 것이 있습니다 (모든 줌 레벨에서 빈 바다처럼 보이는 것을 렌더링합니다).

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <script src="http://openlayers.org/api/OpenLayers.js"></script> 
    <script type="text/javascript">
        var map;

        function init() {
                map = new OpenLayers.Map ("map", {
                        maxExtent: new OpenLayers.Bounds(-20037508.34,-20037508.34,20037508.34,20037508.34),
                        maxResolution: 156543.0399,
                        numZoomLevels: 19,
                        units: 'm',
                        projection: new OpenLayers.Projection("EPSG:900913"),
                        displayProjection: new OpenLayers.Projection("EPSG:4326")
                } );

                layer = new OpenLayers.Layer.TMS( "OSM", "/tilecache/tilecache.py/", {layername: 'osm', type: 'png'} );
                map.addLayer(layer);
                map.addControl(new OpenLayers.Control.PanZoomBar());
                map.setCenter(new OpenLayers.LonLat(-82.686195, 27.84788), 12)
        }
        </script> 
  </head>
<body onload="init()">
    <div id="map"></div>
</body>
</html>

레이어 옵션 매개 변수에 문제가 있다고 생각하지만 Mapnik에서 렌더링 한 일반 OSM 타일을 표시하는 데 사용되는 표준 매개 변수를 설명하는 훌륭한 문서를 찾을 수 없습니다 ...

이 문제를 일으킬만한 누락 된 부분이 있습니까?

tilecache.cfg에있는 모든 것이 있습니다.

[cache]
type=Disk
base=/tmp/tilecache
[osm]
type=Mapnik
spherical_mercator=true
mapfile=/home/user/mapfile.xml

답변:


8

참고 사항 : mod_python보다 mod_wsgi를 권장합니다. 그리고 mod_python과 함께 Apache 프리 포크를 사용하거나 thread = 1 및 processes = N (여기서 N은 논리 프로세서의 수와 가장 일치 함)과 함께 데몬 모드에서 mod_wsgi를 사용하는 것이 중요합니다. 데몬 모드의 mod_wsgi는 Apache prefork 또는 worker와 함께 사용할 수 있습니다. TileCache는 mapnik.Map 객체를 캐시하므로 스레드간에 공유해서는 안되기 때문입니다. Mapnik 코어는 완벽하게 스레드 안전하지만 멀티 스레드 서버 애플리케이션은 스레드 당 mapnik.Map 객체의 인스턴스를 작성해야합니다. Mod_tile 및 Paleoserver는 이러한 방식으로 다중 스레드 렌더링을 지원하는 응용 프로그램의 예이지만 TileCache는이를 지원하지 않습니다. 그러나 threads = 1로 TileCache + Mapnik + mod_wsgi 데몬 모드를 실행하는 것이 좋습니다.

레이어 설정에 따라 "serviceVersion"을 추가하십시오 :

var tms = new OpenLayers.Layer.TMS ( "TileCache Mapnik Layer", url, {serviceVersion : "1.0.0", 레이어 이름 : "osm", 유형 : "png"});


감사! 문제가 해결되었지만 이제 setCenter가 작동하지 않습니다. 정확한 확대 / 축소 수준으로 가고 있다고 생각하지만 ll = (0, 0) (아프리카 제외) 중심에 있습니다. 아마 미터와 12 월의 문제 일 수 있습니다. . 학위? 또한 조언 re : mod_wsgi에 감사드립니다. 그런 식으로 설정하고 더 나은 성능을 얻을 수 있는지 확인하겠습니다. 6 코어와 12GB RAM이있는 VM에서 실행 중이므로 빠른 렌더링 / 캐싱이 충분해야합니다.
colemanm

2
OSM 좌표는 미터 단위이므로 중심을 투영 된 미터 단위로 설정해야합니다. docs.openlayers.org/library/…를 참조하십시오 .
Christopher Schmidt

고마워, 그것이 내 문제인 것처럼 보입니다. 미터 단위의 좌표로 setCenter를 사용할 때 작동합니다.
colemanm
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.