Masalah Overlay TileStache Vector

8

Saya menggunakan TileStache untuk melayani ubin vektor saya sendiri menggunakan sumber data postgis. Pertama saya memproyeksikan kembali shapefile yang saya gunakan ArcMap (diproyeksikan kembali ke Web Mercator (Auxilary Sphere)) dan memuatnya di Postgres menggunakan shp2pgsql (SRID: 900913).

Saya dapat membuat ubin menggunakan file konfigurasi ini:

{
  "cache":
  {
    "name": "test",
    "path": "/ tmp / stache",
    "umask": "0000"

  },
  "lapisan": 
  {     
    "tpl":
    {       
        "asal yang diizinkan": "*",
        "proyeksi": "mercator bola",
        "pemberi":
        {
            "class": "TileStache.Goodies.VecTiles: Provider",                        
            "kwargs": {
                "dbinfo":
                {
                    "host": "localhost",
                    "pengguna": "postgres",
                    "kata sandi": "postgres",
                    "database": "tpl"
                },
                "pertanyaan":
                {
                    "7": "SELECT geom AS __geometry __, nama, prioritas DARI isl_roads_sm WHERE priority IN (5,4) - zoom 7+",
                    "8": "SELECT geom AS __geometry __, nama, prioritas DARI isl_roads_sm WHERE priority IN (5,4)",
                    "9": "SELECT geom AS __geometry __, nama, prioritas DARI isl_roads_sm WHERE priority IN (5,4)",
                    "10": "SELECT geom AS __geometry __, nama, prioritas DARI isl_roads_sm WHERE priority IN (5,4)",
                    "11": "SELECT geom AS __geometry __, nama, prioritas DARI isl_roads_sm WHERE priority IN (5,4,3,2)",
                    "12": "SELECT geom AS __geometry __, nama, prioritas DARI isl_roads_sm WHERE priority IN (5,4,3,2)",
                    "13": "SELECT geom AS __geometry __, nama, prioritas DARI isl_roads_sm WHERE priority IN (5,4,3,2)",
                    "14": "SELECT geom AS __geometry __, nama, prioritas DARI isl_roads_sm - zoom 14+"
                }
            }
        },
        "preview": {"ext": "json"}
    }
  }
}

Saya merender ubin yang dihasilkan menggunakan Leaflets TileLayer.GeoJSON. Masalah yang saya miliki adalah bahwa ubin tidak overlay dengan basemap, ada celah yang cukup besar antara ubin saya dan fitur-fitur pada basemap.Hamparan salah

Ketika saya menggunakan WGS84 sebagai proyeksi dalam file konfigurasi (menggunakan data dalam WGS84) saya mendapatkan ubin kosong, tidak ada kesalahan lain.

Bagaimana saya bisa membuat ubin untuk overlay dengan benar? Mengapa WGS84 tidak berfungsi?

Hasan Mustafa
sumber
Periksa utas ini, mungkin membantu, saya pikir itu disebabkan oleh perbedaan antara spator mercator akhir. gis.stackexchange.com/questions/34276/…
Glenn Plas
Saya melihat melalui utas sebelumnya dan saya tidak berpikir itu masalah karena Leaflet (yang saya gunakan untuk menampilkan ubin) mengambil Spherical Mercator sebagai proyeksi default
Hasan Mustafa
1
Buka postgis db Anda di QGIS dan periksa properti untuk layer. Saya yakin data Anda tidak disimpan sebagai +proj=merc +lon_0=0 +lat_ts=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs. Atau periksa dengan qry:, SELECT * FROM geometry_columnslihat apakah srid memang 900913
Glenn Plas
1
Itulah yang saya pikirkan pada awalnya juga, tetapi saya cukup berhati-hati ketika mengimpor data di Postgres, memang SRID saya 900913. Saya mencobanya dengan SRID 3857juga (setelah mengejar proyeksi ke 3857 di QGIS) tetapi itu hanya memberi saya kesalahan mengatakan bahwa tilestache tidak bekerja dengan SRID campuran.
Hasan Mustafa

Jawaban:

5

Saya mendapatkan ubin untuk dilapis dengan benar. Masalahnya adalah pada proyeksi ulang yang dilakukan oleh ArcMap dan QGIS. Ketika saya sedang memeriksa shapefile yang diproyeksi ulang di ArcMap dan QGIS, mereka overlay dengan benar dan memiliki SRID yang benar.

Jadi saya mengimpor shapefile di WGS84 di PostgreSQL menggunakan SRID 4326dengan shp2pgsql kemudian digunakan ST_Transfromuntuk memproyeksi ulang tabel dalam 900913tabel menggunakan kueri:

ALTER TABLE isl_roads 
   ALTER COLUMN geom 
   TYPE Geometry (MultiLineString, 900913) 
   MENGGUNAKAN ST_Transformasi (geom, 900913);

Overlay

Tetapi saya masih tidak dapat menghasilkan ubin WGS84, Apa yang saya lewatkan?

Hasan Mustafa
sumber
2

Untuk umpan balik, ini penting bagi orang lain yang menemukan pertanyaan ini di masa depan. Apakah Anda menggunakan WGS84 dalam konfigurasi tilestache Anda? Ada juga atribut 'proyeksi' yang mungkin harus Anda atur.

Anda menggunakan kelas VecTile, saya belum bermain dengan yang itu, tetapi Anda mungkin bisa membuatnya bekerja (atau setidaknya itu akan memberi Anda beberapa petunjuk / ide untuk memecahkan masalah) dengan penyedia yang berbeda, seperti ini. Anda bisa mengubah driver menjadi postgresql bukan postgis dan memberikan kueri alih-alih nama tab. Tapi alasan saya menunjukkannya untuk atribut 'proyeksi'.

                    "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" }
                }
Glenn Plas
sumber
Saya mencoba menggunakan WGS84dengan penyedia yang berbeda dan projectedatributnya juga tetapi itu masih memberi saya hasil yang sama, tidak ada kesalahan tetapi fitur kosong. Sekarang saya memiliki spherical mercatorubin overlay dengan benar, saya pikir saya bisa melakukannya tanpa menggunakan WGS84tetapi saya masih ingin mencari tahu apa masalahnya.
Hasan Mustafa
apa yang saya pahami dari dokumen adalah bahwa Anda menggunakan spherical mercator sebagai proyeksi dan mengatur proyeksi ke true. Tetapi dalam semua kejujuran, tidak bisa membuatnya bekerja juga. Saya dapat menghasilkan ubin yang benar tetapi begitu saya mencoba membuat vektor, tampaknya kotak pembatas yang digunakannya tidak benar. patut dicoba.
Glenn Plas
1
Saya menggunakan spherical mercatortanpa mendefinisikan projectedatribut (secara falsedefault) dan itu berfungsi dengan baik untuk saya. Untuk WGS84itu bisa menjadi masalah dengan kotak pembatas tetapi saya tidak yakin, saya memiliki masalah yang sama dengan vektor. Terima kasih atas umpan baliknya, Anda menempatkan saya di jalan yang benar.
Hasan Mustafa