Problema de sobreposição de mosaicos vetoriais TileStache


8

Estou usando o TileStache para servir meus próprios blocos de vetor usando uma fonte de dados postgis. Primeiro, eu re-projetei os shapefiles que eu tinha usando o ArcMap (reprojetado no Web Mercator (Auxilary Sphere)) e os carreguei no Postgres usando shp2pgsql (SRID: 900913).

Eu sou capaz de gerar os azulejos usando este arquivo de configuração:

{
  "cache":
  {
    "nome": "teste",
    "caminho": "/ tmp / stache",
    "umask": "0000"

  }
  "camadas": 
  {     
    "tpl":
    {       
        "origem permitida": "*",
        "projeção": "mercator esférico",
        "fornecedor":
        {
            "class": "TileStache.Goodies.VecTiles: Provider",                        
            "kwargs": {
                "dbinfo":
                {
                    "host": "localhost",
                    "usuário": "postgres",
                    "password": "postgres",
                    "database": "tpl"
                }
                "consultas":
                {
                    "7": "SELECIONE geom AS __geometria __, nome, prioridade FROM isl_roads_sm WHERE prioridade IN (5,4) - zoom 7+",
                    "8": "SELECIONE geom AS __geometria __, nome, prioridade FROM isl_roads_sm WHERE prioridade IN (5,4)",
                    "9": "SELECIONE geom AS __geometria __, nome, prioridade FROM isl_roads_sm WHERE prioridade IN (5,4)",
                    "10": "SELECIONE geom AS __geometria __, nome, prioridade FROM isl_roads_sm WHERE prioridade IN (5,4)",
                    "11": "SELECIONE geom AS __geometria __, nome, prioridade FROM isl_roads_sm WHERE prioridade IN (5,4,3,2)",
                    "12": "SELECIONE geom AS __geometria __, nome, prioridade FROM isl_roads_sm WHERE prioridade IN (5,4,3,2)",
                    "13": "SELECIONE geom AS __geometria __, nome, prioridade FROM isl_roads_sm WHERE prioridade IN (5,4,3,2)",
                    "14": "SELECT geom AS __geometry __, nome, prioridade FROM isl_roads_sm - zoom 14+"
                }
            }
        }
        "preview": {"ext": "json"}
    }
  }
}

Estou renderizando os blocos gerados usando Leaflets TileLayer.GeoJSON. O problema que tenho é que os ladrilhos não se sobrepõem ao mapa base, há uma lacuna muito grande entre meus ladrilhos e os recursos no mapa base.Sobreposição incorreta

Quando uso o WGS84 como projeção no arquivo de configuração (usando dados no WGS84), obtenho blocos vazios, sem outros erros.

Como posso sobrepor os ladrilhos corretamente? Por que o WGS84 não funciona?


Verifique esta discussão, pode ajudar, acho que é devido à diferença entre mercator esférico e final mercator. gis.stackexchange.com/questions/34276/…
Glenn Plas

Eu olhei através do fio antes e eu não acho que é o problema porque Folheto (que eu estou usando para exibir os azulejos) leva esférico Mercator como a projeção padrão
Hasan Mustafa

1
Abra o seu postgis db no QGIS e verifique as propriedades da camada. Aposto que seus dados não são armazenados como +proj=merc +lon_0=0 +lat_ts=0 +x_0=0 +y_0=0 +datum=WGS84 +units=m +no_defs. Ou verificar com um qry: SELECT * FROM geometry_columns, ver se srid é de fato 900913
Glenn Plas

1
Também foi o que pensei no começo, mas tomei bastante cuidado ao importar os dados no Postgres, meu SRID é mesmo 900913. Eu tentei com o SRID 3857também (depois de mudar a projeção para 3857 no QGIS), mas isso me dá um erro dizendo que o tilestache não funciona com SRIDs mistos.
Hasan Mustafa

Respostas:


5

Eu tenho as peças para sobrepor corretamente. O problema estava na re-projeção feita pelo ArcMap e pelo QGIS. Quando eu estava verificando os shapefiles reprojetados no ArcMap e QGIS, eles estavam sobrepostos corretamente e tinham os SRIDs corretos.

Portanto, importei os shapefiles no WGS84 no PostgreSQL usando o SRID 4326com shp2pgsql e usei ST_Transfrompara reprojetar as tabelas nas 900913tabelas usando uma consulta:

ALTER TABLE isl_roads 
   ALTER COLUMN geom 
   Geometria TYPE (MultiLineString, 900913) 
   USANDO ST_Transform (geom, 900913);

Sobreposto

Mas ainda não consigo gerar os blocos WGS84. O que estou perdendo?


2

Por exemplo, para o feedback, isso é importante para outras pessoas que encontrarem essa pergunta no futuro. Você está usando o WGS84 na configuração do tilestache? Há também um atributo 'projetado' que você pode precisar definir.

Você está usando a classe VecTile, eu ainda não brinquei com essa, mas talvez você consiga fazê-la funcionar (ou pelo menos lhe dará algumas dicas / idéias para solucionar problemas) com um provedor diferente, como este. Você pode alterar o driver para postgresql em vez de postgis e fornecer as consultas em vez de tablename. Mas a razão pela qual eu o mostrei para o atributo 'projetado'.

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

Eu tentei usar WGS84com diferentes provedores e o projectedatributo também, mas isso ainda me dá o mesmo resultado, sem erros, mas com recursos vazios. Agora que tenho spherical mercatorblocos sobrepostos corretamente, acho que posso passar sem usar, WGS84mas ainda assim gostaria de descobrir qual é o problema.
Hasan Mustafa

o que entendi dos documentos é que você usa mercator esférico como projeção e define como verdadeiro. Mas, com toda a honestidade, também não pode fazê-lo funcionar. Posso gerar os blocos corretos, mas depois que tento criar vetores, parece que a caixa delimitadora usada não está correta. valeu a pena tentar embora.
Glenn Plas

1
Estou usando spherical mercatorsem definir o projectedatributo ( falsepor padrão) e isso funciona bem para mim. Pois WGS84pode haver um problema com a caixa delimitadora, mas não tenho certeza, tenho o mesmo problema com os vetores. Obrigado pelo feedback, porém, você me colocou no caminho certo.
Hasan Mustafa
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.