OpenLayersと自分のOSMデータサーバー


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をお勧めします。そして、Apache preforkをmod_pythonと共に使用するか、または(理想的には)mod_wsgiをデーモンモードでthreads = 1およびprocesses = Nで使用することが重要です(ここで、Nは論理プロセッサの数に最適です)。デーモンモードのmod_wsgiは、Apache preforkまたはworkerで使用できます。これは、TileCacheがmapnik.Mapオブジェクトをキャッシュするため、スレッド間で共有しないようにする必要があるためです。Mapnikコアは完全にスレッドセーフですが、マルチスレッドサーバーアプリケーションでは、スレッドごとにmapnik.Mapオブジェクトのインスタンスを作成する必要があります。Mod_tileとPaleoserverは、この方法でマルチスレッドレンダリングをサポートするアプリケーションの例ですが、TileCacheはこれをサポートしていません。ただし、TileCache + Mapnik + mod_wsgiデーモンモードをthreads = 1で実行するのは適切な方法です。

レイヤー設定に関する限り、「serviceVersion」を追加してみてください:

var tms = new OpenLayers.Layer.TMS( "TileCache Mapnik Layer"、url、{serviceVersion: "1.0.0"、layername: "osm"、type: "png"});


ありがとう!これで問題は解決しましたが、現在はsetCenterが機能していません。正しいズームレベルになると思いますが、ll =(0、0)(アフリカ外)を中心にしています...メートルとデシベルの問題である可能性があります。度?また、アドバイスre:mod_wsgiに感謝します。そのように設定して、パフォーマンスが向上するかどうかを確認します。私は6つのコアと12 GBのRAMを備えたVMで実行しているので、高速のレンダリング/キャッシングには十分なはずです。
colemanm 2010

2
OSM座標はメートル単位なので、投影されたメートル単位で中心を設定する必要があります。docs.openlayers.org/library/…を参照してください。
クリストファーシュミット

おかげで、それが私の問題だったようです-メートル単位の座標でsetCenterを使用すると、機能します
colemanm 2010年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.