Mais

Como transformar dados de uma projeção customizada em JTS?

Como transformar dados de uma projeção customizada em JTS?


Tenho alguns dados em NAD_1983_StatePlane_Texas_Central_FIPS_4203_Feet

Desejo transformar programaticamente as coordenadas para Lat long no datum WGS84 usando JTS.

Eu sei que o JTS pode transformar as coordenadas usando o seguinte código:

import org.geotools.geometry.jts.JTS; import org.geotools.referencing.CRS; CoordinateReferenceSystem sourceCRS = CRS.decode ("EPSG: 4326"); CoordinateReferenceSystem targetCRS = CRS.decode ("EPSG: 23032"); Transformação MathTransform = CRS.findMathTransform (sourceCRS, targetCRS); Geometria targetGeometry = JTS.transform (sourceGeometry, transform);

Mas minha projeção não tem código EPSG.

Como defino o sistema de coordenadas neste caso? Como faço para transformar meus dados em EPSG: 3857?


Dê uma olhada nesta documentação do CRS http://docs.geotools.org/latest/userguide/library/referencing/crs.html#well-known-text

É possível definir o CRS do WKT. A documentação diz:

CoordinateReferenceSystem também pode ser definido por um formato de texto ((denominado “Well Known Text” ou WKT). Este é um padrão fornecido pelo OGC e aparece em um arquivo shapefile “prj”, ou em bancos de dados como PostGIS e Oracle .

Para analisar o WKT, use o método CRS.parseWKT (txt).

É possível obter o WKT do arquivo PRJ ou até mesmo de http://spatialreference.org/ref/sr-org/nad_1983_stateplane_texas_central_fips_4203_feet/ogcwkt/

Depois que o CRS é definido a partir do WKT, o resto do processo é como antes.


1 resposta 1

Parece que o problema está nas funções vectorToGeogr e spherical2vector. Com base nesses comentários e no poste em torno do qual você girava, parece (?) Que você pretendia ter a seguinte relação:

No entanto, você misturou matemática em lugares que assumiram coordenadas matemáticas:

Um teste rápido, mas não infalível, é tentar fazer um "round-trip" de quaisquer funções de conversão de coordenadas. Não garante que o que você está fazendo é correto, mas garante que seja internamente consistente. Sua versão atual das coisas falha neste teste:

Como um aparte, eu recomendo colocar pelo menos alguns testes em execução e usando um executor de teste de algum tipo (py.test é o meu favorito). Isso vai lhe poupar muita dor a longo prazo!

Pessoalmente, prefiro separar o espaço cartesiano do "mundo real" do espaço cartesiano usado em um estereoneta.

Isso torna a matemática mais simples, e a conversão entre o mundo real e o espaço "stereonet" é direta (por exemplo, consulte as funções mplstereonet.xyz2stereonet e mplstereonet.stereonet2xyz. Ambas estão no arquivo vinculado.). Todos os exemplos em stereonet_math.py usam o segundo conjunto de convenções. Quando você precisa lidar com vetores "reais" (por exemplo, o exemplo contour_normal_vectors.py), eles podem ser convertidos com xyz2stereonet (saídas lon, lat) ou uma das várias funções normal2 & ltfoo & gt (saídas mergulham / rumo, golpe / mergulho, etc).

No entanto, se você quiser usar coordenadas cartesianas do "mundo real" internamente, precisará alterar suas funções de conversão.


Métodos de transformação geográfica

Mover seus dados entre sistemas de coordenadas às vezes inclui a transformação entre os sistemas de coordenadas geográficas.

Como os sistemas de coordenadas geográficas contêm datums baseados em esferóides, uma transformação geográfica também altera o esferóide subjacente. Existem vários métodos, que possuem diferentes níveis de precisão e faixas, para a transformação entre datums. A precisão de uma determinada transformação pode variar de centímetros a metros, dependendo do método e da qualidade e número de pontos de controle disponíveis para definir os parâmetros de transformação.

Uma transformação geográfica é sempre definida em uma direção particular. A imagem acima ilustra uma transformação que converte de North American Datum (NAD) 1927 para World Geodetic System (WGS) 1984. Ao trabalhar com transformações geográficas, se nenhuma menção for feita à direção, um aplicativo ou ferramenta como o ArcMap cuidará da direcionalidade automaticamente. Por exemplo, se converter dados de WGS 1984 para NAD 1927, você pode escolher uma transformação chamada NAD_1927_to_WGS_1984_3 e o software irá aplicá-la corretamente.

(ArcMap carrega automaticamente uma transformação geográfica. Ele é projetado para os 48 estados dos Estados Unidos e converte entre NAD 1927 e NAD 1983.)

Uma transformação comum em dados norte-americanos é entre NAD 1983 e WGS 1984, como entre os sistemas de coordenadas geográficas GCS_North_American_1983 e GCS_WGS_1984. Consulte o artigo 24159 do ESRI Support KnowledgeBase para dicas sobre como determinar qual transformação usar entre NAD 1983 e WGS 1984.

Uma transformação geográfica sempre converte coordenadas geográficas (latitude-longitude). Alguns métodos convertem as coordenadas geográficas em coordenadas geocêntricas (X, Y, Z), transformam as coordenadas X, Y, Z e convertem os novos valores de volta em coordenadas geográficas.

Isso inclui os métodos Geocentric Translation, Molodensky e Coordinate Frame.

Outros métodos, como NADCON e NTv2, usam uma grade de diferenças e convertem os valores de longitude-latitude diretamente.


Uma visão geral do conjunto de ferramentas Raster

A tabela a seguir resume as ferramentas no conjunto de ferramentas Raster (um conjunto de ferramentas no conjunto de ferramentas Projeções e Transformações). Essas ferramentas são para projetar e transformar rasters.

Reorienta o raster girando-o de cima para baixo, ao longo do eixo horizontal até o centro do raster. Isso pode ser útil para corrigir conjuntos de dados raster que estão de cabeça para baixo.

Reorienta o raster girando-o, da esquerda para a direita, ao longo do eixo vertical até o centro do raster.

Transforma um conjunto de dados raster de um sistema de coordenadas para outro.

Alinha automaticamente um raster a uma imagem de referência ou usa um arquivo de ponto de controle para georregistro. Se o conjunto de dados de entrada for um conjunto de dados de mosaico, a ferramenta operará em cada item do conjunto de dados de mosaico. Para registrar automaticamente a imagem, o raster de entrada e o raster de referência devem estar em uma área geográfica relativamente próxima. A ferramenta será executada mais rapidamente se os conjuntos de dados raster estiverem alinhados. Pode ser necessário criar um arquivo de link, também conhecido como arquivo de ponto de controle, com alguns links para colocar o raster de entrada no mesmo espaço do mapa.

Redimensiona um raster de acordo com os fatores de escala xey especificados.

Gira um conjunto de dados raster em torno de um ponto de pivô especificado.

Move (desliza) o raster para uma nova localização geográfica com base nos valores de deslocamento xey. Esta ferramenta é útil se o seu conjunto de dados raster precisar ser deslocado para se alinhar com outro arquivo de dados.

Transforma um conjunto de dados raster usando pontos de controle de origem e destino. Isso é semelhante ao georreferenciamento.

Transforma um conjunto de dados rasterizado usando um arquivo de texto existente contendo pontos de controle de origem e destino.


5 respostas 5

Recentemente, encontrei exatamente esse problema (eu também estava usando o ARToolKit) e fiquei muito desapontado ao ver que você não tinha descoberto a resposta. Imagino que você tenha mudado agora, mas descobri e estou postando para qualquer outra alma perdida que possa vir com o mesmo problema.

A coisa mais confusa para mim foi que todo mundo fala sobre como fazer uma transformação de perspectiva CALayer definindo a variável m34 para um pequeno número negativo. Embora funcione, não é nada informativo. O que acabei percebendo é que a transformação funciona exatamente como todas as outras transformadas, é uma matriz de transformação principal da coluna para coordenadas homogêneas. O único caso especial é que ele deve combinar a visualização do modelo e as matrizes de projeção e, em seguida, ser dimensionado para o tamanho da janela de visualização openGL, tudo em uma matriz. Comecei tentando usar uma matriz no estilo em que m34 é um pequeno número negativo, conforme explicado com muito mais detalhes aqui, mas eventualmente mudei para abrir as transformações de perspectiva do estilo GL conforme explicado aqui. Na verdade, eles são equivalentes uns aos outros, apenas representam maneiras diferentes de pensar sobre a transformação.

Em nosso caso, estamos tentando fazer a transformação CALayer replicar exatamente uma transformação aberta GL. Tudo o que requer é multiplicar as matrizes modelview, projeção e dimensionamento e inverter o eixo y para levar em conta o fato de que a origem da tela do dispositivo é o canto superior esquerdo e o GL aberto é o canto inferior esquerdo. Contanto que a âncora da camada esteja em (.5, .5) e sua posição esteja exatamente no centro da tela, o resultado será idêntico à transformação do GL aberto

Esta função pega o GLprojection aberto e o tamanho da visão openGL e os usa para gerar a transformação correta para o CALayer. O tamanho da camada CAL deve ser especificado nas unidades da cena aberta GL. A janela de exibição OpenGL na verdade contém 4 variáveis, [xoffset, yoffset, x, y], mas as duas primeiras não são relevantes porque a Origem da CALayer é colocada no centro da tela para corresponder à Origem 3D do OpenGL.

Basta substituir Matrix por qualquer classe de matriz principal de coluna 4x4 genérica à qual você tenha acesso. Tudo vai funcionar, apenas certifique-se de multiplicar suas matrizes na ordem certa. Tudo o que isso está essencialmente fazendo é replicar o pipeline OpenGL (menos o recorte).


Como transformar dados de uma projeção customizada em JTS? - Sistemas de Informação Geográfica

Serviços de conversão de dados de Sistema de Informação Geográfica (GIS)

A Wynne Unit Geographic Information Systems Facility oferece uma linha completa de serviços de conversão de GIS. Os serviços disponíveis variam de varredura, georreferenciamento, digitalização e limpeza de dados até projetos completos de conversão de dados GIS, incluindo projeto, configuração e preenchimento de banco de dados. Além disso, os serviços de tradução de dados são oferecidos em formatos padrão da indústria. A equipe da instalação tem anos de experiência e oferece serviços com boa relação custo-benefício para ajudar os clientes a concluir projetos GIS com sucesso.

Projetos piloto de amostra são concluídos para cada projeto de conversão de dados para revisão do cliente. A propriedade dos dados convertidos permanece com o cliente, a instalação não mantém a propriedade dos dados. A instalação usa equipamentos de última geração e segue rigorosas medidas de controle de qualidade para garantir que os projetos de conversão atendam às necessidades dos clientes.

A instalação pode converter vários formatos de dados em um produto GIS integrado. Dados díspares podem ser integrados entre plataformas, realizar conversões de projetos de mapas em uma projeção comum e realizar conversão de dados e atualizações nesses diferentes conjuntos de dados em relação uns aos outros.

Nossos prazos de entrega são rápidos e nossos preços competitivos!

Os serviços de digitalização de grande formato de resolução estão disponíveis em formato colorido e monocromático.

Estão disponíveis dados vetoriais simples georreferenciados.

Para obter uma cotação, entre em contato com 936-348-3751 ramal 266.

Uma lista de clientes satisfeitos inclui:

  • A cidade de amarillo
  • Departamento de Transporte do Texas
  • A cidade de Richardson
  • Potter / Randall Appraisal District
  • Grayson County
  • A cidade de Conroe
  • Distrito de avaliação do condado de Newton
  • A cidade de Huntsville
  • Distrito de controle de inundação do condado de Harris
  • A cidade de Corsicana
  • Gabinete do Procurador-Geral


Para especificar o sistema de coordenadas durante a importação

  1. Clique em Gerenciar Conteúdo (Fontes de dados) para abrir o painel Fontes de dados.
  2. Importe os dados.
  3. Clique com o botão direito do mouse nos dados importados no painel Fontes de dados e selecione Configurar para exibir a caixa de diálogo Configuração da fonte de dados.
  4. Selecione a guia Localização geográfica.

  1. Sistema de coordenadas de origem: Na maioria das vezes, o InfraWorks é capaz de determinar o sistema de coordenadas de origem automaticamente, com base nos atributos da fonte de dados. Se necessário, especifique o sistema de coordenadas dos dados de entrada neste campo. Você pode clicar no ícone de globo para visualizar uma biblioteca de sistemas de coordenadas disponíveis.
  2. Sistema de coordenadas de posição (destino): este é o sistema de coordenadas que o InfraWorks usará para armazenar e exibir os dados importados.
  3. Você também pode especificar uma origem local para os dados importados. Isso é útil se o conjunto de dados importado não tiver nenhum arquivo mundial associado a ele.

Traçando recursos naturais da Terra em uma projeção personalizada

Estou tentando fazer alguns gráficos de dados do gelo marinho. Os dados são entregues na grade EASE-North, um arquivo de exemplo (HDF4) pode ser baixado em:

Eu criei uma classe de projeção personalizada para o EASE-Grid, parece estar funcionando (os litorais se alinham bem com os dados).

Quando tento adicionar um recurso Natural Earth, ele retorna uma figura vazia do Matplotlib.

O script acima funciona bem e produz este resultado:

Mas quando eu retiro o comentário de ax.add_feature (land), ele falha sem nenhum erro, retornando apenas a figura vazia. Estou perdendo algo óbvio?

Minha compilação do Cartopy é a versão 0.9 do site de Christoph Gohlke (obrigado!).

Tentar salvar a figura lança uma exceção:

Examinando a cartopia 'land'. A característica não revela problemas, todos os polígonos passam no .isvalid () e todos os anéis (ext en int) são de 4 ou mais tuplas. Portanto, a forma de entrada não parece ser o problema (e funciona bem em PlateCaree ()).

Talvez alguns anéis (como no hemisfério sul) fiquem 'corrompidos' após se transformarem em EASE_North?

Edit2:

Quando eu removo os recursos NE embutidos e carrego o mesmo shapefile (mas com qualquer coisa abaixo de 40N cortada), ele funciona. Então, parece algum tipo de problema de reprojeção.


Seu círculo de saída é válido, ele simplesmente excede o diâmetro da superfície da Terra, então seu GIS pode ter problemas para desenhá-lo! O problema é que você está misturando graus e metros indiscriminadamente e o GeoTools não tem ideia do que você quer fazer.

Você precisa adicionar algumas informações sobre o sistema de referência de coordenadas do ponto ao programa e, se essa projeção for geográfica (ou seja, em graus), transforme o problema em uma projeção que está em metros.

AUTO: 42001, x, y é uma projeção especial centrada no ponto x, y em metros que nos permite usar o método buffer JTS, que é mais fácil do que a operação circular que você está usando.

Para suas entradas, isso me dá uma elipse sobre Nova York, note que isso é esperado e é devido aos efeitos de distorção do uso de coordenadas Lat / Lon não projetadas em uma Terra curva.


Aprenda mais rápido. Vá mais fundo. Veja mais adiante.

Junte-se à plataforma de aprendizagem online O'Reilly. Faça um teste gratuito hoje e encontre respostas rapidamente ou domine algo novo e útil.

Faça login no CARTO e pesquise na biblioteca de dados gratuita um conjunto de dados chamado “ne_50m_admin_1_states.” Adicione-o à sua conta ou, de outra forma, carregue seu próprio conjunto de dados dos 50 estados (consulte a Figura 2). Mostraremos este exemplo porque você pode querer alterar a projeção de todos os 50 estados ou apenas alguns, e há maneiras de fazer isso em SQL.

Figura 2. Visualização dos mapas CARTO dos dados dos estados dos EUA. (Fonte: Aurelia Moser)

Você pode pesquisar os códigos de referência espacial disponíveis pesquisando a tabela CARTO Spatial Reference System Identifier (SRID), que permite visualizar todos os identificadores exclusivos para sistemas de coordenadas com um pouco de SQL:

Isso imprimirá uma tabela de referência com todos os códigos SRID que você pode usar para redefinir a projeção em uma de suas camadas de feições usando funções PostGIS (consulte a Figura 3).

Figura 3. Tabela SRID da CARTO para visualizar as projeções / referências disponíveis. (Fonte: Aurelia Moser)

Se você não vê uma projeção específica listada aqui, mas gostaria de permiti-la em seu mapa, você pode pesquisar EPSG.io para a projeção correta (consulte a Figura 4). Neste caso, procuramos a projeção Albers Equal Area Conic apropriada para mapas da América do Norte.

Figura 4. Resultado da pesquisa para EPSG 3857. (Fonte: Klokan Tech)

Isso irá gerar alguns códigos de copiar / colar que você pode usar para habilitar certas projeções em uma variedade de servidores de blocos ou formatos de mecanismo de renderização que você pode usar para o desenvolvimento de mapas (consulte a Figura 5).

Figura 5. Resultado da exportação “ESRI: 102008”, código PostGIS (Fonte: Klokan Tech)

Você pode colar o código PostGIS na bandeja CARTO SQL e aplicar a consulta para importar este SRID e habilitar esta projeção para suas camadas de feições (veja a Figura 6).

Figura 6. Importando uma referência espacial para o CARTO. (Fonte: Aurelia Moser)

Você pode então aplicar uma consulta subsequente e "mais simples" usando a sintaxe PostGIS para redefinir a projeção da sua camada de estados:

Nesse caso, inserir 102008 (o Albers Equal Area Conic) como the_geom_webmercator garantirá que os dados mapeados, por padrão em uma projeção Web Mercator, serão reformulados como uma projeção Albers. Você trocaria os estados (o nome da minha tabela de dados neste exemplo) por qualquer que seja o nome da sua tabela.

A transformação resultante move os Estados Unidos para o centro da tela do mapa, em desacordo com o mapa base da Figura 7, que manteve a projeção padrão. Você pode resolver essa incongruência alterando seu mapa base ou usando uma cor em vez de um mapa base com rótulos. Como não há opção de mapa base alternativa para uma projeção diferente de Web Mercator, a abordagem na Figura 7 força uma projeção diferente em um plano de coordenadas de Web Mercator.

Figura 7. Reprojetando os Estados Unidos como Albers Equal Area Conic. (Fonte: Aurelia Moser)

Depois disso, você pode definir o estilo dos estados como branco no assistente do CARTO ou no CartoCSS que o acompanha para o seu mapa (Figura 8).

Figura 8. Alterando o plano de fundo e estilizando os Estados Unidos. (Fonte: Aurelia Moser)

Você pode até mesmo levar isso adiante e usar PostGIS para definir a projeção para estados individuais, selecionando IDs exclusivos para os estados e transformando as geometrias apenas desses polígonos. O SQL pode ficar bastante complicado e é frequentemente contestado e reescrito por profissionais de mapas, mas a consulta SQL de Andy Eschbacher ecoada na implementação na Figura 9 produz uma transformação bastante agradável do Alasca e do Havaí em um plano cartesiano compacto.

Figura 9. Aplicando uma consulta SQL para mover o Alasca e o Havaí para o quadro. (Fonte: Aurelia Moser)


Assista o vídeo: Alfa Romeo 159 JTS Acceleration