Vấn đề về lớp phủ của TileStache Vector


8

Tôi đang sử dụng TileStache để phục vụ các ô vector của riêng mình bằng cách sử dụng nguồn dữ liệu postgis. Đầu tiên tôi chiếu lại các shapefiles mà tôi đã sử dụng ArcMap (được phân phối lại thành Web Mercator (Spilary Sphere)) và tải chúng trong Postgres bằng shp2pgsql (SRID: 900913).

Tôi có thể tạo Gạch bằng tệp cấu hình này:

{
  "bộ đệm":
  {
    "tên": "kiểm tra",
    "đường dẫn": "/ tmp / stache",
    "ô": "0000"

  },
  "lớp": 
  {     
    "tpl":
    {       
        "nguồn gốc được phép": "*",
        "chiếu": "Mercator hình cầu",
        "các nhà cung cấp":
        {
            "class": "TileStache. Goodies.VecTiles: Nhà cung cấp",                        
            "kwargs": {
                "dbinfo":
                {
                    "máy chủ": "localhost",
                    "người dùng": "postgres",
                    "mật khẩu": "postgres",
                    "cơ sở dữ liệu": "tpl"
                },
                "truy vấn":
                {
                    "7": "CHỌN geom AS __geometry __, tên, mức độ ưu tiên TỪ isl_roads_sm WHERE ưu tiên IN (5,4) - zoom 7+",
                    "8": "CHỌN geom AS __geometry __, tên, mức độ ưu tiên TỪ isl_roads_sm WHERE ưu tiên IN (5,4)",
                    "9": "CHỌN geom AS __geometry __, tên, mức độ ưu tiên TỪ isl_roads_sm WHERE ưu tiên IN (5,4)",
                    "10": "CHỌN geom AS __geometry __, tên, mức độ ưu tiên TỪ isl_roads_sm WHERE ưu tiên IN (5,4)",
                    "11": "CHỌN geom AS __geometry __, tên, mức độ ưu tiên TỪ isl_roads_sm WHERE ưu tiên IN (5,4,3,2)",
                    "12": "CHỌN geom AS __geometry __, tên, mức độ ưu tiên TỪ isl_roads_sm WHERE ưu tiên IN (5,4,3,2)",
                    "13": "CHỌN geom AS __geometry __, tên, mức độ ưu tiên TỪ isl_roads_sm WHERE ưu tiên IN (5,4,3,2)",
                    "14": "CHỌN geom AS __geometry __, tên, mức độ ưu tiên TỪ isl_roads_sm - zoom 14+"
                }
            }
        },
        "xem trước": {"ext": "json"}
    }
  }
}

Tôi đang kết xuất các ô được tạo bằng Leaflets TileLayer.GeoJSON. Vấn đề tôi gặp phải là các ô không chồng lấp với sơ đồ cơ sở, có khoảng cách khá lớn giữa các ô của tôi và các tính năng trên sơ đồ cơ sở.Lớp phủ không chính xác

Khi tôi sử dụng WGS84 làm hình chiếu trong tệp cấu hình (sử dụng dữ liệu trong WGS84), tôi nhận được các ô trống, không có lỗi nào khác.

Làm thế nào tôi có thể có được các lớp phủ chính xác? Tại sao WGS84 không hoạt động?


Kiểm tra chủ đề này, nó có thể giúp đỡ, tôi nghĩ rằng đó là do sự khác biệt giữa các công cụ kết thúc cuối cùng hình cầu. gis.stackexchange.com/questions/34276/ Ấn
Glenn Plas

Tôi đã xem qua các chủ đề trước đó và tôi không nghĩ đó là vấn đề bởi vì Leaflet (mà tôi đang sử dụng để hiển thị các ô) lấy Spherical Mercator làm hình chiếu mặc định
Hasan Mustafa

