Problème de superposition de tuiles vectorielles TileStache

8

J'utilise TileStache pour servir mes propres tuiles vectorielles à l'aide d'une source de données postgis. J'ai d'abord re-projeté les fichiers de formes que j'avais en utilisant ArcMap (reprojeté à Web Mercator (sphère auxiliaire)) et les ai chargés dans Postgres en utilisant shp2pgsql (SRID: 900913).

Je peux générer les tuiles en utilisant ce fichier de configuration:

{
  "cache":
  {
    "nom": "test",
    "chemin": "/ tmp / stache",
    "umask": "0000"

  },
  "couches": 
  {     
    "tpl":
    {       
        "origine autorisée": "*",
        "projection": "mercator sphérique",
        "fournisseur":
        {
            "class": "TileStache.Goodies.VecTiles: Provider",                        
            "kwargs": {
                "dbinfo":
                {
                    "hôte": "localhost",
                    "user": "postgres",
                    "mot de passe": "postgres",
                    "base de données": "tpl"
                },
                "requêtes":
                {
                    "7": "SELECT geom AS __geometry __, nom, priorité FROM isl_roads_sm WHERE priorité IN (5,4) - zoom 7+",
                    "8": "SELECT geom AS __geometry __, nom, priorité FROM isl_roads_sm WHERE priorité IN (5,4)",
                    "9": "SELECT geom AS __geometry __, nom, priorité FROM isl_roads_sm WHERE priorité IN (5,4)",
                    "10": "SELECT geom AS __geometry __, nom, priorité FROM isl_roads_sm WHERE priorité IN (5,4)",
                    "11": "SELECT geom AS __geometry __, nom, priorité FROM isl_roads_sm WHERE priorité IN (5,4,3,2)",
                    "12": "SELECT geom AS __geometry __, nom, priorité FROM isl_roads_sm WHERE priorité IN (5,4,3,2)",
                    "13": "SELECT geom AS __geometry __, nom, priorité FROM isl_roads_sm WHERE priorité IN (5,4,3,2)",
                    "14": "SELECT geom AS __geometry __, nom, priorité FROM isl_roads_sm - zoom 14+"
                }
            }
        },
        "aperçu": {"ext": "json"}
    }
  }
}

Je rend les tuiles générées à l'aide de Leaflets TileLayer.GeoJSON. Le problème que j'ai, c'est que les tuiles ne se superposent pas au fond de carte, il y a un écart assez important entre mes tuiles et les fonctionnalités du fond de carte.Superposition incorrecte

Lorsque j'utilise WGS84 comme projection dans le fichier de configuration (en utilisant les données dans WGS84), je reçois des tuiles vides, pas d'autres erreurs.

Comment obtenir une superposition correcte des tuiles? Pourquoi le WGS84 ne fonctionne-t-il pas?

Hasan Mustafa
la source
Vérifiez ce fil, cela pourrait aider, je pense que cela est dû à la différence entre le mercator sphérique et le mercator final. gis.stackexchange.com/questions/34276/…
Glenn Plas
J'ai regardé à travers le fil avant et je ne pense pas que ce soit le problème parce que Leaflet (que j'utilise pour afficher les tuiles) prend Spherical Mercator comme projection par défaut
Hasan Mustafa
1
Ouvrez votre postgis db dans QGIS et vérifiez les propriétés de la couche. Je parie que vos données ne sont pas stockées sous +proj=merc +lon_0=0 +lat_ts=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs. Ou vérifiez avec un qry:, SELECT * FROM geometry_columnsvoyez si srid est bien 900913
Glenn Plas
1
C'est ce que je pensais au début aussi, mais j'ai été assez prudent lorsque j'ai importé les données dans Postgres, mon SRID l'est en effet 900913. Je l'ai également essayé avec SRID 3857(après avoir modifié la projection à 3857 dans QGIS), mais cela me donne juste une erreur disant que tilestache ne fonctionne pas avec des SRID mixtes.
Hasan Mustafa

Réponses:

5

J'ai fait recouvrir correctement les tuiles. Le problème résidait dans la reprogrammation effectuée par ArcMap et QGIS. Lorsque je vérifiais les fichiers de formes reprojetés dans ArcMap et QGIS, ils se superposaient correctement et avaient les bons SRID.

J'ai donc importé les fichiers de formes dans WGS84 dans PostgreSQL en utilisant le SRID 4326avec shp2pgsql puis utilisé ST_Transfrompour reprojeter les tables dans 900913les tables à l'aide d'une requête:

ALTER TABLE isl_roads 
   ALTER COLUMN geom 
   TYPE Géométrie (MultiLineString, 900913) 
   UTILISATION DE ST_Transform (geom, 900913);

Superposé

Mais je ne parviens toujours pas à générer les tuiles WGS84, qu'est-ce qui me manque?

Hasan Mustafa
la source
2

Tx pour les commentaires, c'est important pour ceux qui trouveront cette question à l'avenir. Utilisez-vous WGS84 dans votre configuration tilestache? Il existe également un attribut «projeté» que vous devrez peut-être définir.

Vous utilisez la classe VecTile, je n'ai pas encore joué avec celle-ci, mais vous pourrez peut-être la faire fonctionner (ou au moins cela vous donnera des indices / idées à dépanner) avec un autre fournisseur, comme celui-ci. Vous pouvez changer le pilote en postgresql au lieu de postgis et donner les requêtes au lieu de tablename. Mais la raison pour laquelle je l'ai montré pour l'attribut «projeté».

                    "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
la source
J'ai essayé d'utiliser WGS84avec différents fournisseurs et l' projectedattribut également, mais cela me donne toujours le même résultat, pas d'erreurs mais des fonctionnalités vides. Maintenant que j'ai des spherical mercatortuiles superposées correctement, je pense que je peux me débrouiller sans utiliser, WGS84mais j'aimerais quand même comprendre quel est le problème.
Hasan Mustafa
ce que j'ai compris des documents, c'est que vous utilisez un mercator sphérique comme projection et que vous définissez la projection sur true. Mais en toute honnêteté, je ne peux pas le faire fonctionner non plus. Je peux générer les tuiles correctes mais une fois que j'essaie de créer des vecteurs, il semble que la boîte englobante qu'il utilise n'est pas correcte. valait bien un essai cependant.
Glenn Plas
1
J'utilise spherical mercatorsans définir l' projectedattribut (c'est falsepar défaut) et cela fonctionne bien pour moi. Car WGS84cela pourrait être un problème avec la boîte englobante mais je ne suis pas sûr, j'ai le même problème avec les vecteurs. Merci pour vos commentaires, vous m'avez mis sur la bonne voie.
Hasan Mustafa