Eu tenho um número de grades hexagonais de 1 km que cobrem vários municípios nos Estados Unidos em um banco de dados postgreSQL / postGIS. Cada grade possui o CRS EPSG: 3857 e a camada de condados possui o EPSG: 3857. Ao visualizar as grades com os condados no QGIS, tudo parece ótimo.
Mas ... para compartilhar essas grades com os colegas, tive que exportá-las para shapefiles usando ogr2ogr. Ao visualizá-las no QGIS, cada grade parece aproximada cerca de 20 km, e o QGIS define automaticamente o CRS como EPSG: 3395 (que não é o CRS do projeto).
Quando eu exporto as tabelas postGIS como shapefiles do QGIS , o arquivo .prj é exatamente igual aos shapefiles exportados pelo ogr2ogr , mas as tabelas exportadas postGIS são exibidas corretamente. Percebi que o QGIS cria um arquivo .qpj ao exportar shapefiles do QGIS , então concluí que o QGIS está ignorando o .prj e procurando um .qpj. Por que ele não pode ler o .prj sem um .qpj? Outros shapefiles (como os do censo dos EUA) não possuem um .qpj, mas o QGIS os exibe corretamente.
Eu criei uma solução alternativa salvando um default.qpj e criando um novo .qpj para cada arquivo exportado usando ogr2ogr, mas isso parece confuso e obviamente não reproduzível, pois funciona apenas para o EPSG: 3857.
Nota: Estou usando o QGIS 2.0.1.
EDITAR:
Aqui está o comando ogr2ogr que eu usei:
ogr2ogr -f "ESRI Shapefile" /home/matt/data/hex_grid_1 PG:'dbname=mydb user=matt' hex_grid_1
Conteúdo do .prj:
PROJETOS ["WGS_84_Pseudo_Mercator", GEOGCS ["GCS_WGS_1984", DATUM ["D_WGS_1984", SPHEROID ["WGS_1984", 6378137,298.257223563]], PRIMEM ["Greenwich", 0], UN17 [32] ["Mercator"], PARÂMETRO ["central_meridian", 0], PARÂMETRO ["false_easting", 0], PARÂMETRO ["false_northing", 0], UNIDADE ["Medidor", 1], PARÂMETRO ["standard_parallel_1", 0,0] ]
Conteúdo do .qpj:
PROJETOS ["WGS 84 / Pseudo-Mercator", GEOGCS ["WGS 84", DATUM ["WGS_1984", SPHEROID ["WGS 84", 6378137,298.257223563, AUTORIDADE ["EPSG", "7030"]], AUTORIDADE [" EPSG "," 6326 "]], PRIMEM [" Greenwich ", 0, AUTORIDADE [" EPSG "," 8901 "]], UNIDADE [" diploma ", 0,0174532925199433, AUTORIDADE [" EPSG "," 9122 "]], AUTORIDADE ["EPSG", "4326"]], PROJEÇÃO ["Mercator_1SP"], PARÂMETRO ["central_meridian", 0], PARÂMETRO ["scale_factor", 1], PARÂMETRO ["false_easting", 0], PARÂMETRO ["false_northing" , 0], UNIDADE ["medidor", 1, AUTORIDADE ["EPSG", "9001"]], EIXO ["X", ORIENTE], AXIS ["Y", NORTE], EXTENSÃO ["PROJ4", "+ proj = merc + a = 6378137 + b = 6378137 + lat_ts = 0,0 + lon_0 = 0.0 + x_0 = 0,0 + y_0 = 0 + k = 1,0 + unidades = m + nadgrids = @ null + wktext + no_defs "], AUTORIDADE [" EPSG "," 3857 "]]
EDIT :
O problema foi resolvido convertendo o EPSG: 3857 para EPSG: 2163 em todos os meus scripts. Ainda não tenho certeza de qual é o problema, pois as grades são exibidas corretamente no QGIS quando originalmente carregadas de uma tabela postgreSQL (com EPSG: 3857).
Minha solução alternativa foi bruta como eu pensava, pois meu colega não conseguiu usar o arquivo no ArcGIS, que não leu o .prj ou o .qpj corretamente.
Respostas:
A
EPSG:3857
definição é um truque sujo para obter a projeção que o Google inventou no moderno software GIS. É uma combinação de esfera e elipsóide que não é usada por projeções "normais". Infelizmente, todo software usa outra maneira de adaptá-lo.O QGIS usa o arquivo .qpj, ARCGIS, o WKT no arquivo .prj e GDAL a definição do proj.4. O arquivo .qpj incorpora a definição proj.4 na definição WKT.
A maneira mais segura de lidar com esses problemas é evitar o Google Mercator. Você pode usar melhor o seu plano estadual local, UTM ou algumas projeções de Lambert ou Albers em todo o continente.
fonte