Problema de superposición de mosaicos vectoriales de TileStache

8

Estoy usando TileStache para servir mis propios mosaicos vectoriales usando una fuente de datos postgis. Primero, volví a proyectar los archivos de forma que tenía usando ArcMap (reproyectado en Web Mercator (Esfera auxiliar)) y los cargué en Postgres usando shp2pgsql (SRID: 900913).

Puedo generar los mosaicos usando este archivo de configuración:

{
  "cache":
  {
    "nombre": "prueba",
    "ruta": "/ tmp / stache",
    "umask": "0000"

  },
  "capas": 
  {     
    "tpl":
    {       
        "origen permitido": "*",
        "proyección": "mercator esférico",
        "proveedor":
        {
            "class": "TileStache.Goodies.VecTiles: Provider",                        
            "kwargs": {
                "dbinfo":
                {
                    "host": "localhost",
                    "usuario": "postgres",
                    "contraseña": "postgres",
                    "base de datos": "tpl"
                },
                "consultas":
                {
                    "7": "SELECCIONE geom AS __geometría __, nombre, prioridad DESDE isl_roads_sm DONDE prioridad EN (5,4) - zoom 7+",
                    "8": "SELECCIONE geom AS __geometría __, nombre, prioridad DESDE isl_roads_sm DONDE prioridad EN (5,4)",
                    "9": "SELECCIONE geom AS __geometría __, nombre, prioridad DESDE isl_roads_sm DONDE prioridad EN (5,4)",
                    "10": "SELECCIONE geom AS __geometría __, nombre, prioridad DESDE isl_roads_sm DONDE prioridad EN (5,4)",
                    "11": "SELECCIONE geom AS __geometría __, nombre, prioridad DESDE isl_roads_sm DONDE prioridad EN (5,4,3,2)",
                    "12": "SELECCIONE geom AS __geometría __, nombre, prioridad DESDE isl_roads_sm DONDE prioridad EN (5,4,3,2)",
                    "13": "SELECCIONE geom AS __geometría __, nombre, prioridad DESDE isl_roads_sm DONDE prioridad EN (5,4,3,2)",
                    "14": "SELECCIONE geom AS __geometría __, nombre, prioridad DESDE isl_roads_sm - zoom 14+"
                }
            }
        },
        "vista previa": {"ext": "json"}
    }
  }
}

Estoy renderizando los mosaicos generados usando Leaflets TileLayer.GeoJSON. El problema que tengo es que los mosaicos no se superponen con el mapa base, hay una brecha bastante grande entre mis mosaicos y las características en el mapa base.Superposición incorrecta

Cuando uso WGS84 como la proyección en el archivo de configuración (usando datos en WGS84) obtengo mosaicos vacíos, no hay otros errores.

¿Cómo puedo hacer que los mosaicos se superpongan correctamente? ¿Por qué no funciona WGS84?

Hasan Mustafa
fuente
Revise este hilo, podría ayudar, creo que se debe a la diferencia entre mercator esférico y mercator. gis.stackexchange.com/questions/34276/…
Glenn Plas
Miré a través del hilo antes y no creo que ese sea el problema porque Leaflet (que estoy usando para mostrar los mosaicos) toma a Spherical Mercator como la proyección predeterminada
Hasan Mustafa
1
Abra su postgis db en QGIS y verifique las propiedades de la capa. Apuesto a que sus datos no se almacenan como +proj=merc +lon_0=0 +lat_ts=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs. O consulte con un qry: SELECT * FROM geometry_columnsvea si srid es realmente 900913
Glenn Plas
1
Eso fue lo que pensé al principio también, pero tuve mucho cuidado cuando importé los datos en Postgres, mi SRID es de hecho 900913. También lo probé con SRID 3857(después de cambiar la proyección a 3857 en QGIS), pero eso me da un error que dice que tiletache no funciona con SRID mixtos.
Hasan Mustafa

Respuestas:

5

Tengo las fichas para superponer correctamente. El problema estaba en la reproyección realizada por ArcMap y QGIS. Cuando estaba revisando los archivos de forma reproyectados en ArcMap y QGIS, se superponían correctamente y tenían los SRID correctos.

Entonces 4326importé los archivos de forma en WGS84 en PostgreSQL usando el SRID con shp2pgsql y luego los ST_Transfromreproyecté en 900913las tablas usando una consulta:

ALTER TABLE isl_roads 
   ALTERAR COLUMNA geom 
   TIPO Geometría (MultiLineString, 900913) 
   UTILIZANDO ST_Transform (geom, 900913);

Superpuesto

Pero todavía no puedo generar los mosaicos WGS84, ¿qué es lo que me falta?

Hasan Mustafa
fuente
2

Gracias por los comentarios, esto es importante para otros que encuentren esta pregunta en el futuro. ¿Está utilizando WGS84 en su configuración de mosaico? También hay un atributo 'proyectado' que puede que tenga que configurar.

Está utilizando la clase VecTile, todavía no he jugado con esa, pero es posible que pueda hacer que funcione (o al menos le dará algunas pistas / ideas para solucionar) con un proveedor diferente, como este. Puede cambiar el controlador a postgresql en lugar de postgis y dar las consultas en lugar de tablename. Pero la razón por la que lo mostré para el atributo 'proyectado'.

                    "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
fuente
Intenté usar WGS84con diferentes proveedores y el projectedatributo también, pero eso todavía me da el mismo resultado, sin errores pero con características vacías. Ahora que tengo los spherical mercatormosaicos superpuestos correctamente, creo que puedo hacerlo sin usar, WGS84pero aún así me gustaría descubrir cuál es el problema.
Hasan Mustafa
Lo que entendí de los documentos es que usted usa mercator esférico como proyección y establece proyectado en verdadero. Pero con toda honestidad, tampoco puedo hacer que funcione. Puedo generar los mosaicos correctos, pero una vez que trato de crear vectores, parece que el cuadro delimitador que usa no es correcto. valió la pena intentarlo sin embargo.
Glenn Plas
1
Estoy usando spherical mercatorsin definir el projectedatributo (es falsepor defecto) y eso funciona bien para mí. Porque WGS84podría ser un problema con el cuadro delimitador, pero no estoy seguro, tengo el mismo problema con los vectores. Sin embargo, gracias por los comentarios, me pusiste en el camino correcto.
Hasan Mustafa