TileStacheベクトルタイルオーバーレイの問題


8

私はTileStacheを使用して、postgisデータソースを使用して独自のベクタータイルを提供しています。まず、ArcMap(Webメルカトル(補助球)に再投影)を使用していたシェイプファイルを再投影し、shp2pgsql(SRID:900913)を使用してそれらをPostgresにロードしました。

この構成ファイルを使用してタイルを生成できます:

{
  "キャッシュ":
  {
    "名前": "テスト"、
    "パス": "/ tmp / stache"、
    "umask": "0000"

  }、
  「レイヤー」: 
  {     
    「tpl」:
    {       
        "許可され​​たオリジン": "*"、
        "投影": "球状メルカトル"、
        「プロバイダー」:
        {
            "クラス": "TileStache.Goodies.VecTiles:Provider"、                        
            "kwargs":{
                「dbinfo」:
                {
                    "ホスト": "ローカルホスト"、
                    "ユーザー": "postgres"、
                    "パスワード": "postgres"、
                    "データベース": "tpl"
                }、
                「クエリ」:
                {
                    "7": "SELECT geom AS __geometry __、name、priority FROM isl_roads_sm WHERE priority IN(5,4)-zoom 7+"、
                    "8": "SELECT geom AS __geometry __、name、priority FROM isl_roads_sm WHERE priority IN(5,4)"、
                    "9": "SELECT geom AS __geometry __、name、priority FROM isl_roads_sm WHERE priority IN(5,4)"、
                    "10": "SELECT geom AS __geometry __、name、priority FROM isl_roads_sm WHERE priority IN(5,4)"、
                    "11": "SELECT geom AS __geometry __、name、priority FROM isl_roads_sm WHERE priority IN(5,4,3,2)"、
                    "12": "SELECT geom AS __geometry __、name、priority FROM isl_roads_sm WHERE priority IN(5,4,3,2)"、
                    "13": "SELECT geom AS __geometry __、name、priority FROM isl_roads_sm WHERE priority IN(5,4,3,2)"、
                    "14": "SELECT geom AS __geometry __、name、priority FROM isl_roads_sm-ズーム14+"
                }
            }
        }、
        "プレビュー":{"ext": "json"}
    }
  }
}

Leaflets TileLayer.GeoJSONを使用して生成されたタイルをレンダリングしています。私が抱えている問題は、タイルがベースマップとオーバーレイしないことです。タイルとベースマップ上のフィーチャの間にかなり大きなギャップがあります。不適切なオーバーレイ

(WGS84のデータを使用して)構成ファイルのプロジェクションとしてWGS84を使用すると、空のタイルが表示され、他のエラーは発生しません。

タイルを正しくオーバーレイするにはどうすればよいですか?WGS84が機能しないのはなぜですか?


このスレッドをチェックしてください、それが役立つかもしれません、私はそれが球形のメルカトルとメルカトルの違いによるものだと思います。gis.stackexchange.com/questions/34276/...
グレンのPlas

以前にスレッドを確認しましたが、これは問題だとは思いません。リーフレット(タイルを表示するために使用しています)は、球状メルカトル図法をデフォルトの投影法としています
Hasan Mustafa

1
QGISでpostgis dbを開き、レイヤーのプロパティを確認します。あなたのデータはとして保存されていません+proj=merc +lon_0=0 +lat_ts=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs。またはqryで確認してください:SELECT * FROM geometry_columnssridが実際に900913かどうかを確認してください
Glenn Plas

1
それも最初は私が思っていたものですが、Postgresにデータをインポートするときは、私はSRIDが本当にそうであるように、かなり注意深く行いました900913。SRIDでも試してみ3857ました(投影をQGISで3857に変更した後)が、タイルスタックが混合SRIDでは機能しないというエラーが表示されます。
Hasan Mustafa

回答:


5

タイルを正しくオーバーレイしました。問題は、ArcMapとQGISの両方によって行われた再投影にありました。ArcMapとQGISで再投影されたシェープファイルをチェックしたところ、正しくオーバーレイされ、正しいSRIDがありました。

そのため4326、shp2pgsqlでSRID を使用してPostgreSQLのWGS84にシェープファイルをインポートし、クエリを使用しST_Transfromてテーブル内900913のテーブルを再投影するために使用しました。

ALTER TABLE isl_roads 
   ALTER COLUMN geom 
   TYPEジオメトリ(MultiLineString、900913) 
   USING ST_Transform(geom、900913);

重ね合わせ

しかし、まだでタイルを生成できませんWGS84。何が欠けているのですか?


2

フィードバックのためのTx、これは将来この質問を見つける他の人にとって重要です。tilestache構成でWGS84を使用していますか?また、設定する必要がある「投影」属性もあります。

あなたはVecTileクラスを使用していますが、私はまだそのクラスで遊んでいませんが、次のように、別のプロバイダーでそれを機能させることができます(または、少なくともトラブルシューティングのヒント/アイデアが得られます)。ドライバーをpostgisではなくpostgresqlに変更し、tablenameの代わりにクエリを指定できます。しかし、私が「投影」属性についてそれを示した理由。

                    "vector-postgis-polygon":
                {
                        "projection": "WGS84",
                        "allowed origin": "*",
                        "provider": {"name": "vector", "driver": "postgis",
                                "parameters": {
                                        "dbname": "database",
                                        "user": "username",
                                        "password": "password",
                                        "table": "planet_osm_polygon"
                                }
                        },
                        "projected": true,
                        "clipped": false,
                        "verbose": true,
                        "preview": { "lat": 50.97513, "lon": 4.46905, "zoom": 18, "ext": "geojson" }
                }

WGS84別のプロバイダーとprojected属性でも使用してみましたが、それでも同じ結果が得られますが、エラーはなく空の機能があります。今私が持っているspherical mercatorタイルが正しくオーバーレイ私は使用せずに行うことができますと思いますWGS84が、それでも、私は問題が何であるかを把握したいと思います。
Hasan Mustafa

私がドキュメントから理解したことは、あなたが投影として球形メルカトルを使用し、projectedをtrueに設定することです。しかし、正直なところ、それを機能させることもできません。正しいタイルを生成できますが、ベクターを作成しようとすると、使用する境界ボックスが正しくないようです。でも試してみる価値はありました。
Glenn Plas 2016

1
私は属性spherical mercatorを定義せずに使用していprojectedます(falseデフォルトで)、それは私にとってはうまくいきます。以下のためにWGS84それがバウンディングボックスに問題がある可能性がありますが、私はわからないんだけど、私は、ベクトルと同じ問題を持っています。フィードバックをありがとう、あなたは私を正しい道に導きました。
Hasan Mustafa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.