Suite

Comment sélectionner 200 points aléatoires dans un rayon de 100 m dans Postgis


J'apprends actuellement à utiliser PostgreSQL et PostGIS. J'aimerais savoir comment écrire le SQL qui me permettrait de sélectionner 200 points aléatoires dans un rayon de 500 m à partir d'un point central défini par l'utilisateur. Actuellement, j'ai la base de données contenant tous mes enregistrements, avec une ligne individuelle pour l'ID, la latitude et la longitude. Les coordonnées sont en WGS84. Les 'points' se réfèrent aux magasins.

Une fois que j'ai les 200 points sélectionnés au hasard, je voudrais ensuite éditer deux autres colonnes ("Status" et "Time") pour montrer que les points sélectionnés sont fermés et l'heure à laquelle ils se sont fermés.

Quelle est, selon vous, la manière la plus simple d'effectuer cette opération ?


Pour sélectionner 200 points dans un rayon de 500 m, essayez ceci :

SELECT * FROM nom_table WHERE ST_DWithin( ST_SetSRID(ST_Point(center_lng, center_lat), 3857), ST_Transform(table_geometry, 3857), 500 ) LIMIT 200;

Quant à la partie "randomisation", en ajoutantCOMMANDER PAR NEWID()à la fin peut fonctionner, mais je ne suis pas complètement sûr.

Et enfin, comment voudriez-vous éditer exactement les deux colonnes ?


Téléchargez et installez les modules complémentaires PostGIS dans votre base de données PostGIS. Il existe une fonction ST_RandomPoints(). Utilisez-le comme ceci :

SELECT ST_RandomPoints( ST_Buffer( ST_Transform( ST_Point(long, lat), yourfavoriteprojectedcoordinatesystemSRID ), 500), 200 ) geom FROM yourpointtable;

Cela créera 200 points pour chaque ligne de votre tableau.

https://github.com/pedrogit/postgisaddons