1
Mở db postgis của bạn trong QGIS và kiểm tra các thuộc tính cho lớp. Tôi đặt cược dữ liệu của bạn không được lưu trữ như +proj=merc +lon_0=0 +lat_ts=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs. Hoặc kiểm tra với một qry : SELECT * FROM geometry_columns, xem srid có thực sự là 900913
Glenn Plas

1
Đó cũng là những gì tôi nghĩ lúc đầu, nhưng tôi đã khá cẩn thận khi nhập dữ liệu trong Postgres, SRID của tôi thực sự 900913. Tôi cũng đã thử nó với SRID 3857(sau khi điều chỉnh phép chiếu lên 3857 trong QGIS) nhưng điều đó chỉ gây ra lỗi cho tôi rằng cá rô phi không hoạt động với SRID hỗn hợp.
Hasan Mustafa

Câu trả lời:


5

Tôi có gạch để lớp phủ chính xác. Vấn đề là trong phép chiếu lại được thực hiện bởi cả ArcMap và QGIS. Khi tôi đang kiểm tra các shapefile bị loại bỏ trong ArcMap và QGIS, chúng được phủ chính xác và có SRID chính xác.

Vì vậy, tôi đã nhập các shapefiles trong WGS84 trong PostgreSQL bằng SRID 4326với shp2pgsql sau đó được sử dụng ST_Transfromđể từ chối các bảng trong 900913bảng bằng truy vấn:

ALTER TABLE isl_roads 
   ALTER COLUMN geom 
   Hình học LOẠI (MultiLineString, 900913) 
   SỬ DỤNG ST_Transform (geom, 900913);

Overlaid

Nhưng tôi vẫn không thể tạo ra các ô trong WGS84đó, tôi đang thiếu cái gì?


2

Tx cho phản hồi, điều này rất quan trọng đối với những người khác tìm thấy câu hỏi này trong tương lai. Bạn đang sử dụng WGS84 trong cấu hình cá rô phi của bạn? Ngoài ra còn có một thuộc tính 'dự kiến' mà bạn có thể phải đặt.

Bạn đang sử dụng lớp VecTile, tôi chưa chơi với lớp đó, nhưng bạn có thể làm cho nó hoạt động (hoặc ít nhất nó sẽ cung cấp cho bạn một số đầu mối / ý tưởng để khắc phục sự cố) với một nhà cung cấp khác, như thế này. Bạn có thể thay đổi trình điều khiển thành postgresql thay vì postgis và đưa ra các truy vấn thay vì tablename. Nhưng lý do tôi chỉ ra nó cho thuộc tính 'chiếu'.

                    "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" }
                }

Tôi đã thử sử dụng WGS84với các nhà cung cấp khác nhau và projectedthuộc tính, nhưng điều đó vẫn mang lại cho tôi cùng một kết quả, không có lỗi nhưng các tính năng trống. Bây giờ tôi có các spherical mercatorlớp phủ đúng cách, tôi nghĩ rằng tôi có thể thực hiện mà không cần sử dụng WGS84nhưng tôi vẫn muốn tìm hiểu vấn đề là gì.
Hasan Mustafa

Điều tôi hiểu từ các tài liệu là bạn sử dụng công cụ đánh bóng hình cầu làm hình chiếu và đặt dự kiến ​​thành đúng. Nhưng thành thật mà nói, không thể làm cho nó hoạt động được. Tôi có thể tạo các ô chính xác nhưng một khi tôi cố gắng tạo các vectơ, có vẻ như hộp giới hạn mà nó sử dụng là không chính xác. đáng để thử mặc dù.
Glenn Plas

1
Tôi đang sử dụng spherical mercatormà không xác định projectedthuộc tính ( falsetheo mặc định) và nó hoạt động tốt với tôi. Đối với WGS84nó có thể là một vấn đề với hộp giới hạn nhưng tôi không chắc chắn, tôi có cùng một vấn đề với các vectơ. Cảm ơn các phản hồi mặc dù, bạn đặt tôi trên con đường đúng.
Hasan Mustafa
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.