Suite

PostGis : géométrie à partir du texte UTM

PostGis : géométrie à partir du texte UTM


J'ai des données simples dans une table postgresql qui ressemble à ceci :

╔════╦═══════╦═════════════╦══════════════╦═══════ ═══╦═════════════════╗ ║ id ║ index ║ abscisse ║ ordonnée ║ utm_zone ║ utm_zone_letter ║ ╠════╬═══════╬═ ════════════╬══════════════╬══════════╬═══════════ ║ 1 ║ 1 233410.0000 ║ 1024701.0000 ║ 38 ║ N ║ ║ 1 ║ 2 ║ 213310.0000 ║ 1167201.0000 ║ 36 ║ N ║ ║ 2 ║ 1 ║ 213310.0000 ║ 1167201.0000 ║ 31 ║ B ║ ║ 2 ║ 2 213310.0000 1167201.0000 ║ 31 B ║ ╚════╩═══════╩═════════════╩═════════════ ═╩══════════╩═════════════════╝

Remarque : les coordonnées ne sont pas réelles, mais saisies à la main

Comme vous pouvez le voir, ce sont des coordonnées UTM mais stockées dans des champs de type db simples.
Je souhaite convertir ces 4 dernières colonnes en une de type Geometry pour PostGis.
À quelque chose comme ça :

╔════╦══════════════════════╗ ║ id ║ Géométrie ║ ╠════╬══════════ ║ 1 02347237427342342347 ║ ║ 2 ║ 27584872345646325863 ║ ╚════╩═════════════════════ ═╝

J'ai utilisé une requête similaire à celle-ci :

