8 votos

Problema de superposición de azulejos vectoriales de TileStache

Estoy utilizando TileStache para servir mis propios mosaicos vectoriales utilizando una fuente de datos postgis. Primero reproyecté los shapefiles que tenía usando ArcMap ( reproyectados a Web Mercator (Esfera Auxiliar)) y los cargué en Postgres usando shp2pgsql (SRID:900913).

Soy capaz de generar las baldosas utilizando este archivo de configuración:

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

  },
  "layers": 
  {     
    "tpl":
    {       
        "allowed origin":"\*",
        "projection": "spherical mercator",
        "provider":
        {
            "class": "TileStache.Goodies.VecTiles:Provider",                        
            "kwargs":{
                "dbinfo":
                {
                    "host":"localhost",
                    "user":"postgres",
                    "password":"postgres",
                    "database":"tpl"
                },
                "queries":
                {
                    "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  -- zoom 14+"
                }
            }
        },
        "preview":{"ext":"json"}
    }
  }
}

Estoy renderizando las baldosas generadas con Leaflets TileLayer.GeoJSON. El problema que tengo es que las baldosas no se superponen con el mapa base, hay un espacio bastante grande entre mis baldosas y las características en el mapa base. Incorrect Overlay

Cuando utilizo WGS84 como proyección en el archivo de configuración (utilizando datos en WGS84) obtengo baldosas vacías, sin otros errores.

¿Cómo puedo conseguir que los azulejos se superpongan correctamente? Por qué no funciona el WGS84?

0 votos

Revisa este hilo, puede que te ayude, creo que se debe a la diferencia entre mercator esférico y mercator final. gis.stackexchange.com/questions/34276/

0 votos

He mirado en el hilo anterior y no creo que sea el problema porque Leaflet (que estoy usando para mostrar los azulejos) lleva Mercator esférico como proyección por defecto

1 votos

Abra su db postgis en QGIS y compruebe las propiedades de la capa. Seguro que tus datos no están almacenados como +proj=merc +lon_0=0 +lat_ts=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs . O comprueba con un qry: SELECT * FROM geometry_columns , ver si srid es efectivamente 900913

5voto

EasilyBaffled Puntos 106

He conseguido que las baldosas se superpongan correctamente. El problema estaba en la reproyección realizada tanto por ArcMap como por QGIS. Cuando comprobaba los shapefiles reproyectados en ArcMap y QGIS, se superponían correctamente y tenían los SRIDs correctos.

Así que importé los shapefiles en WGS84 en PostgreSQL usando el SRID 4326 con shp2pgsql y luego utilizar ST_Transfrom para reproyectar las tablas en 900913 las tablas mediante una consulta:

ALTER TABLE isl\_roads 
   ALTER COLUMN geom 
   TYPE Geometry(MultiLineString, 900913) 
   USING ST\_Transform(geom, 900913);

Overlaid

Pero todavía no soy capaz de generar los azulejos en WGS84 ¿Qué es lo que me falta?

2voto

mcchots Puntos 329

Tx por los comentarios, esto es importante para otros que encuentren esta pregunta en el futuro. ¿Estás usando WGS84 en tu configuración de tilestache? También hay un atributo "proyectado" que podrías tener que configurar.

Estás usando la clase VecTile, no he jugado con ella todavía, pero podrías conseguir que funcione (o al menos te dará alguna pista/idea para solucionar problemas) con un proveedor diferente, como este. Puedes cambiar el driver a postgresql en lugar de postgis y dar las consultas en lugar de tablename. Pero la razón por la que lo mostré es por el atributo 'projected'.

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

0 votos

Intenté usar WGS84 con diferentes proveedores y el projected pero me sigue dando el mismo resultado, sin errores pero con las características vacías. Ahora que tengo spherical mercator azulejos superpuestos correctamente creo que puedo arreglármelas sin usar WGS84 pero aún así me gustaría averiguar cuál es el problema.

0 votos

Lo que entendí de los docs es que se usa mercator esférico como proyección y se pone projected a true. Pero sinceramente, tampoco consigo que funcione. Puedo generar los azulejos correctos, pero una vez que trato de crear vectores, parece que el cuadro delimitador que utiliza no es correcto.

1 votos

Estoy usando spherical mercator sin definir el projected (su false por defecto) y eso funciona bien para mí. Para WGS84 podría ser un problema con el bounding box pero no estoy seguro, tengo el mismo problema con los vectores. Gracias por los comentarios, sin embargo, me puso en el camino correcto.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X