Como posso criar um polígono usando campos no PostgreSQL?
-
12-09-2019 - |
Pergunta
Eu tenho 8 valores reais em uma tabela que eu gostaria de combinar em um polígono. Eu não tenho sido capaz de descobrir como criar um polígono usando esses valores embora. Eu continuo tentando variações
SELECT polygon(lat1,lon1,lat2,lon2,lat3,lon3,lat4,lon4) FROM table;
mas continuo recebendo erros sobre a função polígono não existente ou uma sintaxe de entrada inválida para o tipo de polígono. Alguém já fez isso antes?
Solução
A sintaxe para uma postgres polígono regular é mais parecido com:
insert into geo_table values (1, '((2,2),(3,4),(3,6),(1,1))');
Onde 1 é algum ID ea entrada citado é o polígono. Eu esperaria que a consulta para ser semelhante, você provavelmente precisará parênteses etc para as coordenadas. Tipicamente para dados geoespaciais você quer coordenadas (Lon LAT). Postgis também leva declarações WKT como:
GeomFromText('POLYGON((long1 lat1, long2 lat2, long3 lat3))')
Outras dicas
Como mencionado por bvmou - GeomFromText
irá funcionar bem.
Vou apenas acrescentar uma atualização de sintaxe pequeno:
GeomFromText('POLYGON((long1 lat1, long2 lat2, long3 lat3))')
Este exemplo assume longitude e coordenadas de latitude de uma tabela e os converte em uma geometria. As dimensões de cada caixa são dadas como long_high, long_low, lat_high, e lat_low. Aqui, uma caixa de aproximadamente 500m por 500m.
-
Adicionar uma nova coluna de geometria 'caixa' para a mesa
SELECT AddGeometryColumn('public', 'predpol_raw', 'box', 2240, 'POLYGON', 2);
-
Atualize o novo campo com esses valores.
UPDATE predpol_raw SET box = ST_Transform( ST_GeomFromText( format('POLYGON((%s %s, %s %s, %s %s, %s %s, %s %s))', long_high,lat_high, long_low,lat_high, long_low,lat_low, long_high,lat_low, long_high,lat_high ), 4326 ), 2240 );
Observe a transformação para uma referência espacial diferente. A palavra-chave POLYGON requer parênteses duplos '(())'.