J'utilise PostGIS 1.5.2, avec des géométries dans SRID: 900913. J'ai besoin de créer un cercle en utilisant une liste de points comme centre, avec un rayon de 600 kilomètres. J'utilise cette requête:
INSERT INTO circles (geom) (
SELECT ST_Buffer(point, 600000, 'quad_segs=8')
FROM points
);
Mais les cercles créés n'ont pas 600 kilomètres de rayon (le rayon est proche de cette longueur, mais pas exactement).
Existe-t-il d'autres méthodes pour créer des cercles dans PostGIS?
REMARQUE: les informations représentées proviennent d'Espagne. La projection correcte est 4326, mais le client utilise des rasters Google, donc je stocke des données dans 900913 pour éviter les reprojections et augmenter les performances.
postgis
postgis-1.5
angelcervera
la source
la source
SELECT ST_Distance( (select point from points where id = 7), (select point from points where id = 42));
retour de plus de 100 km de différence, respectez gmap-pedometer.com, mais si je suppose que cette longueur est correcte, le rayon du cercle est parfait. Mais les gens utilisent la première distance comme rayon, pas la distance renvoyée par st_distance. Est-il possible de transformer la première distance en seconde?Réponses:
Essaye ça:
Cette bascule dans la géographie utilise ensuite la sélection SRID intégrée pour (ironiquement) retourner dans la géométrie où un bon tampon planaire est exécuté, puis retourne. Le problème avec votre approche dans Mercator est que Mercator ne préserve pas la distance. L'utilisation d'une projection locale plus appropriée donne de meilleurs résultats, et c'est ce qui se produit dans la méthode ci-dessus.
la source
Vous pouvez augmenter la valeur quad_seg pour obtenir un cercle plus précis. Pour obtenir un vrai cercle, vous devez travailler avec un type de géométrie courbe, mais je ne sais pas quel logiciel peut le montrer.
La précision du srid 90013 est également très mauvaise car il s'agit d'une projection couvrant le monde entier.
Vous obtiendrez un résultat plus précis avec une projection locale.
la source
Cela dépend de l'endroit où vos cercles sont créés. Sont-ils proches de l'équateur ou plus proches des pôles?
Jetez un œil à cette carte . Pensez-vous que l'Antarctique ou le Groenland sont vraiment si gros? C'est la projection que vous utilisez, non?
Je vous recommande de faire une lecture rapide de ce document de l'USGS sur les projections , en particulier le tableau ci-dessous qui vous donne une idée rapide des projections qui sont bonnes pour quoi.
Et après tout ça, je pense que je devrais enfin répondre à votre question :)
Ce que Nicklas a dit était un bon conseil. Y a-t-il une projection particulière pour votre région qui fonctionnerait mieux?
Sinon, vous voudrez peut-être regarder le nouveau type PostGIS Geography . Néanmoins, la réponse la plus appropriée dépend de l'emplacement de vos données.
MISE À JOUR: Depuis que nous savons que vos données sont en Espagne, avez-vous envisagé de les stocker dans une projection locale comme UTM Zone 31N , d'effectuer vos opérations en utilisant cela, puis de les projeter à nouveau sur Google Web Mercator?
la source
Vous pouvez utiliser le nouveau type de géométrie SQL / MM Part 3 CIRCULARSTRING et / ou CURVEPOLYGON.
Cependant, sachez que la prise en charge de ce type est limitée, à la fois avec les fonctions internes et les programmes externes. Vous pouvez utiliser ST_CurveToLine pour aider à le visualiser.
De plus, c'est un peu rebutant (comme dans svg PostGIS 2.0) qui
SELECT ST_Area('CURVEPOLYGON(CIRCULARSTRING(2 1, 1 2, 0 1, 1 0, 2 1))'::geometry)
n'est qu'une approximation approximative de π . (Comparer 3.14033115695475 à 3.14159265358979 à partir depi()
).la source