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.
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?
fonte
+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 900913900913
. Eu tentei com o SRID3857
també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.Respostas:
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
4326
com shp2pgsql e useiST_Transfrom
para reprojetar as tabelas nas900913
tabelas usando uma consulta:Mas ainda não consigo gerar os blocos
WGS84
. O que estou perdendo?fonte
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'.
fonte
WGS84
com diferentes provedores e oprojected
atributo também, mas isso ainda me dá o mesmo resultado, sem erros, mas com recursos vazios. Agora que tenhospherical mercator
blocos sobrepostos corretamente, acho que posso passar sem usar,WGS84
mas ainda assim gostaria de descobrir qual é o problema.spherical mercator
sem definir oprojected
atributo (false
por padrão) e isso funciona bem para mim. PoisWGS84
pode 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.