Estou usando o PostGIS 1.5.2, com geometrias no SRID: 900913. Preciso criar círculos usando uma lista de pontos como centro, com um raio de 600 quilômetros. Estou usando esta consulta:
INSERT INTO circles (geom) (
SELECT ST_Buffer(point, 600000, 'quad_segs=8')
FROM points
);
Mas os círculos criados não têm 600 quilômetros de raio (o raio é próximo desse comprimento, mas não exatamente).
Existem outros métodos para criar círculos no PostGIS?
NOTA: As informações representadas são da Espanha. A projeção correta é 4326, mas o cliente usa o Google Rasters, por isso estou armazenando dados no 900913 para evitar reprojeções e aumentar o desempenho.
postgis
postgis-1.5
angelcervera
fonte
fonte
SELECT ST_Distance( (select point from points where id = 7), (select point from points where id = 42));
retorno de mais de 100 km de diferença, respeite o gmap-pedometer.com, mas se eu suponho que esse comprimento esteja correto, o raio do círculo é perfeito. Mas as pessoas usam a primeira distância como raio, não a distância retornada por st_distance. É possível transformar a primeira distância na segunda?Respostas:
Tente o seguinte:
Isso muda para a geografia e, em seguida, usa a seleção SRID incorporada para (ironicamente) voltar para a geometria onde um bom buffer planar é executado e depois retrocede. O problema com sua abordagem no Mercator é que o Mercator não preserva a distância. Usar uma projeção local mais apropriada fornece melhores resultados, e é isso que acontece no método acima.
fonte
Você pode aumentar o valor quad_seg para obter um círculo mais preciso. Para obter um círculo real, você precisa trabalhar com um tipo de geometria curva, mas não sei qual software pode mostrar isso.
A precisão do srid 90013 também é muito ruim, pois é uma projeção que cobre o mundo inteiro.
Você obterá um resultado mais preciso com uma projeção local.
fonte
Depende de onde seus círculos estão sendo criados. Eles estão perto do equador ou mais próximos dos pólos?
Dê uma olhada neste mapa . Você acha que a Antártica ou a Groenlândia são realmente tão grandes? Essa é a projeção que você está usando, certo?
Eu recomendo que você faça uma leitura rápida deste documento do USGS sobre projeções , particularmente a tabela abaixo que fornece uma idéia rápida de quais projeções são boas para quê.
E depois de tudo isso, acho que devo finalmente responder sua pergunta :)
O que Nicklas disse foi um bom conselho. Existe uma projeção específica para sua área local que funcionaria melhor?
Caso contrário, você pode querer olhar para o novo tipo de Geografia PostGIS . No entanto, a resposta mais apropriada depende de onde seus dados estão localizados.
ATUALIZAÇÃO: Como agora sabemos que seus dados estão na Espanha, você pensou em armazená-los em uma projeção local como a UTM Zone 31N , executando suas operações com isso e projetando-os novamente no Google Web Mercator?
fonte
Você pode usar o tipo de geometria SQL / MM Parte 3 CIRCULARSTRING e / ou CURVEPOLYGON.
No entanto, esteja avisado de que o suporte para esse tipo é limitado, tanto com funções internas como com programas externos. Você pode usar ST_CurveToLine para ajudar a visualizá-lo.
Além disso, é um pouco desanimador (como no PostGIS 2.0 svn) que
SELECT ST_Area('CURVEPOLYGON(CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1))'::geometry)
é apenas uma aproximação aproximada de π . (Compare 3.14033115695475 a 3.14159265358979 depi()
).fonte