Problem mit der Überlagerung von TileStache-Vektorkacheln


8

Ich verwende TileStache, um meine eigenen Vektorkacheln mithilfe einer Postgis-Datenquelle bereitzustellen. Zuerst habe ich die Shapefiles, die ich mit ArcMap hatte (neu projiziert in Web Mercator (Auxilary Sphere)), neu projiziert und sie mit shp2pgsql (SRID: 900913) in Postgres geladen.

Ich kann die Kacheln mit dieser Konfigurationsdatei generieren:

{
  "Zwischenspeicher":
  {
    "name": "test",
    "Pfad": "/ tmp / stache",
    "umask": "0000"

  },
  "Schichten": 
  {     
    "tpl":
    {       
        "erlaubter Ursprung": "*",
        "Projektion": "sphärischer Mercator",
        "Anbieter":
        {
            "class": "TileStache.Goodies.VecTiles: Provider",                        
            "kwargs": {
                "dbinfo":
                {
                    "host": "localhost",
                    "user": "postgres",
                    "Passwort": "postgres",
                    "Datenbank": "tpl"
                },
                "Abfragen":
                {
                    "7": "SELECT geom AS __geometry __, Name, Priorität FROM isl_roads_sm WHERE Priorität IN (5,4) - Zoom 7+",
                    "8": "SELECT geom AS __geometry __, Name, Priorität FROM isl_roads_sm WHERE Priorität IN (5,4)",
                    "9": "SELECT geom AS __geometry __, Name, Priorität FROM isl_roads_sm WHERE Priorität IN (5,4)",
                    "10": "SELECT geom AS __geometry __, Name, Priorität FROM isl_roads_sm WHERE Priorität IN (5,4)",
                    "11": "SELECT geom AS __geometry __, Name, Priorität FROM isl_roads_sm WHERE Priorität IN (5,4,3,2)",
                    "12": "SELECT geom AS __geometry __, Name, Priorität FROM isl_roads_sm WHERE Priorität IN (5,4,3,2)",
                    "13": "SELECT geom AS __geometry __, Name, Priorität FROM isl_roads_sm WHERE Priorität IN (5,4,3,2)",
                    "14": "SELECT geom AS __geometry __, Name, Priorität FROM isl_roads_sm - Zoom 14+"
                }}
            }}
        },
        "Vorschau": {"ext": "json"}
    }}
  }}
}}

Ich rendere die mit Leaflets TileLayer.GeoJSON generierten Kacheln. Das Problem, das ich habe, ist, dass die Kacheln nicht mit der Grundkarte überlagern. Es gibt eine ziemlich große Lücke zwischen meinen Kacheln und den Merkmalen auf der Grundkarte.Falsche Überlagerung

Wenn ich WGS84 als Projektion in der Konfigurationsdatei verwende (unter Verwendung von Daten in WGS84), erhalte ich leere Kacheln, keine weiteren Fehler.

Wie kann ich die Kacheln richtig überlagern? Warum funktioniert WGS84 nicht?


Überprüfen Sie diesen Thread, es könnte helfen, ich denke, es liegt am Unterschied zwischen sphärischen Mercator und Mercator. gis.stackexchange.com/questions/34276/…
Glenn Plas

Ich habe den Thread zuvor durchgesehen und glaube nicht, dass dies das Problem ist, da Leaflet (mit dem ich die Kacheln anzeige) Spherical Mercator als Standardprojektion verwendet
Hasan Mustafa

1
Öffnen Sie Ihre Postgis-Datenbank in QGIS und überprüfen Sie die Eigenschaften für die Ebene. Ich wette, Ihre Daten werden nicht als gespeichert +proj=merc +lon_0=0 +lat_ts=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs. Oder überprüfen Sie mit einem qry:, SELECT * FROM geometry_columnssehen Sie, ob srid tatsächlich 900913 ist
Glenn Plas

1
Das dachte ich auch zuerst, aber ich war ziemlich vorsichtig, als ich die Daten in Postgres importierte, meine SRID ist in der Tat 900913. Ich habe es auch mit SRID versucht 3857(nachdem ich die Projektion in QGIS auf 3857 geändert habe), aber das gibt mir nur den Fehler, dass Tilestache mit gemischten SRIDs nicht funktioniert.
Hasan Mustafa

Antworten:


5

Ich habe die Kacheln richtig überlagern lassen. Das Problem lag in der Neuprojektion von ArcMap und QGIS. Als ich die neu projizierten Shapefiles in ArcMap und QGIS überprüfte, überlagerten sie sich korrekt und hatten die richtigen SRIDs.

Also habe ich die Shapefiles in WGS84 in PostgreSQL mithilfe der SRID 4326mit shp2pgsql importiert und dann verwendet ST_Transfrom, um die Tabellen in 900913den Tabellen mithilfe einer Abfrage neu zu projizieren :

ALTER TABLE isl_roads 
   ALTER COLUMN geom 
   TYP Geometrie (MultiLineString, 900913) 
   USING ST_Transform (geom, 900913);

Überlagert

Aber ich bin immer noch nicht in der Lage, die Kacheln in zu generieren WGS84. Was fehlt mir?


2

Tx für das Feedback, dies ist wichtig für andere, die diese Frage in Zukunft finden. Verwenden Sie WGS84 in Ihrer Tilestache-Konfiguration? Es gibt auch ein 'projiziertes' Attribut, das Sie möglicherweise festlegen müssen.

Sie verwenden die VecTile-Klasse, mit der ich noch nicht gespielt habe, aber Sie können sie möglicherweise bei einem anderen Anbieter wie diesem zum Laufen bringen (oder zumindest erhalten Sie einige Hinweise / Ideen zur Fehlerbehebung). Sie können den Treiber in postgresql anstelle von postgis ändern und die Abfragen anstelle von tabellennamen angeben. Aber der Grund, warum ich es für das 'projizierte' Attribut gezeigt habe.

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

Ich habe versucht, WGS84mit verschiedenen Anbietern und dem projectedAttribut zu arbeiten, aber das gibt mir immer noch das gleiche Ergebnis, keine Fehler, aber leere Funktionen. Jetzt, wo ich spherical mercatorKacheln richtig überlagert habe, denke ich, dass ich ohne Verwendung auskommen kann, WGS84aber ich möchte trotzdem herausfinden, wo das Problem liegt.
Hasan Mustafa

Was ich aus den Dokumenten verstanden habe, ist, dass Sie sphärischen Mercator als Projektion verwenden und projiziert auf wahr setzen. Aber ganz ehrlich, ich kann es auch nicht zum Laufen bringen. Ich kann die richtigen Kacheln generieren, aber sobald ich versuche, Vektoren zu erstellen, scheint der verwendete Begrenzungsrahmen nicht korrekt zu sein. war einen Versuch wert.
Glenn Plas

1
Ich verwende, spherical mercatorohne das projectedAttribut zu definieren ( falsestandardmäßig), und das funktioniert gut für mich. Für WGS84sie ein Problem mit dem Begrenzungsrahmen sein könnte , aber ich bin mir nicht sicher, ich habe das gleiche Problem mit den Vektoren. Vielen Dank für das Feedback, Sie haben mich auf den richtigen Weg gebracht.
Hasan Mustafa
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.