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.
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?
la source
+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_columns
voyez si srid est bien 900913900913
. Je l'ai également essayé avec SRID3857
(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.Réponses:
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
4326
avec shp2pgsql puis utiliséST_Transfrom
pour reprojeter les tables dans900913
les tables à l'aide d'une requête:Mais je ne parviens toujours pas à générer les tuiles
WGS84
, qu'est-ce qui me manque?la source
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é».
la source
WGS84
avec différents fournisseurs et l'projected
attribut également, mais cela me donne toujours le même résultat, pas d'erreurs mais des fonctionnalités vides. Maintenant que j'ai desspherical mercator
tuiles superposées correctement, je pense que je peux me débrouiller sans utiliser,WGS84
mais j'aimerais quand même comprendre quel est le problème.spherical mercator
sans définir l'projected
attribut (c'estfalse
par défaut) et cela fonctionne bien pour moi. CarWGS84
cela 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.