--crée un polygone avec un SRID incorrect :( SELECT z.id, ST_Polygon(z.geom, 3395) geom FROM ( --ajoute le premier point de la ligne à la fin pour la fermer (requeird par ST_Polygon) SELECT l.id id, ST_AddPoint (g.geom, ST_StartPoint(g.geom)) geom FROM ( -- regroupe les points par ID et crée une géométrie de ligne ouverte à partir de chaque groupe SELECT t.id id, ST_MakeLine(t.strPoints) geom FROM ( --creates POINT(x ,y) texte à partir des coordonnées SELECT g.id id, g.index idx, 'POINT(' || g.easting ||"|| g.northing || ')' strPoints FROM data g ORDER BY g.index ) t GROUP BY t.id HAVING count(t.strPoints) > 2 ) g ) z où ST_IsValid(z.geom)

Mais cela n'utilise pas utm_zone et utm_zone_letter et les points et les lignes sont créés sans valeur SRID. Créer un polygone à partir de telles valeurs et spécifier un SRID donne de mauvais résultats. En même temps, parce que les points et les lignes n'ont pas de SRID défini, je ne peux pas utiliser la fonction de base de données utmzone (geometry) car elle nécessite que la géométrie ait un SRID.

J'ai regardé ST_Transform, ST_FromText et d'autres fonctions, mais je n'ai pas pu en trouver une où je puisse spécifier le numéro et la lettre de la zone UTM pour créer une valeur de type Géométrie.
Créer un point sans spécifier le SRID me donne de mauvais résultats - les points tombent sur les pingouins en Antarctique, ce qui est faux.

Pouvez-vous me dire comment convertir ces données en valeurs de géométrie correctes avec le SRID correct spécifié ?


Vous pouvez utiliser les informations ici pour générer un SRID - en gros, ajoutez le numéro de zone à 32600 (au nord) et à 32700 au sud. Cela fonctionne si vous pouvez utiliser WGS84 comme système de référence de coordonnées géographiques.

La lettre utm_zone_letter identifie la bande de latitude. Si les données se trouvent toujours dans l'hémisphère nord, vous pouvez les ignorer et utiliser 32600 + utm_zone comme identifiant bien connu. Si les données sont dans les deux hémisphères, vous devrez vérifier les lettres pour déterminer quel hémisphère. 'CDEFGHJKLM' est dans l'hémisphère sud, et 'NPQRSTUVWX' est dans l'hémisphère nord. A et B sont au-dessous de 80 Sud et Y et Z sont au-dessus de 84 Nord.


Je pense que vous devriez pouvoir utiliser cette fonction (à partir d'ici):

-- Fonction : utmzone (géométrie) -- FONCTION DROP utmzone (géométrie) ; -- Utilisation : SELECT ST_Transform(the_geom, utmzone(ST_Centroid(the_geom)) ) FROM sometable ; CRÉER OU REMPLACER UNE FONCTION utmzone(geometry) RETOURNE l'entier AS $BODY$ DECLARE geomgeog geometry; zone int; pref int; COMMENCER geomgeog:= ST_Transform($1,4326); SI (ST_Y(geomgeog))>0 ALORS pref:=32600 ; AUTREMENT préf : = 32700 ; FIN SI; zone :=étage((ST_X(geomgeog)+180)/6)+1 ; RETOUR zone+préf; FINIR; $BODY$ LANGUE 'plpgsql' COT IMMUABLE 100 ;

Vous devrez traduire la zone UTM en code EPSG, utilisezST_FromTextpour créer un objet géométrique dans cette projection, puis utilisezST_Transformerpour transformer votre objet de géométrie en n'importe quel SRID que vous utilisez pour l'ensemble de la table.

Je ne l'ai pas essayé, mais ce lien explique comment convertir par programmation la latitude/longitude en zone UTM ; Je pense qu'il ne serait pas trop difficile d'inverser le calcul.


Aucun opérateur spatial trouvé rejoignant une table non postgis

J'essaie de joindre deux tables dans la même base de données mais des schémas différents.

L'un a une colonne géométrique PostGis et l'autre uniquement les coordonnées utm 'x' et 'y'.

Mes connaissances sur les SIG et les bases de données spatiales sont presque inexistantes, mais en cherchant sur Google et en vérifiant la documentation, j'ai pu vérifier si ces coordonnées sont dans une géométrie donnée, mais ** lorsque j'essaie de joindre les tables selon ce critère, l'erreur suivante est générée :

Toute la requête est la suivante :

ou changez simplement la condition en isContained = false

Je ne sais pas si je fais la conversion correctement (je sais que nos coordonnées UTM sont dans la zone 31N mais je ne sais pas où je peux le spécifier). Mais ce qui me bloque, c'est le fait que je peux obtenir cette valeur (pas encore d'importance si elle est correcte ou non) dans la projection d'une jointure croisée entière mais cela ne fonctionne pas dans la sélection.

Mais quand j'essaie de changer cette condition comme indiqué précédemment, je reçois que Aucun opérateur spatial trouvé Erreur.

J'ai vérifié les valeurs nulles dans X et oui colonnes, mais il n'y en a pas.

Quoi qu'il en soit, pour autant que je sache, CTE sélectionne toutes les lignes, donc, même si cette conversion fonctionne pour chaque ligne ou non, elle aurait dû être lancée si j'essaie enfin de sélectionner ces colonnes ou non.

D'après mes connaissances de base sur PostgreSQL, cela me semble illogique (j'ai déjà évité les erreurs en supprimant plusieurs fois les colonnes problématiques non intéressantes. Mais maintenant, cette stratégie semble ne pas fonctionner et je ne comprends pas pourquoi).

NOTE FINALE : Tout à l'heure j'ai essayé de :

C'est ma faute de ne pas l'avoir fait auparavant (les objets PostGis sont dans geogps et je construis les requêtes à l'aide de l'utilisateur postgresql - je fais généralement fonctionner les requêtes en premier, puis je prends la peine d'attribuer des autorisations à l'utilisateur qui l'utilisera en production -. C'est pourquoi Je préfixe toujours les tables avec le nom du schéma).

MAIS ** Je me demande toujours pourquoi cela fonctionne avec 'not isContained' et pas avec 'isContained'.


2 réponses 2

Si vous avez des milliards de lignes, utilisez l'héritage de table pour accélérer à la fois les performances de vos requêtes et le processus de chargement des données.

Comme indiqué dans le commentaire, divisez d'abord vos données d'entrée en un ensemble de données plus petit. Vous créez d'abord une table parent et ensuite autant de tables enfants comment sont les fichiers d'entrée. Dans l'exemple, j'ai utilisé Landmarks_child_1 comme nom de table. Les autres tables peuvent être nommées, c'est-à-dire Landmarks_child_2 , Landmarks_child_3 et ainsi de suite.

Créez et remplissez maintenant la table enfant landmarks_child_1. Répétez cette étape pour toutes les autres tables enfants.

Si vous avez des coordonnées UTM au lieu de long/lag mondial, changez simplement le srid. C'est à dire. à Bejiing, vous utiliseriez le srid 32650

Vous avez maintenant des données dans votre base de données et pouvez demander des données.

Exemple de requête

Dans cet exemple de requête, je demande tous les points dans un rayon de 100 mètres autour des coordonnées 116.32015799999, 40.004775000971 (Pékin, Chine) et entre les horodatages 2016-01-01 01:00:00 et 2016-01-01 02:00:00 ( une heure).

Si vous avez des coordonnées UTM, utilisez simplement ST_SetSrid() et ne transmettez pas en géographie.

Pourquoi l'héritage ?

Principalement à cause des meilleures performances. Si vous avez plusieurs millions de lignes, vos requêtes seront plus rapides en utilisant l'héritage car vous stockeriez un milliard de lignes dans une seule table. Vous pouvez interroger la table parent et récupérerez les résultats de toutes les tables enfants (selon votre clause WHERE).

Vous n'avez pas besoin de savoir dans quelle table enfant se trouvent physiquement vos données. L'héritage de table le fera pour vous. (pour plus d'infos : voir héritage)

IMPORTANT Les coordonnées dans Postgis sont longitude/latitude, également x/y. Dans google map et la plupart des api web cartographiques, les coordonnées sont exprimées dans l'ordre inverse : latitude/longitude (y/x). Utilisez le bon ordre!


Mdhntd

SCOTUS - Le Congrès peut-il annuler Marbury v. Madison par la loi ?

Comment encercler certaines entrées d'une matrice ?

Existe-t-il une liste de base des moyens par lesquels un voleur de bas niveau peut obtenir un avantage pour une attaque sournoise ?

Pendant combien de temps les partis d'opposition britanniques pourraient-ils empêcher de nouvelles élections ?

J'ai modifié un mot d'une source, comment le citer correctement ?

Pourquoi Thor n'a-t-il pas utilisé la lance toute puissante au lieu de Stormbreaker ?

Une fille de 2,5 ans refuse de prendre des médicaments

Déchirer lors de la fabrication de plaques avec un routeur

Les intégrales définies et indéfinies sont-elles en fait deux choses différentes ? Où est la faille dans ma compréhension ?

Valeur attendue jusqu'au succès ?

Erreur "Pas assez de RAM" dans PIC16F877a

Utiliser les fruits trempés dans la vodka

Nombre d'avions à exploiter dans une compagnie aérienne

Alignement triangulaire supérieur des matrices

Le point de vue de Robin Hood était-il éthiquement correct ?

Deux couleurs différentes dans un trait/ligne Illustrator

Les barres de défilement sont-elles mortes en 2019 ?

Y a-t-il eu des pays qui se sont prononcés pour leur élimination ?

Ma couleur préférée est le bleu quelle est votre couleur préférée ?

Pourquoi certaines applications Mac ne sont-elles pas disponibles sur AppStore ?

Quel a été le premier compilateur LISP ?

PostGIS : analyse spatiale de la couche de points SRID 4326 à l'aide de la grille UTM

Transformation du SRID 900913 en 4326 avec PostGisComment trouver la ligne qui a un fichier de formes contenant un point lat/long dans ma colonne de géométrie PostGISST_Distance n'utilise pas d'index pour la requête spatialeConvertir d'EPSG:4326 en UTM dans PostGISUTM Les coordonnées des points d'étiquette du filet ne sont pas correcte dans Google Earth UTMGet ST_SummaryStats from Raster Table using geoJSON polygonConvert XY (SRID 4326) to UTM in spatialite renvoie des résultats NULL'UPDATE 0' pour la requête ST_Within - localisation de points dans les polygonesShanon index de diversité dans QGISCompter les points de deux tables dans des polygones avec PostgreSQL/PostGIS

J'ai une table PostGIS avec des points SRID 4326 (long/lat) et j'ai besoin de faire une analyse au moyen d'une grille UTM 10x10 km. J'ai la grille dans une table SRID 32628, j'ai donc projeté la table de points sur SRID 32628 à l'aide de la commande ST_Transform.

Maintenant, je dois compter les points dans les cellules de la grille, mais je n'obtiens que des valeurs "0" dans le décompte comme si elles ne se chevauchaient pas (mais elles le font !). J'ai essayé plusieurs combinaisons de requêtes basées sur

Qu'est-ce qui ne va pas dans tout ça ? Problèmes de projection, syntaxe de requête ou les deux ? Comment peut-il être corrigé?

count(point.geom) doit être count(points.geom) . Votre code fonctionne pour moi

vérifier que les coordonnées reprojetées sont dans la plage valide pour la zone UTM choisie

Veuillez modifier la question pour spécifier les résultats que vous obtenez.

@JGH oui, au moins certaines des coordonnées reprojetées se situent dans la plage valide pour la zone UTM choisie. Mais, vous avez raison, je vais vérifier un autre srid couvrant toute la zone.

@BERA J'ai modifié ma question, car ce n'est pas un problème avec le nom (j'ai vérifié). Donc, si la requête fonctionne, est-ce un problème avec la projection ?

J'ai une table PostGIS avec des points SRID 4326 (long/lat) et j'ai besoin de faire une analyse au moyen d'une grille UTM 10x10 km. J'ai la grille dans une table SRID 32628, j'ai donc projeté la table de points sur SRID 32628 à l'aide de la commande ST_Transform.

Maintenant, je dois compter les points dans les cellules de la grille, mais je n'obtiens que des valeurs "0" dans le décompte comme si elles ne se chevauchaient pas (mais elles le font !). J'ai essayé plusieurs combinaisons de requêtes basées sur

Qu'est-ce qui ne va pas dans tout ça ? Problèmes de projection, syntaxe de requête ou les deux ? Comment peut-il être corrigé?

count(point.geom) doit être count(points.geom) . Votre code fonctionne pour moi

vérifier que les coordonnées reprojetées sont dans la plage valide pour la zone UTM choisie

Veuillez modifier la question pour spécifier les résultats que vous obtenez.

@JGH oui, au moins certaines des coordonnées reprojetées se situent dans la plage valide pour la zone UTM choisie. Mais, vous avez raison, je vais vérifier un autre srid couvrant toute la zone.

@BERA J'ai modifié ma question, car ce n'est pas un problème avec le nom (j'ai vérifié). Donc, si la requête fonctionne, est-ce un problème avec la projection ?

J'ai une table PostGIS avec des points SRID 4326 (long/lat) et j'ai besoin de faire une analyse au moyen d'une grille UTM 10x10 km. J'ai la grille dans une table SRID 32628, j'ai donc projeté la table de points sur SRID 32628 à l'aide de la commande ST_Transform.

Maintenant, je dois compter les points dans les cellules de la grille, mais je n'obtiens que des valeurs "0" dans le décompte comme si elles ne se chevauchaient pas (mais elles le font !). J'ai essayé plusieurs combinaisons de requêtes basées sur

Qu'est-ce qui ne va pas dans tout ça ? Problèmes de projection, syntaxe de requête ou les deux ? Comment peut-il être corrigé?

J'ai une table PostGIS avec des points SRID 4326 (long/lat) et j'ai besoin de faire une analyse au moyen d'une grille UTM 10x10 km. J'ai la grille dans une table SRID 32628, j'ai donc projeté la table de points sur SRID 32628 à l'aide de la commande ST_Transform.

Maintenant, je dois compter les points dans les cellules de la grille, mais je n'obtiens que des valeurs "0" dans le décompte comme si elles ne se chevauchaient pas (mais elles le font !). J'ai essayé plusieurs combinaisons de requêtes basées sur

Qu'est-ce qui ne va pas dans tout ça ? Problèmes de projection, syntaxe de requête ou les deux ? Comment peut-il être corrigé?

count(point.geom) doit être count(points.geom) . Votre code fonctionne pour moi

vérifier que les coordonnées reprojetées sont dans la plage valide pour la zone UTM choisie

Veuillez modifier la question pour spécifier les résultats que vous obtenez.

@JGH oui, au moins certaines des coordonnées reprojetées se situent dans la plage valide pour la zone UTM choisie. Mais, vous avez raison, je vais vérifier un autre srid couvrant toute la zone.

@BERA J'ai modifié ma question, car ce n'est pas un problème avec le nom (j'ai vérifié). Donc, si la requête fonctionne, est-ce un problème avec la projection ?

count(point.geom) doit être count(points.geom) . Votre code fonctionne pour moi

vérifier que les coordonnées reprojetées sont dans la plage valide pour la zone UTM choisie

Veuillez modifier la question pour spécifier les résultats que vous obtenez.

@JGH oui, au moins certaines des coordonnées reprojetées se situent dans la plage valide pour la zone UTM choisie. Mais, vous avez raison, je vais vérifier un autre srid couvrant toute la zone.

@BERA J'ai modifié ma question, car ce n'est pas un problème avec le nom (j'ai vérifié). Donc, si la requête fonctionne, est-ce un problème avec la projection ?

count(point.geom) doit être count(points.geom) . Votre code fonctionne pour moi

count(point.geom) doit être count(points.geom) . Votre code fonctionne pour moi

vérifier que les coordonnées reprojetées sont dans la plage valide pour la zone UTM choisie

vérifier que les coordonnées reprojetées sont dans la plage valide pour la zone UTM choisie

Veuillez modifier la question pour spécifier les résultats que vous obtenez.

Veuillez modifier la question pour spécifier les résultats que vous obtenez.

@JGH oui, au moins certaines des coordonnées reprojetées se situent dans la plage valide pour la zone UTM choisie. Mais, vous avez raison, je vais vérifier un autre srid couvrant toute la zone.

@JGH oui, au moins certaines des coordonnées reprojetées se situent dans la plage valide pour la zone UTM choisie. Mais, vous avez raison, je vais vérifier un autre srid couvrant toute la zone.

@BERA J'ai modifié ma question, car ce n'est pas un problème avec le nom (j'ai vérifié). Donc, si la requête fonctionne, est-ce un problème avec la projection ?

@BERA J'ai modifié ma question, car ce n'est pas un problème avec le nom (j'ai vérifié). Donc, si la requête fonctionne, est-ce un problème avec la projection ?


Mdhntd

Y a-t-il un réel avantage en matière de sécurité à restreindre les adresses IP étrangères ?

Le manager manipule mes feuilles, qu'est-ce que ça lui rapporte ?

Cet ajustement de l'exploit Lucky est-il insuffisant?

Tracer un cercle irrégulier en latex

Mon passeport a été tamponné d'un tampon de sortie lors d'un transit vers un autre pays Schengen via la Turquie. Était-ce une erreur ?

Les fours ménagers évacuent-ils la chaleur vers l'extérieur ?

Quelle est l'origine du « les clercs peuvent créer le trope de l'eau » ?

Que puis-je réellement faire avec un pointage de crédit élevé ?

A quoi sert l'autocorrélation ?

Un druide sauvage en forme de cheval peut-il utiliser Horseshoes of Speed ​​?

Supprimer les sous-dossiers vides, conserver le dossier parent

Comment puis-je vérifier que le parent a plus d'un enfant ?

Est-il prudent de débrancher une clé USB clignotante après l'avoir éjectée « en toute sécurité » ?

Comment déterminer quelle représentation d'une fonction utiliser pour la méthode de Newton ?

La capacité « d'arrêt du temps » de Zack Morris dans « Saved By the Bell » est-elle une capacité surnaturelle ?

Personnages secondaires dans la fiction d'étude de personnage

Comment faire comprendre à mon entourage que je veux me dégager du don constant ?

Comment les dirigeants s'enrichissent-ils de la guerre ?

(Combien de temps) Dois-je faire plaisir à mes nouveaux collègues ?

L'interprétation de Carroll des 1-formes

La pagination doit-elle être réinitialisée lors de la modification de la commande ?

Puis-je séparer l'ail en gousses pour le stockage?

Créer une géométrie à partir de lat/lon dans une table à l'aide de PostGIS ?

Traverser un arbre de table PostGISPostGIS - Géométrie ou géographie trouver des points à distance en mètresObtenir le type de données de chaque colonne de la table PostGIS ?Pourquoi la terre tombe-t-elle plus rapidement que prévu sur une géodésique lors de la conversion de lat/lon en coordonnées cartésiennes ?PostGis : géométrie de Texte UTMComment insérer Google Maps API Lat/Long dans PostgreSQL Postgis GEOMETRY (GEOMETRIE, 4326)Ajouter des informations pour la géométrie columnpgAdmin III SQL créant un pointCréation d'une nouvelle table PostGIS avec enregistrements + géométries d'une autre table ?

J'ai une table avec plus de 800 000 enregistrements, y compris une colonne lat et longue. La source de données n'a pas créé de géométries, j'ai donc cherché comment faire cela. Je sais qu'il y a ST_MakePoint(x,y,SRID) mais toute la documentation et les autres threads montrent comment créer des points uniques. Comment créer le type de géométrie à l'aide de ces colonnes ?

voulez-vous dire créer des lignes à partir de ces points ? Parce que les points sont de la géométrie au même titre que les lignes et les polygones. Donc, si vous cherchez à créer des lignes à partir de ces points, consultez ce récent article de blog de Paul Ramsey : blog.cleverelephant.ca/2015/03/making-lines-from-points.html

– DPSpatial
4 mai '15 à 16:29

Nan. Je voulais dire comme les convertir en types de géométrie à utiliser dans les requêtes spatiales. On dirait que ma question a été répondue alors merci!

J'ai une table avec plus de 800 000 enregistrements, y compris une colonne lat et longue. La source de données n'a pas créé de géométries, alors je cherchais comment faire cela. Je sais qu'il y a ST_MakePoint(x,y,SRID) mais toute la documentation et les autres threads montrent comment créer des points uniques. Comment créer le type de géométrie à l'aide de ces colonnes ?

voulez-vous dire créer des lignes à partir de ces points ? Parce que les points sont de la géométrie tout comme les lignes et les polygones. Donc, si vous cherchez à créer des lignes à partir de ces points, consultez ce récent article de blog de Paul Ramsey : blog.cleverelephant.ca/2015/03/making-lines-from-points.html

– DPSpatial
4 mai '15 à 16:29

Nan. Je voulais dire comme les convertir en types de géométrie à utiliser dans les requêtes spatiales. On dirait que ma question a été répondue alors merci!

J'ai une table avec plus de 800 000 enregistrements, y compris une colonne lat et longue. La source de données n'a pas créé de géométries, alors je cherchais comment faire cela. Je sais qu'il y a ST_MakePoint(x,y,SRID) mais toute la documentation et les autres threads montrent comment créer des points uniques. Comment créer le type de géométrie à l'aide de ces colonnes ?

J'ai une table avec plus de 800 000 enregistrements, y compris une colonne lat et longue. La source de données n'a pas créé de géométries, alors je cherchais comment faire cela. Je sais qu'il y a ST_MakePoint(x,y,SRID) mais toute la documentation et les autres threads montrent comment créer des points uniques. Comment créer le type de géométrie à l'aide de ces colonnes ?

voulez-vous dire créer des lignes à partir de ces points ? Parce que les points sont de la géométrie au même titre que les lignes et les polygones. Donc, si vous cherchez à créer des lignes à partir de ces points, consultez ce récent article de blog de Paul Ramsey : blog.cleverelephant.ca/2015/03/making-lines-from-points.html

– DPSpatial
4 mai 15 à 16:29

Nan. Je voulais dire comme les convertir en types de géométrie à utiliser dans les requêtes spatiales. On dirait que ma question a été répondue alors merci!

voulez-vous dire créer des lignes à partir de ces points ? Parce que les points sont de la géométrie tout comme les lignes et les polygones. Donc, si vous cherchez à créer des lignes à partir de ces points, consultez ce récent article de blog de Paul Ramsey : blog.cleverelephant.ca/2015/03/making-lines-from-points.html

– DPSpatial
4 mai '15 à 16:29

Nan. Je voulais dire comme les convertir en types de géométrie à utiliser dans les requêtes spatiales. On dirait que ma question a été répondue alors merci!

voulez-vous dire créer des lignes à partir de ces points ? Parce que les points sont de la géométrie tout comme les lignes et les polygones. Donc, si vous cherchez à créer des lignes à partir de ces points, consultez ce récent article de blog de Paul Ramsey : blog.cleverelephant.ca/2015/03/making-lines-from-points.html

– DPSpatial
4 mai '15 à 16:29

voulez-vous dire créer des lignes à partir de ces points ? Parce que les points sont de la géométrie au même titre que les lignes et les polygones. Donc, si vous cherchez à créer des lignes à partir de ces points, consultez ce récent article de blog de Paul Ramsey : blog.cleverelephant.ca/2015/03/making-lines-from-points.html

– DPSpatial
4 mai 15 à 16:29

Nan. Je voulais dire comme les convertir en types de géométrie à utiliser dans les requêtes spatiales. On dirait que ma question a été répondue alors merci!

Nan. Je voulais dire comme les convertir en types de géométrie à utiliser dans les requêtes spatiales. On dirait que ma question a été répondue alors merci!


Il traducido el Manual PostGIS de Paul Ramsey para facilitar su uso a los usuarios de
lengua castellana. Agradecería que me comunicasen las erratas y comentarios a
[e-mail protégé]

Indice de contenu
PostGIS manuel. 1
1.Objets SIG. 4
1.1.Forma CANONICA vs ESTANDAR. 4
2. Usar el estándar OpenGIS. 5
2.1. SPATIAL_REF_SYS. 5
2.2. GEOMETRY_COLUMNS. 6
2.3. Crear una tabla espacial. 7
3. Cargar datos GIS en la base de datos Espacial. 8
4. Récupérer les données SIG. 9
5. Construire des indices. 11
5.1. Index GIST. 12
5.2. Usar ndices. 13
6. Clientes Java (JDBC). 13
7. Référence PostGIS. 16

PostGIS : Es une extension du système de base de données objeto-relacional PostgreSQL.
Permite el uso de objetos SIG (Systèmes d'information géographique). PostGIS incluye soporte para
índices GiST basados ​​en R-Tree, y funciones básicas para el análisis de objets GIS.

Esta creado por Refractions Research Inc, como un proyecto de investigación de

tecnologías de bases de données espaciales. Esta publicado bajo licencia GNU.

Avec PostGIS podemos usar todos los objets que aparecen en la especificación OpenGIS

como puntos, lineas, polígonos, multilíneas, multipuntos, y colecciones geométricas.

Los objets GIS soportados por PostGIS son de características simples definidas por
OpenGIS. Actualmente PostGIS soporta las características y el API de representación de la
especificación OpenGIS pero no tiene varios de los operadores de comparación y convolución
de esta especificación.

Exemples de représentation en mode texte :

POLYGONE((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0))

MULTIPOINT(0 0 0,1 2 1)
CHAÎNE MULTILIGNE((0 0 0,1 1 0,1 2 1),(2 3 1,3 2 1,5 4 1))
MULTIPOLYGONE(((0 0 0,4 0 0,4 4 0,0 4 0,0 0 0),(1 1 0,2 1 0,2 2 0,1 2 0,1 1 0)),(( -

1 -1 0,-1 -2 0,-2 -2 0,-2 -1 0,-1 -1 0)))

GEOMETRYCOLLECTION(POINT(2 3 9),LINESTRING((2 3 4,3 4 5))

En los ejemlos se pueden ver características con coordenadas de 2D y 3D(ambas son
permis par PostGIS). Podemos utilise les fonctions force_2d() et force_3d() pour convertir
una característica a 3d o 2d.

1.1.Forma CANONICA vs ESTANDAR.

OpenGIS définit dos formas de representar los objetos espaciales :

1. (WKT)Texte bien connu como los ejemlos anteriores.
2. (WKB) Binaire bien connu.

Las dos formas guardan información del tipo de objeto y sus coordenadas.

Además la especificación OpenGIS requiere que los objets incluyan el identificador del
sistema de referencia espacial(SRID).El SRID es requerido cuando insertamos un objeto
espacial dans la base de données.
Exemple :

INSÉRER DANS LA BASE DE DONNÉES SPATIAL (THE_GEOM,THE_NAME)
VALEURS(GeometryFromText('POINT(-126.4 45.32)',312),'Un Lugar')

La fonction GeometryFromText requiert un numéro SRID.
En PostgreSQL tenemos la representación en forma canónica, es una representación en

modo texto. Esta representación es distinta al estándar openGIS.
Différences :

Illustration 1. Différences de représentation entre PostgreSQL et OpenGIS.

2. Usar el estándar OpenGIS.

Las especificación para SQL de características simples de OpenGIS define tipos de objets
GIS estándar, los cuales son manipulados por funciones, y un conjunto de tablas de meta-
données.

Hay 2 tablas de meta-datos en la especificación OpenGIS :

Contiene un identificador numérico y una descripción textual de el sistema de coordenadas
espacial de la base de données.
Como se définir la tabla:

CRÉER TALBE SPATIAL_REF_SYS(

SRID ENTIER NON NULL CLE PRIMAIRE,
AUTH_NAME VARCHAR(256),
AUTH_SRID ENTIER,
SRTEXT VARCHAR (2048),
PROJ4TEXT VARCHAR (2048)
)

Las columnas de las tablas son la siguientes :

SRID : Valor entero que identifica el sistema de referencia espacial.

AUTH_NAME : El nombre del estándar para el sistema de referencia. Pour

AUTH_SRID : El identificador según el estándar AUTH_NAME. En el

ejemplo anterior es el id según EPSG.
SRTEXT : Una texte connu
référence espacial. Exemple : WKT pour SRS.

representación para el sistema de

PROJETS[« NAD83/UTM Zone 10N »,
GEOGCS["NAD83",DATUM["North_American_Datum_1983",
SPHÉRODE["GRS 1980",6378137,298.257222101]],
PRIMEM[“Greenwich”,0],UNIT[“degré”,0.0174532925199433]
],
PROJECTION["Transverse_Mercator"],
PARAMÈTRE[« latitude_d'origine »,0],
PARAMETRE["méridien_central",-123],
PARAMÈTRE["facteur_échelle",0.9996],
PARAMÈTRE[“false_easting”,500000],

Para una lista de las representaciones WKT de EPSG ir a
http://www.opengis.org/techno/interop/EPSG2WKT.TXT.

PROJ4TEXT: Proj4 es une librería que usa PostGIS para transformar
coordonnées. Esta columna contiene una cadena con definición de las
coordenadas de Proj4 para un SRID dado.

+proj=utm +zone=10 +ellps=clrk66 +datum=NAD27 +units=m

CREER TABLE GEOMETRIE_COLONNES(
F_TABLE_CATALOG VARCHAR(256) NON NULL,
F_TABLE_SCHEMA VARCHAR(256) NON NULL,
F_TABLE_NAME VARCHAR(256) NON NULL,

F_GEOMETRY_COLUMN VARCHAR(256) NON NULL,
COORD_DIMENSION ENTIER NON NULL,
SRID ENTIER NON NULL,
TYPE VARCHAR(30) NON NULL

Descripción de cada una de las columnas:

Distingue au total
colonne géométrique.

la tabla de características que contiene la

Nombre de colonnes géométriques et tableaux de caractéristiques.

Dimension espacial de la colonne (2D ou 3D).

Es una clave foránea que referencia SPATIAL_REF_SYS.

Tipo
spécial. POINT, LINESTRING, POLYGONE,
COLLECTION MULTYPOINT, GÉOMÉTRIE. Para un tipo heterogeneo
debo usar el tipo GEOMETRIE.

2.3. Crear una tabla espacial

Pour créer un tabla con datos espaciales realizamos dos pasos:

1. Creamos una tabla no espacial.

Exemple : CREATE TABLE CALLES_GEOM(ID int4,NAME varchar(25))

colonne (campo)
AddGeometryColumn de OpenGIS.

Exemple : SELECT AddGeometryColum('calles_db','calles_geom','geom',423, 'LINESTRING',2)

Exemples de création de tablas avec colonnes géométriques :

1) CREER TABLE PARQUES(PARQUE_ID int4,PARQUE_NOMBRE varchar(128),PARQUE_FECHA

Date)
2) SELECT AddGeometryColumn( 'parque_db', 'parque', 'parque_geom', 128, 'MULTIPOLYGON' , 2 )

Calles : El tipo de dato espacial es genérico (GÉOMÉTRIE).

1)CRÉER DES APPELS DE TABLE(CALLE_ID int4,CALLE_NOMBRE varchar(128))
2)SELECT AddGeometryColumn('calles_db','calles','calles_geom',-1,'GEOMETRY',3)

3. Cargar datos GIS en la base de datos Espacial.

Hay dos formas de cargar datos en las tablas de nuestra base de datos. Usando el lenguaje

SQL o usando un cargador de archivos de figuras.

Si Podemos convertir les données que vamos ha insérer en une représentation textuelle.
Utilisez le format SQL es une manera sencilla de insertar los datos en PostGIS.
Podemos crear un archivo de texto lleno de sentencias INSERT y cargarlo con
avec moniteur SQL.
Exemple :

COMMENCER
INSÉRER DANS LES VALEURS CALLES_GEOM(ID,GEOM,NAME) (1, GeometryFromText
('LINESTRING(191232 243118,191108 243242)',-1),'Jeff Rd')
INSÉRER DANS LES VALEURS CALLES_GEOM(ID,GEOM,NAME) (1, GeometryFromText
('LINESTRING(189141 244158,189265 244817)',-1),'Geordie Rd')
INSÉRER DANS LES VALEURS CALLES_GEOM(ID,GEOM,NAME) (1, GeometryFromText
('LINESTRING(192783 228138,192612 229814)',-1),'Paul St')
INSÉRER DANS LES VALEURS CALLES_GEOM(ID,GEOM,NAME) (1, GeometryFromText
('LINESTRING(189412 252431,189631 259122)',-1),'Graeme Ave')
INSÉRER DANS LES VALEURS CALLES_GEOM(ID,GEOM,NAME) (1, GeometryFromText
('LINESTRING(190131 224148,190871 228134)',-1),'Phil Tce')

INSÉRER DANS LES VALEURS CALLES_GEOM(ID,GEOM,NAME) (1, GeometryFromText
('LINESTRING(198231 263418,198213 268322)',-1),'Dave Cres')
FINIR

El archivo puede cargar en la base de datos usando "psql":
psql -d [base de données] -f calles.sql

El cargador de datos “shp2pgsql” convierte archivos de figuras ESRI a SQL para
sur l'insertion dans une base de données PostGIS/PostgreSQL. El cargador tiene varios
modos de operación que se seleccionan con los parámetros desde linea de


SIG Open Source :

Systèmes d'Information Géographique (SIG) Open Source. Il existe une pléthore d'applications, d'outils et de données SIG pour prendre en charge la cartographie des données de la Terre (et parfois d'autres planètes).

Tutoriels YoLinux associés :

Les systèmes de cartographie numérique prennent diverses formes pour fournir une solution aux applications Uber et Lyft pour montrer l'emplacement, les applications GPS pour montrer l'emplacement et la direction, les applications de génie civil pour aider à la construction de routes et de ponts, la planification des vols, la gestion de l'utilisation des terres (agriculture), l'affichage des données météorologiques et l'affichage des données scientifiques, pour n'en nommer que quelques-uns. Les composants des systèmes SIG sont nés de la recherche éducative et gouvernementale et il y a donc une forte présence Open Source.

Ils peuvent être classés en applications de visualisation cartographique 2D ou 3D et applications Web avec des composants frontaux et back-end. Les applications SIG prennent généralement la forme d'un système logiciel client-serveur par nécessité. Le composant serveur est requis en raison de la grande taille des données (images, altitude, vecteur, données scientifiques, etc.) qui doivent être situées sur des ordinateurs dotés de ressources adéquates. Le composant client est rendu nécessaire par le besoin de mobilité (GPS et guidage), de visibilité (en 2D ou 3D) et si nécessaire, embarqué dans un appareil.


PostGis : Géométrie à partir du texte UTM - Systèmes d'Information Géographique

Il est très courant d'avoir des données dont les coordonnées sont "géographiques" ou "latitude/longitude".

Contrairement aux coordonnées dans Mercator, UTM ou Stateplane, les coordonnées géographiques sont pas de coordonnées cartésiennes. Les coordonnées géographiques ne représentent pas une distance linéaire à partir d'une origine telle qu'elle est tracée sur un plan. Au contraire, ces coordonnées sphériques décrire des coordonnées angulaires sur un globe. En coordonnées sphériques, un point est spécifié par l'angle de rotation à partir d'un méridien de référence (longitude) et l'angle à partir de l'équateur (latitude).

Vous pouvez traiter les coordonnées géographiques comme des coordonnées cartésiennes approximatives et continuer à effectuer des calculs spatiaux. However, measurements of distance, length and area will be nonsensical. Since spherical coordinates measure angular distance, the units are in "degrees." Further, the approximate results from indexes and true/false tests like intersects and contains can become terribly wrong. The distance between points get larger as problem areas like the poles or the international dateline are approached.

For example, here are the coordinates of Los Angeles and Paris.

The following calculates the distance between Los Angeles and Paris using the standard PostGIS Cartesian ST_Distance_(geometry, geometry). Note that the SRID of 4326 declares a geographic spatial reference system.

Aha! 121! But, what does that mean?

The units for spatial reference 4326 are degrees. So our answer is 121 degrees. But (again), what does that mean?

On a sphere, the size of one "degree square" is quite variable, becoming smaller as you move away from the equator. Think of the meridians (vertical lines) on the globe getting closer to each other as you go towards the poles. So, a distance of 121 degrees doesn't mean anything. It is a nonsense number.

In order to calculate a meaningful distance, we must treat geographic coordinates not as approximate Cartesian coordinates but rather as true spherical coordinates. We must measure the distances between points as true paths over a sphere -- a portion of a great circle.

Starting with version 1.5, PostGIS provides this functionality through the geography type.

Different spatial databases have different approaches for "handling geographics"

  • Oracle attempts to paper over the differences by transparently doing geographic calculations when the SRID is geographic.
  • SQL Server uses two spatial types, "STGeometry" for Cartesian data and "STGeography" for geographics.
  • Informix Spatial is a pure Cartesian extension to Informix, while Informix Geodetic is a pure geographic extension.
  • Similar to SQL Server, PostGIS uses two types, "geometry" and "geography".

Using the geography instead of geometry type, let's try again to measure the distance between Los Angeles and Paris. Instead of ST_GeometryFromText (text), we will use ST_GeographyFromText (text).

A big number! All return values from geography calculations are in meters, so our answer is 9124km.

Older versions of PostGIS supported very basic calculations over the sphere using the ST_Distance_Spheroid (point, point, measurement)` function. However, ST_Distance_Spheroid is substantially limited. The function only works on points and provides no support for indexing across the poles or international dateline.

The need to support non-point geometries becomes very clear when posing a question like "How close will a flight from Los Angeles to Paris come to Iceland?"

Working with geographic coordinates on a Cartesian plane (the purple line) yields a très wrong answer indeed! Using great circle routes (the red lines) gives the right answer. If we convert our LAX-CDG flight into a line string and calculate the distance to a point in Iceland using geography we'll get the right answer (recall) in meters.

So the closest approach to Iceland (as measured from its international airport) on the LAX-CDG route is a relatively small 502km.

The Cartesian approach to handling geographic coordinates breaks down entirely for features that cross the international dateline. The shortest great-circle route from Los Angeles to Tokyo crosses the Pacific Ocean. The shortest Cartesian route crosses the Atlantic and Indian Oceans.

In order to load geometry data into a geography table, the geometry first needs to be projected into EPSG:4326 (longitude/latitude), then it needs to be changed into geography. The ST_Transform (geometry,srid)` function converts coordinates to geographics and the Geography (geometry) function "casts" them from geometry to geography.

Building a spatial index on a geography table is exactly the same as for geometry:

The difference is under the covers: the geography index will correctly handle queries that cover the poles or the international date-line, while the geometry one will not.

There are only a small number of native functions for the geography type(postGIS 2.5):

    - Returns the area of the surface if it is a Polygon or MultiPolygon. For geometry, a 2D Cartesian area is determined with units specified by the SRID. For geography, area is determined on a curved surface with units in square meters. - Return the Well-Known Binary (WKB) representation of the geometry/geography without SRID meta data. - Return the Well-Known Text (WKT) representation of the geometry with SRID meta data. - Return the geometry as a GML version 2 or 3 element. - Return the geometry as a GeoJSON element. - Return the geometry as a KML element. Several variants. Default version=2, default maxdecimaldigits=15 - Returns a Geometry in SVG path data given a geometry or geography object. - Return the Well-Known Text (WKT) representation of the geometry/geography without SRID metadata. - Returns the north-based azimuth as the angle in radians measured clockwise from the vertical on pointA to pointB. - (T)Returns a geometry covering all points within a given distancefrom the input geometry. - Returns the geometric center of a geometry. - Returns 1 (TRUE) if no point in Geometry/Geography A is outside Geometry/Geography B - Returns 1 (TRUE) if no point in Geometry B is outside Geometry A - Returns true if the geometries are within the specified distance of one another. For geometry units are in those of spatial reference and for geography units are in meters and measurement is defaulted to use_spheroid=true (measure around spheroid), for faster check, use_spheroid=false to measure along sphere. - For geometry type returns the 2D Cartesian distance between two geometries in projected units (based on spatial reference system). For geography type defaults to return minimum geodesic distance between two geographies in meters. - Return a specified geography value from Well-Known Text representation or extended (WKT). - Creates a geography instance from a Well-Known Binary geometry representation (WKB) or extended Well Known Binary (EWKB). - Return a specified geography value from Well-Known Text representation or extended (WKT) - EWKT. - Returns TRUE if the coordinates and coordinate order geometry/geography A are the same as the coordinates and coordinate order of geometry/geography B. - (T)Returns a geometry that represents the shared portion of geomA and geomB. - Returns TRUE if the Geometries/Geography "spatially intersect in 2D" - (share any portion of space) and FALSE if they don't (they are Disjoint). For geography -- tolerance is 0.00001 meters (so any points that close are considered to intersect) - Returns the 2D length of the geometry if it is a LineString or MultiLineString. geometry are in units of spatial reference and geography are in meters (default spheroid) - Return the length measurement of the boundary of an ST_Surface or ST_MultiSurface geometry or geography. (Polygon, MultiPolygon). geometry measurement is in units of spatial reference and geography is in meters. - Returns a POINT projected from a start point using a distance in meters and bearing (azimuth) in radians. - Return a modified geometry/geography having no segment longer than the given distance. - Returns a text summary of the contents of the geometry. - Returns the 2D distance between A and B. - Returns TRUE if A's 2D bounding box intersects B's 2D bounding box.

Creating a Geography Table

The SQL for creating a new table with a geography column is much like that for creating a geometry table. However, geography includes the ability to specify the object type directly at the time of table creation. Par example:

In the table definition, the GEOGRAPHY(Point) specifies our airport data type as points. The new geography fields don't get registered in the geometry_columns view. Instead, they are registered in a view called geography_columns .

Some columns were omitted from the above output.

While the basic functions for geography types can handle many use cases, there are times when you might need access to other functions only supported by the geometry type. Fortunately, you can convert objects back and forth from geography to geometry.

The PostgreSQL syntax convention for casting is to append ::typename to the end of the value you wish to cast. So, 2::text with convert a numeric two to a text string '2'. And 'POINT(0 0)'::geometry will convert the text representation of point into a geometry point.

The ST_X_(point) function only supports the geometry type. How can we read the X coordinate from our geographies?

By appending ::geometry to our geography value, we convert the object to a geometry with an SRID of 4326. From there we can use as many geometry functions as strike our fancy. But, remember -- now that our object is a geometry, the coordinates will be interpretted as Cartesian coordinates, not spherical ones.

Geographics are universally accepted coordinates -- everyone understands what latitude/longitude mean, but very few people understand what UTM coordinates mean. Why not use geography all the time?

  • First, as noted earlier, there are far fewer functions available (right now) that directly support the geography type. You may spend a lot of time working around geography type limitations.
  • Second, the calculations on a sphere are computationally far more expensive than Cartesian calculations. For example, the Cartesian formula for distance (Pythagoras) involves one call to sqrt(). The spherical formula for distance (Haversine) involves two sqrt() calls, an arctan() call, four sin() calls and two cos() calls. Trigonometric functions are very costly, and spherical calculations involve a lot of them.

If your data is geographically compact (contained within a state, county or city), use the geometry type with a Cartesian projection that makes sense with your data. See the http://spatialreference.org site and type in the name of your region for a selection of possible reference systems.

If you need to measure distance with a dataset that is geographically dispersed (covering much of the world), use the geography type. The application complexity you save by working in geography will offset any performance issues. And casting to geometry can offset most functionality limitations.

  • The buffer and intersection functions are actually wrappers on top of a cast to geometry, and are not carried out natively in spherical coordinates. As a result, they may fail to return correct results for objects with very large extents that cannot be cleanly converted to a planar representation.
  • For example, the ST_Buffer (geography,distance) function transforms the geography object into a "best" projection, buffers it, and then transforms it back to geographics. If there is no "best" projection (the object is too large), the operation can fail or return a malformed buffer.

Visualizing Geography Data

An easy way to view correctly the shortest path (line) between global airports is accessing the Great Circle Mapper website.

But, to vizualize correctly this global data using a GIS is another history. You must be alert for some details, principally related to the projection used.

Add some basemap (QuickMapServices QGIS Plugin) to the view to help you to visualize the airports data.

The construction of the linear feature that presents the LAX-CDG air route was performed in some steps:

  1. Two queries were used to acquire the geography features of LAX and CDG airports
  2. Casting of airport geography features to geometry type, as the spatial function ST_MakeLine (geometry, geometry) only works with geometry data and doesn't support geography data.
  3. Generation of a geometry linear feature from two geometry points features representing LAX and CDG airports.
  4. Casting of the geometry linear feature to geography linear feature.

Note that the LAX-CDG route, despite being in geography data format, presents a straight line as if the data were geometry.

This is because QGIS creates this "line" from the computational path between the two airports.

To solve this visualization "problem", it is necessary to "segmentize" the line-type geographic data by vertices that represent the path drawn between airports.

In this case, we will use the ST_Segmentize spatial function (geography geog, float max_segment_length), which has support for geography data, with line segmentation in vertices with 10m spacing between them.

Be aware that this procedure works to visualize linear geography features in GIS, but it´s not a good practice to calculate the distance between these points as you can see in the results of the query below, where the calculated distance is different for each approach:

North Korea's Hwasong-14 intercontinental ballistic missile has an estimated maximum range of 10,000 km.

Let´s assume a buffer built from Pyongyang City(North Korea Capital).

We can view the maximum range of this missile using the SQL instruction below:

But, as you can see in the figure above, any planimetric projection, (3857, for example) doesn't support the geography data representation.

To solve this, we have to change the view projection to SRID 3571: WGS 84 / North Pole LAEA Bering Sea

If we try to make a buffer from Pyongyang City using geometry data, the wrong choice, we have the result below:

As we are working with geometry data, the buffer radius parameters must be inputed as decimal degrees. In this case, at this latitude, 10,000 km is around 125 decimal degrees.

ST_Distance (geometry, geometry): For geometry type Returns the 2-dimensional Cartesian minimum distance (based on spatial ref) between two geometries in projected units. For geography type defaults to return spheroidal minimum distance between two geographies in meters.

ST_GeographyFromText (text): Returns a specified geography value from Well-Known Text representation or extended (WKT).

ST_Transform (geometry, srid): Returns a new geometry with its coordinates transformed to the SRID referenced by the integer parameter.

ST_X (point): Returns the X coordinate of the point, or NULL if not available. Input must be a point.


Final Answer

View attached explanation and answer. Let me know if you have any questions.please find the attached files

UAVs
Student’s Name
University Affiliation
Course Name and Number
Instructor’s Name
Assignment Due Date

2
An unmanned aerial vehicle (UAV) is an aircraft known as a drone without a pilot on

board (Molko, 2012). They are usually equipped with live feed cameras with high definition and
radar, all valuable for the consistent surveillance of a particular area. They are smaller than
airplanes and, therefore, harder to spot. Law enforcement uses their live-feed cameras to provide
management and provide evidence during a crime investigation. Drones have various other
capabilities, such as interception technology with the cellphone, to provide information such as
location and activity in a specific area. Drones are sometimes fitted with lethal weapons
whenever they fly over a crime-infested place or track a dangerous criminal.
Various agencies use drones, including the law enforcement agency, to chase suspects,
map, and survey the cities. According to Herwitz et al. (2004), Agricultural agencies also use
drones to collect data on crops covering an extensive area. Construction agencies also use drones
to map areas under construction to monitor progress and pick out situations and problems that
might cause accidents. The use of drones brings the aspect of privacy and security to individuals
and a state in general.
In 2012, the Federal Aviation Administration (FAA) Modernization and Reform Act
advocated for the increase of UAVs in the airspace system of America (Thompson, 2013).
However, several other amendments have occurred, and now the fourth Amendment approves a
license for the flight of UAVs. According to the National Conference of State Legislators, over
twenty states have passed legislation on the flying of drones (Hudson Jr, 2015). Most states are
considering the laws to safeguard individual privacy. Tennessee and Idaho have forbidden using
drones over private property unless carrying out manned investigations to collect
evidence. These States also permit individuals to sue agencies breaking these laws. In my
opinion, the need for a search warrant depends on the case at hand. A search warrant is needed

when flying a drone over private property to identify criminal activities. One of the human rights
of an American citizen is the right to privacy. Without a warrant, it will violate that right,
primarily if no evidence is found on the property. Therefore, a warranty would be necessary for
such a scenario. However, if law enforcement must search a suspect's property, then a warrant
should not be essentia.


Projections Support¶

Coordinate reference systems (CRS) are encapsulated by QgsCoordinateReferenceSystem class. Instances of this class can be created by several different ways:

QGIS uses three different IDs for every reference system:

  • PostgisCrsId — IDs used within PostGIS databases.
  • InternalCrsId — IDs internally used in QGIS database.
  • EpsgCrsId — IDs assigned by the EPSG organization

If not specified otherwise in second parameter, PostGIS SRID is used by default.

specify CRS by its well-known text (WKT)

create invalid CRS and then use one of the create*() functions to initialize it. In following example we use Proj4 string to initialize the projection

It’s wise to check whether creation (i.e. lookup in the database) of the CRS has been successful: isValid() must return True .

Note that for initialization of spatial reference systems QGIS needs to look up appropriate values in its internal database srs.db . Thus in case you create an independent application you need to set paths correctly with QgsApplication.setPrefixPath() otherwise it will fail to find the database. If you are running the commands from QGIS python console or developing a plugin you do not care: everything is already set up for you.

Accessing spatial reference system information