Suite

Transformations PROJ4 / PostGIS entre les transformations WGS84 et NAD83 en Alaska


J'essaie d'implémenter la transformation WGS84 - NAD83 recommandée pour l'Alaska à l'aide de PostGIS. Cet article : Transformations géographiques en Alaska entre NAD83 et WGS84 indique que la transformation appropriée dans ArcGIS est WGS_1984_(ITRF00)_To_NAD_1983. Je n'ai pas réussi à trouver ça dansréf_spatial_sys. J'ai essayé d'ajouter ma propre transformation dansréf_spatial_sysen utilisant le proj4text suivant :

+proj=longlat +ellps=GRS80 +datum=NAD83 +towgs84=-0.9956,1.9013,0.5215,-0.025915,-0.009246,-0.011599,-0.00062 +no_defs

leremorquage84les valeurs ont été copiées à partir des paramètres répertoriés qu'ArcMap affiche lorsque vous choisissez cette transformation (en inversant le signe car il s'agit de WGS84 dans PROJ4 et de WGS84 dans ArcMap). Dans PostGIS, je l'utilise comme ceci, en transformant WGS84 en NAD83 à l'aide de ma projection personnalisée, puis en la transformant à nouveau en 4269 (ou quelle que soit la projection NAD83 que je veux vraiment, comme 3338).

ST_Transform(ST_Transform(geom_wgs84, 900999), 4269)

Le problème est que les valeurs transformées ne semblent pas correspondre aux transformations utilisées par ArcGIS, donc si j'ai un mélange de données WGS84 et personnalisées en données NAD83, la transformation WGS84 -> NAD83 d'ArcGIS est différente de PostGIS et les données ne s'aligne pas. Les erreurs sont petites (1-2 mètres), mais suffisamment grandes pour être vues.

Quelqu'un peut-il suggérer une chaîne PROJ4 appropriée pour reproduire les résultats de la transformation ArcMap, ou quelque chose de mieux pour l'état de l'Alaska, comme l'utilisation d'une grille NAD ? Ou dites-moi ce que je fais mal avec ma projection personnalisée ?


PROJ.4 utilise la méthode du vecteur de position pour ses 7 transformations de paramètres. La transformation ArcGIS à laquelle vous faites référence utilise la méthode du cadre de coordonnées. Ils utilisent des conventions différentes pour les valeurs de rotation, alors changez les signes des valeurs de rotation et réessayez.

Informations générales:

Pour changer la direction d'une transformation à 7 paramètres (cadre de coordonnées, vecteur de position, Bursa-Wolf), changez les signes de tous les paramètres. Ce n'est pas tout à fait équivalent au calcul d'une inversion complète de la matrice de rotation, mais généralement très bien dans la précision de la transformation.

Pour convertir entre les méthodes du cadre de coordonnées et du vecteur de position, changez les signes des paramètres de rotation uniquement. Les deux méthodes utilisent des conventions différentes (l'une fait pivoter les axes, l'autre les coordonnées/vecteur).

La transformation d'Esri est donc :

Méthode WGS84/ITRF00 à NAD 1983 (version CORS96 environ) : cadre de coordonnées dx = 0,9956 dy = -1,9013 dz = -0,5215 rx = 0,025915 ry = 0,009426 rz = 0,0011599 ds = 0,00062

Changer de direction:

Méthode NAD 1983 à WGS84/ITRF00 : cadre de coordonnées dx = -0,9956 dy = 1,9013 dz = 0,5215 rx = -0,025915 ry = -0,009426 rz = -0,0011599 ds = -0,00062

Changer de méthode :

Méthode NAD 1983 à WGS84/ITRF00 : vecteur de position dx = -0,9956 dy = 1,9013 dz = 0,5215 rx = 0,025915 ry = 0,009426 rz = 0,0011599 ds = -0,00062

Remarque: je ne l'ai pas essayé, mais je pense que c'est le problème.

Divulgation : je travaille pour Esri.


5 Présentation de la bibliothèque PROJ.4

le PROJ.4 La bibliothèque dispose actuellement de trois fonctionnalités pour la transformation des coordonnées et le calcul géodésique :

proj/invproj – projections cartographiques directes et inverses,

cs2cs – conversion entre systèmes de coordonnées (géographiques ou projetées),

geod/invgeod – calculs géodésiques directs et inverses.

le PROJ.4 La bibliothèque a été développée au début des années 1980 sous le nom de programme RATFOR (langage de programmation RATional FORtran), la plupart du code provenant du GCTP (Geological Survey’s General Cartographic Transformation Package). le PROJ.4 programme a été recodé dans le langage de programmation C lorsque le package MAPGEN (dont PROJ.4 est un composant de base) a été introduit dans le système d'exploitation UNIX. De nombreuses nouvelles projections ont été ajoutées au programme.

La bibliothèque est basée sur le travail de Gerald Evenden, elle a ensuite été maintenue par Frank Warmerdam, le créateur de la bibliothèque GDAL, et maintenant par la communauté de programmation. le PROJ.4 La bibliothèque est livrée avec une licence MIT (Massachusetts Institute of Technology) permettant l'utilisation gratuite, la copie, l'édition, la sous-licence et l'utilisation commerciale si la licence d'origine est créditée.

L'installation du PROJ.4 bibliothèque dépend du système d'exploitation dans ce qui suit, une brève illustration sera donnée sur la façon de l'utiliser. La bibliothèque elle-même contient les paramètres de nombreux ellipsoïdes ainsi que des références géodésiques prédéfinies avec des valeurs de paramètres.

Les listes des ellipsoïdes disponibles avec des paramètres peuvent être obtenues à l'aide de la commande cs2cs -le , où -le est l'argument de la fonction pour afficher la liste des ellipsoïdes.

De même, une liste des premiers méridiens, par rapport au méridien de Greenwich, peut être obtenue.

Une liste de références prédéfinies est obtenue à l'aide de l'argument -ld.

En utilisant le PROJ.4 notation, n'importe quel système de référence de coordonnées peut être défini, pas seulement les références prédéfinies contenues dans la bibliothèque.

Pour la Serbie, un système de référence de coordonnées dans la projection de Gauss-Krüger est donné avec les paramètres suivants :

+proj=tmerc - Projection de Gaus Kriger (Transverse Mercator),
+lat_0=0 +lon_0=21 - l'origine des coordonnées sur l'ellipsoïde,
+k=0.9999 - échelle le long du méridien médian,
+x_0=7500000 +y_0=0 - coordonner l'origine dans le plan de la carte
+ellps=bessel - ellipsoïde
+ remorquage84=574.027,170.175,401.545,4.88786,-0.66524,-13.24673,6.89
trois translations, trois rotations, échelle relative au WGS84 exprimée en ppm (parties par million)
+=m - unités, mètres.

En plus de cela, le système de référence de coordonnées dans le PROJ.4 la notation peut être définie à l'aide du code EPSG. Le jeu de données de paramètres géodésiques EPSG est une collection de définitions de système de coordonnées de référence et de paramètres qui les décrivent.

À http://spatialreference.org/ ou alors http://epsg.io, les définitions des repères de coordonnées peuvent être trouvées dans plusieurs notations : EPSG, proj4, WKT, GML, JSON… Dans la Figure 5.1, un exemple est donné pour un repère WGS84 avec le code EPSG 4326.

Figure 5.1 : Exemple d'utilisation http://spatialreference.org avec la possibilité de télécharger les paramètres du système de référence de coordonnées dans plusieurs notations.

Un exemple de calcul direct est donné pour la projection de Gauss-Krüger :

Lors de l'exécution de la commande proj, l'utilisateur doit saisir des coordonnées ellipsoïdes via un terminal ou à partir d'un fichier texte afin d'obtenir des coordonnées rectangulaires. En utilisant la fonctionnalité Linux, la commande peut être exécutée directement à partir de la ligne de commande.

Dans les calculs cartographiques inverses, il est nécessaire d'entrer la commande -I , qui doit être suivie des coordonnées rectangulaires d'entrée et, par conséquent, des coordonnées ellipsoïdes (longitude et latitude) sont obtenues.

La transformation des coordonnées d'un système à un autre est illustrée par l'exemple de conversion de l'ancien système d'état de Gauss-Krüger (ellipsoïde de Bessel et datum Hermannskogel) dans le nouveau système de référence de coordonnées UTM pour la Serbie (ellipsoïde GRS80 avec un datum ETRS pour la Serbie) :

Un exemple de conversion du système Gauss-Krüger pour la Serbie en WGS84 est également donné, dans lequel WGS84 est défini à l'aide du code EPSG, et des détails sur la fonction peuvent être trouvés sur : http://proj4.org/apps/cs2cs.html.

le PROJ.4 La bibliothèque est implémentée dans de nombreux logiciels SIG et peut être facilement utilisée via une interface graphique.


Pipelines de transformation¶

L'homologie entre les étapes ci-dessus et un pipeline de style shell Unix est évidente. C'est là la principale inspiration architecturale derrière le cadre du pipeline de transformation. Le cadre du pipeline est réalisé en utilisant une "projection" spéciale, qui prend comme arguments fournis par l'utilisateur, une série d'opérations élémentaires, qu'il enchaîne afin de mettre en œuvre la transformation complète nécessaire. De plus, un certain nombre d'opérations géodésiques élémentaires, y compris les transformations de Helmert, les décalages polynomiaux généraux d'ordre élevé et la transformation de Molodensky sont disponibles dans le cadre du pipeline. En prévision de la prise en charge à venir des transformations variant dans le temps, nous introduisons également un type de données spatio-temporelles 4D et une interface de programmation (API) pour gérer cela.

La transformation de Molodensky convertit directement les coordonnées géodésiques d'un datum en coordonnées géodésiques d'un autre datum, tandis que la transformation de Helmert (généralement plus précise) convertit les coordonnées cartésiennes 3D en coordonnées cartésiennes 3D. Ainsi, lorsque vous utilisez la transformation de Helmert, vous devez généralement effectuer une conversion initiale des coordonnées géodésiques en coordonnées cartésiennes, et une conversion finale dans l'autre sens, pour arriver au résultat souhaité. Heureusement, cette transformation composée en trois étapes a la caractéristique intéressante que chaque étape ne dépend que de la sortie de l'étape immédiatement précédente. Par conséquent, nous pouvons construire une transformation de Helmert géodésique à géodésique en liant ensemble les sorties et les entrées de 3 étapes (géodétique à cartésien → Helmert → cartésien à géodésique), style pipeline. Le pilote de pipeline rend possible ce type de transformations enchaînées. L'implémentation est compacte, constituée d'une seule pseudo-projection, appelée pipeline , qui prend comme arguments des chaînes de projections élémentaires (remarque : « projection » est le terme PROJ, légèrement trompeur, utilisé pour tout type de transformation). La pseudo projection du pipeline est complétée par un certain nombre de transformations élémentaires, fournissant dans l'ensemble un cadre pour la construction de solutions de haute précision pour un large éventail de tâches géodésiques.

Comme premier exemple, examinons l'emblématique géodésique → cartésien → Helmert → géodésique cas (étapes 2 à 4 dans l'exemple de l'introduction). Dans PROJ, il peut être mis en œuvre comme

Le pipeline peut être étendu aux deux extrémités pour s'adapter à tout type de coordonnées nécessaire pour l'entrée et la sortie : dans l'exemple ci-dessous, nous passons du système danois obsolète 45, un système 2D avec une certaine tension dans le réseau de définition d'origine, à la zone UTM 33 , ETRS89. La tension est réduite à l'aide d'une transformation polynomiale (l'étape init=./s45b…, s45b.pol est un fichier contenant les coefficients polynomiaux), portant les coordonnées S45 à un système de coordonnées techniques (TC32), défini pour représenter « UTM zone 32 coordonnées, telles qu'elles auraient l'air si la transformation de Helmert entre ED50 et ETRS89 était parfaite ». Les coordonnées TC32 sont ensuite reconverties en coordonnées géodésiques (ED50), en utilisant une projection UTM inverse, puis en cartésiennes (ED50), puis en cartésiennes (ETRS89), en utilisant la transformation de Helmert appropriée, et de nouveau en géodésiques (ETRS89), avant de finalement projeté sur la zone UTM 33, système ETRS89. Dans l'ensemble, un pipeline en 6 étapes, mettant en œuvre une transformation avec une précision au niveau centimétrique à partir d'un système obsolète avec des tensions au niveau décimétrique.

Avec le pipeline framework, une transformation spatio-temporelle est possible. Ceci est possible en tirant parti de la dimension temporelle dans PROJ qui permet aux coordonnées 4D (trois composantes spatiales et une composante temporelle) de passer par un pipeline de transformation. Dans l'exemple ci-dessous, une transformation d'ITRF93 en ITRF2000 est définie. La composante temporelle est donnée en semaines GPS dans les données d'entrée, mais la transformée de Helmert à 14 paramètres attend des unités temporelles en années décimales. Par conséquent, la première étape du pipeline est la pseudo-projection unitconvert qui garantit que les unités correctes sont transmises à la transformée de Helmert. La plupart des paramètres de la transformée de Helmert sont tirés de [Altamimi2002] , à l'exception de l'époque qui est l'époque de la transformation. La dernière étape du pipeline consiste à reconvertir les horodatages des coordonnées en semaines GPS.


4.2. Requêtes spatiales

le raison d'être des bases de données spatiales est d'effectuer des requêtes à l'intérieur de la base de données qui nécessiteraient normalement une fonctionnalité SIG de bureau. L'utilisation efficace de PostGIS nécessite de savoir quelles fonctions spatiales sont disponibles, comment les utiliser dans les requêtes et de s'assurer que les index appropriés sont en place pour fournir de bonnes performances.

4.2.1. Détermination des relations spatiales

Les relations spatiales indiquent comment deux géométries interagissent l'une avec l'autre. Ils sont une capacité fondamentale pour interroger la géométrie.

4.2.1.1. Modèle dimensionnellement étendu à 9 intersections

Selon la spécification d'implémentation des fonctionnalités simples d'OpenGIS pour SQL, « l'approche de base pour comparer deux géométries consiste à effectuer des tests par paires des intersections entre les intérieurs, les limites et les extérieurs des deux géométries et à classer la relation entre les deux géométries en fonction de sur les entrées de la matrice "d'intersection" résultante."

Dans la théorie de la topologie des ensembles de points, les points d'une géométrie intégrée dans un espace à 2 dimensions sont classés en trois ensembles :

La limite d'une géométrie est l'ensemble des géométries de la dimension immédiatement inférieure. Pour les POINT s, qui ont une dimension de 0, la frontière est l'ensemble vide. La limite d'un LINESTRING correspond aux deux extrémités. Pour les POLYGONE , la limite est le dessin au trait des anneaux extérieur et intérieur.

L'intérieur d'une géométrie sont les points d'une géométrie qui ne sont pas dans la frontière. Pour POINT s, l'intérieur est le point lui-même. L'intérieur d'un LINESTRING est l'ensemble des points entre les extrémités. Pour les POLYGONE , l'intérieur est la surface surfacique à l'intérieur du polygone.

L'extérieur d'une géométrie est le reste de l'espace dans lequel la géométrie est intégrée, en d'autres termes, tous les points qui ne sont pas à l'intérieur ou sur la frontière de la géométrie. C'est une surface non fermée à 2 dimensions.

Le modèle Dimensionally Extended 9-Intersection Model (DE-9IM) décrit la relation spatiale entre deux géométries en spécifiant les dimensions des 9 intersections entre les ensembles ci-dessus pour chaque géométrie. Les dimensions d'intersection peuvent être formellement représentées dans un 3x3 matrice d'intersection .

Pour une géométrie g les Intérieur , Frontière , et Extérieur sont notés par la notation je(g) , B(g) , et Par exemple) . Aussi, gradation(s) désigne la dimension d'un ensemble s avec le domaine de <0,1,2,F> :

En utilisant cette notation, la matrice d'intersection pour deux géométries une et b est:

Intérieur Frontière Extérieur
Intérieur dim( I(a) ∩ I(b) ) dim( I(a) ∩ B(b) ) dim( I(a) E(b) )
Frontière dim( B(a) I(b) ) dim( B(a) ∩ B(b) ) dim( B(a) E(b) )
Extérieur dim( E(a) I(b) ) dim( E(a) B(b) ) dim( E(a) E(b) )

Visuellement, pour deux géométries polygonales qui se chevauchent, cela ressemble à :

dim( I(a) ∩ I(b) ) = 2

dim( I(a) B(b) = 1

dim( I(a) ∩ E(b) ) = 2

dim( B(a) ∩ I(b) ) = 1

dim( B(a) B(b) ) = 0

dim( B(a) ∩ E(b) ) = 1

dim( E(a) I(b) ) = 2

dim( E(a) B(b) ) = 1

dim( E(a) E(b) = 2

Lecture de gauche à droite et de haut en bas, la matrice d'intersection est représentée par la chaîne de texte ' 212101212 '.

Pour plus d'informations, consultez :

4.2.1.2. Relations spatiales nommées

Pour faciliter la détermination des relations spatiales communes, l'OGC SFS définit un ensemble de prédicats de relation spatiale nommés . PostGIS les fournit sous forme de fonctions ST_Contains, ST_Crosses, ST_Disjoint, ST_Equals, ST_Intersects, ST_Overlaps, ST_Touches, ST_Within. Il définit également les prédicats de relation non standard ST_Covers, ST_CoveredBy et ST_ContainsProperly.

Les prédicats spatiaux sont généralement utilisés comme conditions dans les clauses SQL WHERE ou JOIN. Les prédicats spatiaux nommés utilisent automatiquement un index spatial s'il en existe un, il n'est donc pas nécessaire d'utiliser également l'opérateur de cadre de délimitation &&. Par example:

Pour plus de détails et d'illustrations, voir l'atelier PostGIS.

4.2.1.3. Relations spatiales générales

Dans certains cas, les relations spatiales nommées sont insuffisantes pour fournir une condition de filtre spatial souhaitée.

Par exemple, considérons un jeu de données linéaire représentant un réseau routier. Il peut être nécessaire d'identifier tous les segments de route qui se croisent, non pas en un point, mais en ligne (peut-être pour valider une règle commerciale). Dans ce cas, ST_Crosses ne fournit pas le filtre spatial nécessaire, car pour les entités linéaires, il renvoie true uniquement là où ils se croisent en un point.

Une solution en deux étapes serait de calculer d'abord l'intersection réelle (ST_Intersection) de paires de lignes de route qui se coupent spatialement (ST_Intersects), puis de vérifier si le ST_GeometryType de l'intersection est " LINESTRING " (traitant correctement les cas qui renvoient GEOMETRYCOLLECTION s de [ MULTI]POINT s, [MULTI]LINESTRING s, etc.).

Il est clair qu'une solution plus simple et plus rapide est souhaitable.

Un deuxième exemple consiste à localiser des quais qui coupent la limite d'un lac sur une ligne et où une extrémité du quai est sur le rivage. En d'autres termes, lorsqu'un quai est à l'intérieur mais pas complètement contenu par un lac, croise la limite d'un lac sur une ligne, et où exactement l'une des extrémités du quai se trouve à l'intérieur ou sur la limite du lac. Il est possible d'utiliser une combinaison de prédicats spatiaux pour trouver les caractéristiques requises :

. mais inutile de dire que c'est assez compliqué.

Ces exigences peuvent être satisfaites en calculant la matrice d'intersection DE-9IM complète. PostGIS fournit la fonction ST_Relate pour ce faire :

Pour tester une relation spatiale particulière, un modèle de matrice d'intersection est utilisé. Il s'agit de la représentation matricielle augmentée des symboles supplémentaires :

T => la dimension d'intersection n'est pas vide, c'est-à-dire qu'elle est dans

En utilisant des modèles de matrice d'intersection, des relations spatiales spécifiques peuvent être évaluées de manière plus succincte. Les fonctions ST_Relate et ST_RelateMatch peuvent être utilisées pour tester les modèles de matrice d'intersection. Pour le premier exemple ci-dessus, le modèle de matrice d'intersection spécifiant deux lignes se coupant dans une ligne est ' 1*1***1** ':

Pour le deuxième exemple, le modèle de matrice d'intersection spécifiant une ligne en partie à l'intérieur et en partie à l'extérieur d'un polygone est ' 102101FF2 ':

4.2.2. Tirer parti des index

Lors de la construction de requêtes utilisant des conditions spatiales, il est important de s'assurer qu'un index spatial est utilisé, s'il existe (voir Section 4.1.7, « Créer des index spatiaux »). Pour ce faire, un opérateur ou une fonction spatiale prenant en charge l'index doit être utilisé dans la clause WHERE ou ON. Les opérateurs spatiaux incluent les opérateurs basés sur les cadres de délimitation (dont le plus couramment utilisé est &&) et les opérateurs de distance utilisés dans les requêtes du plus proche voisin (le plus courant étant <->.) Les fonctions d'indexation incluent la plupart des prédicats spatiaux nommés (comme ST_Intersects) et la plupart des prédicats de distance (comme ST_DWithin.)

Les fonctions telles que ST_Distance n'utilisent pas d'index pour optimiser leur fonctionnement. Par exemple, la requête suivante serait assez lente sur une grande table :

Cette requête sélectionne toutes les géométries dans geom_table qui sont à moins de 100 unités du point (100000, 200000). Il sera lent car il calcule la distance entre chaque point du tableau et le point spécifié, c'est-à-dire. un calcul ST_Distance() est calculé pour tous rangée dans le tableau.

Nous pouvons réduire le nombre de lignes traitées en utilisant la fonction d'indexation ST_DWithin :

Cette requête sélectionne les mêmes géométries, mais elle le fait de manière plus efficace. Ceci est activé par ST_DWithin() à l'aide de l'opérateur && en interne sur une zone de délimitation étendue de la géométrie de la requête. S'il existe un index spatial sur the_geom , le planificateur de requêtes reconnaîtra qu'il peut utiliser l'index pour réduire le nombre de lignes analysées avant de calculer la distance. L'index spatial permet de récupérer uniquement les enregistrements avec des géométries dont les cadres de délimitation chevauchent l'étendue étendue et donc qui force être à la distance requise. La distance réelle est ensuite calculée pour confirmer s'il faut inclure l'enregistrement dans l'ensemble de résultats.

4.2.3. Exemples de SQL spatial

Les exemples de cette section utiliseront deux tableaux, un tableau des routes linéaires et un tableau des limites polygonales des municipalités. Les définitions de table pour la table bc_roads sont :

La définition de table pour la table bc_municipality est :

Quelle est la longueur totale de toutes les routes, exprimée en kilomètres ?

Vous pouvez répondre à cette question avec un morceau de SQL très simple :

Quelle est la taille de la ville de Prince George, en hectares?

Cette requête combine une condition attributaire (sur le nom de la commune) avec un calcul spatial (de la superficie) :

Quelle est la plus grande municipalité de la province, par superficie?

Cette requête apporte une mesure spatiale dans la condition de requête. Il existe plusieurs manières d’aborder ce problème, mais la plus efficace est ci-dessous :

Notez que pour répondre à cette requête, nous devons calculer l'aire de chaque polygone. Si nous faisions cela beaucoup, il serait logique d'ajouter une colonne de zone à la table que nous pourrions indexer séparément pour les performances. En ordonnant les résultats dans une direction décroissante et en les utilisant à l'aide de la commande PostgreSQL "LIMIT", nous pouvons facilement sélectionner la plus grande valeur sans utiliser une fonction d'agrégat comme max().

Quelle est la longueur des routes entièrement contenues dans chaque municipalité?

Ceci est un exemple de "jointure spatiale", car nous rassemblons des données de deux tables (en faisant une jointure) mais en utilisant une condition d'interaction spatiale ("contenue") comme condition de jointure plutôt que l'approche relationnelle habituelle de jointure sur un clé commune :

Cette requête prend un certain temps, car chaque route de la table est résumée dans le résultat final (environ 250K routes pour notre exemple de table particulière). Pour des superpositions plus petites (plusieurs milliers d'enregistrements sur plusieurs centaines) la réponse peut être très rapide.

Créez un nouveau tableau avec toutes les routes de la ville de Prince George.

Il s'agit d'un exemple de « superposition », qui prend deux tables et génère une nouvelle table composée de résultats écrêtés ou coupés dans l'espace. Contrairement à la "jointure spatiale" illustrée ci-dessus, cette requête crée en fait de nouvelles géométries. Une superposition est comme une jointure spatiale turbo, et est utile pour un travail d'analyse plus précis :


1598 est bien, mais cela ne semble pas nous rapprocher de la résolution du problème actuel.

Seuls les deux derniers incluent la transformation de référence souhaitée. PROJ ne gère pas EPSG:4326 comme une donnée qui mérite une transformation prudente en NAD83. En fait, la date d'enregistrement entre en ligne de compte, car il y a 30 ans, NAD83 et WGS84 n'étaient pas si différents.

粉丝数 影响力 0

Vous pouvez également répertorier le pipeline complet :

projinfo -s EPSG:9057 -t EPSG:6342

[. ] Conversion de WGS 84 (G1762) (geog2D) en WGS 84 (G1762) (géocentrique) + WGS 84 (G1762) en ITRF2008 (1) + ITRF2008 en NAD83(2011) (1) + Conversion de NAD83(2011) (géocentrique) à NAD83(2011) (geog2D) + UTM zone 13N, 0,01 m, USA - CONUS et Alaska PRVI

Chaîne PROJ : +proj=pipeline +step +proj=axisswap +orderɤ,1 +step +proj=unitconvert +xy_in=deg +xy_out=rad +step +proj=cart & #43ellps=WGS84 +step +proj=helmert +xɢ.99343 +y=-1.90331 +z=-0.52655 +rxɢ.02591467 +ryɢ.00942645 +rzɢ.01159935 +s&# 610.00171504 +dxɢ.00079 +dy=-0.0006 +dz=-0.00134 +drxɨ.667e-05 +dry=-0.00075744 +drz=-5.133e-05 +ds= -0.00010201 +t_epoch򕚝 +convention=coordinate_frame +step +inv +proj=cart +ellps=GRS80 +step +proj=utm +zone១ +ellps=GRS80

粉丝数 影响力 0

Edit : la source CRS était EPSG : 9057

粉丝数 影响力 0

IIUC, ce dont nous avons besoin, c'est d'attacher la réalisation exacte de WGS84 aux données GNSS / pistes GPX. Nous pourrons essayer cela lorsque j'aurai terminé mon travail actuel d'ajout de choix pour les données vectorielles CRS (nécessaire pour GH-1561). Et par conséquent, nous devons gérer cela lors de l'affichage des coordonnées et de l'exportation des données vectorielles.

粉丝数 影响力 0

Pour aller un peu plus loin, cs2cs le fait

Notez que si l'époque n'est pas spécifiée, alors la transformation de référence est effectuée pour l'époque de référence de 1997, ce qui donne un ajustement qui est de 30 ou 40 % différent de ce qui est correct pour 2020.

Pour les tests, je suggérerais d'étendre d'abord GeoreferencingTest::testProjection_data.

Des améliorations de GeoreferencingTest::testProjection sont souhaitables.

  • Acceptez un paramètre indiquant l'époque.
  • Exiger une plus grande précision. Pour vérifier que l'époque est gérée correctement, la précision doit être vérifiée à environ 0,3 m (contre 2,2 m actuellement).

Je suppose que les détails de l'amélioration du test ne peuvent pas être réglés tant que les modifications apportées à la classe de géoréférencement ne sont pas mieux connues. Je pense que le géoréférencement exposera l'époque afin qu'un TemplateTrack puisse être lié à un CRS combiné à une heure. Tester ceci comparerait les coordonnées dans deux projeté systèmes de coordonnées, car ce qui compte c'est la transformation entre les modèle système de coordonnées et le carte's système de coordonnées projetées.

粉丝数 影响力 0

J'ai aussi fait des tests cs2cs avec la 4ème dimension, mais cela n'a pas amélioré la situation avec EPSG:4326 -)

Pour le moment, nous avons déjà HUGE_VAL au lieu de 0 pour l'époque, suite aux retours dans l'un de nos rapports de bogues PROJ.

La précision du test fournit toujours les versions Linux avec PROJ 4.9, mais cela pourrait être résolu par #ifdef s, ou en utilisant un autre champ de données.

粉丝数 影响力 0

Voici une liste partielle des numéros EPSG liés au WGS 84 :

1994 G730 EPSG : 7656 (x,y,z), 7657 (lat,lon,h), 9053 2D (lat,lon) 1997 G873 EPSG : 7658 (x,y,z), 7659 (lat,lon,h) , 9054 2D (lat,lon) 2002 G1150 EPSG : 7660 (x,y,z), 7661 (lat,lon,h), 9055 2D (lat,lon) 2012 G1674 EPSG : 7662 (x,y,z), 7663 (lat,lon,h), 9056 2D (lat,lon) 2013 G1762 EPSG : 7664 (x,y,z), 7665 (lat,lon,h), 9057 2D (lat,lon)

Les trois premiers semblent identiques. Idem pour les deux derniers. (Vérifié à l'aide de cs2cs et projinfo).

J'ai parlé trop tôt quand j'ai dit que les modèles d'ouverture fonctionnaient correctement. Les modèles utilisant lat/lon sont mal positionnés. L'EPSG que j'utilise ne fait aucune différence. En particulier, EPSG 7657 et 7665 produisent exactement la même position de modèle même si cs2cs dit qu'ils devraient être différents :

écho 40N 105W 0 | cs2cs EPSG:7657 EPSG:6342 500000,00 4427757.22 0,00 écho 40N 105W 0 | cs2cs EPSG:7665 EPSG:6342 500000,86 4427756.50 0,89

Les premiers résultats, qui sont décalés vers le NW par rapport au second, semblent être ce dont j'ai besoin. Je note également que EPSG:4326 produit le résultat "incorrect"

écho 40N 105W 0 | cs2cs EPSG : 4326 EPSG : 6342 500000,86 4427756.50 0,00

Mes images géoréférencées sont issues de la Pictométrie et je ne sais pas quelle donnée utilisent leurs coordonnées.

Je regarderai le code Mapper plus tard, mais si quelqu'un me bat, je ne serai pas mécontent :-)

Mappeur version v20200502.2

粉丝数 影响力 0

Mappeur version v20200502.2

Comme il n'y a pas de telles versions de version, il serait préférable de référencer le dernier ID de validation utilisé pour l'auto-compilation Mapper.

粉丝数 影响力 0

Mappeur version v20200502.2

C'est le numéro de build CI. C'est une référence de version parfaite.

Cependant, il ne résout que le problème 1597, pas celui-ci. Ici, nous devons toucher et tester plusieurs endroits dans le code source. Je ne veux pas faire de changements à la hâte sans en comprendre l'impact - pour le moment, chaque transformation dépend de notre CRS géographique par défaut, et il y aura des gens qui s'appuieront sur les transformations actuelles.

粉丝数 影响力 0

C'est le numéro de build CI

Wow! Où ces versions nocturnes sont-elles disponibles en téléchargement ?

粉丝数 影响力 0

Wow! Où ces versions nocturnes sont-elles disponibles en téléchargement ?

C'est hors sujet ici. Ce ne sont pas des constructions nocturnes. Et il y a une intention de ne pas les annoncer comme service général.

粉丝数 影响力 0

Pour les fichiers GPX, GDAL signale le CRS suivant :

GEOGCS["WGS 84", DATUM["WGS_1984", SPHEROID["WGS 84",6378137,298.257223563, AUTORITE["EPSG",񔮖"]], AUTORITE[&# 34EPSG",񔣖"]], PRIMEM["Greenwich",0, AUTORITÉ["EPSG",񕋥"]], UNITÉ["degree",0.0174532925199433, AUTORITÉ[ "EPSG",񕏂"]], AXE["Latitude",NORD], AXE["Longitude",EST], AUTORITE["EPSG",񔄆"] ]

粉丝数 影响力 0

J'ai effectué des tests avec un GPS basé sur Ublox F9P (en utilisant leur carte C099-F9P). Il prend en charge les corrections RTK sur Internet. J'ai découvert que les coordonnées GPS d'un lieu donné dépendent de la façon dont vous utilisez votre GPS :

-Le GPS rapporte les coordonnées lat/lon en utilisant WGS84 dans la réalisation originale (?) -Le GPS corrigé SBAS utilise WGS84 dans une réalisation récente (moins de 6 mois?). -Le GPS corrigé RTK utilise tout ce que votre station de base est configurée pour utiliser. Aux États-Unis, il s'agit souvent du NAD83.

Voici les coordonnées d'un point dans mon quartier :

GPS F9P avec mesures corrigées RTK (antenne GPS au-dessus de ma tête) 39.67797133 -105.16596350 Station de base WGS84 (actuelle) 39.67796617 -105.16595033 Station de base NAD83(2011)/delta réseau : 5.16E-6 -13.17E-6

Conversion de la valeur WGS84 à l'aide de https://tagis.dep.wv.gov/convert/ 39.6779713 -105.1659635 wgs84 (depuis la liste déroulante) 39.6779649 -105.1659534 nad83 (vers la liste déroulante) delta : 6.4E-6 -10.1E-6

Même conversion en utilisant PROJ avec la commande echo 39.6779713N 105.1659635W | cs2cs -f "%.8f" EPSG:7665 EPSG:6342 | cs2cs -d 7 EPSG:6342 EPSG:7657 produit un résultat identique. La transformation est WGS84(G1762) -> NAD83(2011) UTM 13N -> WGS84(G730)

Notez que sauter le NAD83(2011) intermédiaire, en utilisant à la place echo 39.6779713N 105.1659635W | cs2cs -d 7 EPSG:7665 EPSG:7657 produit un delta égal à zéro !

Avec OOM configuré pour utiliser CRS=EPSG:6342 (version NAD83 ci-dessus), je constate que les positions GPS ne correspondent aux détails des contours que si j'utilise un SBAS ou une station de base RTK avec WGS84. Si j'utilise la base RTK avec NAD83, je peux dire qu'ils sont éteints.

En comparant l'EPSG et les positions géographiques dans le panneau de géoréférencement d'OOM, il semble que OOM utilise la dernière réalisation WGS84 (EPSG:7665 ou EPSG générique:4326). Les données GPS corrigées par le SBAS peuvent donc être utilisées directement. En principe, les signaux GPS non corrigés doivent être modifiés, mais l'erreur intrinsèque est probablement trop importante pour s'en préoccuper.

Pour les GPS corrigés RTK, il devrait y avoir une option pour les transformer.

Je suis en dialogue avec Pictométrie sur les données de géoréférencement qu'ils fournissent et j'ajouterai une note ici une fois que j'aurai une réponse. Je suis en bonne position pour tester tout nouveau code pour les transformations de coordonnées de modèle.


Transformations PROJ4 / PostGIS entre les transformations WGS84 et NAD83 en Alaska - Systèmes d'Information Géographique

REMARQUE : Ce référentiel ne doit être utilisé qu'avec PROJ < 7. Pour PROJ 7 ou version ultérieure, utilisez le référentiel de données PROJ.

Les fichiers de ce package peuvent être décompressés dans le répertoire de données PROJ. Pour un PROJ installé, cela peut être /usr/local/share/proj ou /usr/share/proj sur les systèmes d'exploitation de style Unix.

Notez que ce package comprend des fichiers de décalage de grille au format "CTable2" pour NAD27 aux États-Unis et nécessite PROJ 4.8.0 ou plus récent. Du côté positif, il n'est pas nécessaire de compiler les fichiers ASCII en fichiers binaires avec cette version car les fichiers CTable2 ne dépendent pas du système (à la différence des fichiers CTable produits dans PROJ 4.7.0 et versions antérieures).

À propos du paquet Datum Grid

Le package de grille de données pour PROJ est maintenu sur le référentiel OSGeo proj-datumgrid sur GitHub. Toute personne qui le clone, ou l'un de ses forks, doit installer l'extension Git Large File Storage (LFS), en raison de la présence de fichiers de plus de 100 Mo. Consultez l'introduction de GitHub à LFS pour plus d'informations.

Toutes les grilles du package sont publiées sous des licences permissives. New grids are accepted into the package as long as they are released under a license that is compatible with the Open Source Definition and the source of the grid is clearly stated and verifiable. Suitable licenses include:

  • Public domain
  • X/MIT
  • BSD 2/3/4 clause
  • CC0
  • CC-BY (v3.0 or later)
  • CC-BY-SA (v3.0 or later)

Consult CONTRIBUTING.md to submit a new grid.

2-dimensional transformation grids for horizontal datum shifts.

Grid conversion from NAD27 to NAD83 in Canada. This file is superseded by a higher resolution ntv2_0.gsb grid.

Grid transformation from NTF to RGF93 in France.

La source: ADV, with direct link from BKG
Format: NTv2
License: Free redistribution is allowed and welcome

Grid transformation from DE_DHDN to ETRS89 in Germany.

Note: proj-datumgrid-europe includes the BWTA2017.gsb grid for Baden-Württemberg

New Zealand: NZGD49 -> NZGD2000

This grid file was computed by Land Information New Zealand at approximately a 20 km interval for the conversion between NZGD49 and NZGD2000.

USA: NAD27 and older CRS -> NAD83

  • alaska - Alaska
  • conus - Conterminous U.S.
  • hawaii - Hawaii. Old Hawaiian (EPSG:4135) to NAD83
  • prvi - Puerto Rico, Virgin Is. Puerto Rico (EPSG:4139) to NAD83
  • stgeorge - St. George Is, Alaska. St. George Island (EPSG:4138) to NAD83
  • stlrnc - St. Lawrence Is., Alaska. St. Lawrence Island (EPSG:4136) to NAD83
  • stpaul - St. Paul Is., Alaska. St. Paul Island (EPSG:4137) to NAD83

USA: NAD83 -> NAD83 (HARN/HPGN)

Grid data for high precision conversion of geographic coordinates from the original NAD83 (1986) (EPSG:4269) to NAD83 High Precision Geodetic Networks (HPGNs) (EPSG:4152), also referred to as High Accuracy Reference Networks (HARNs). NAD 83 coordinates based on the HPGN/HARN surveys changed approximately 0.2 to 1.0 meter relative to the original NAD 83 (1986) adjustment.

  • FL - Florida
  • MD - Maryland
  • TN - Tennessee
  • WI - Wisconsin
  • WO - Washington, Oregon, N. California

1-dimensional transformation grids for vertical datum shifts.

Worldwide: EGM96 geoid model

15 minute worldwide geoid undulation grid that transforms physical heights to WGS84 ellipsoidal heights.

Regional PROJ resource packages

In addition to the core proj-datumgrid package, regional collections of grids and init-files also exist. These includes grids and init-files that are not essential for the functionality of PROJ but still of general interest to PROJ-users in the package-specific regions.

The regional packages can be downloaded from the OSGeo download server.

This additional package with world scope contains files of big size.

More information about the included grids and init files can be found in README.WORLD

The regional package for Europe includes resources for the following countries:

  • Denmark
  • France
  • Ireland+Northern Ireland
  • Sweden
  • The Faroe Islands
  • The Nordic+Baltic countries

More information about the included grids and init files can be found in README.EUROPE

The regional package for North America includes resources for the following countries:

More information about the included grids and init files can be found in README.NORTHAMERICA

The regional package for Oceania includes resources for the following countries:


4.6. Building Indexes

Indexes are what make using a spatial database for large data sets possible. Without indexing, any search for a feature would require a "sequential scan" of every record in the database. Indexing speeds up searching by organizing the data into a search tree which can be quickly traversed to find a particular record. PostgreSQL supports three kinds of indexes by default: B-Tree indexes, R-Tree indexes, and GiST indexes.

B-Trees are used for data which can be sorted along one axis for example, numbers, letters, dates. GIS data cannot be rationally sorted along one axis (which is greater, (0,0) or (0,1) or (1,0)?) so B-Tree indexing is of no use for us.

R-Trees break up data into rectangles, and sub-rectangles, and sub-sub rectangles, etc. R-Trees are used by some spatial databases to index GIS data, but the PostgreSQL R-Tree implementation is not as robust as the GiST implementation.

GiST (Generalized Search Trees) indexes break up data into "things to one side", "things which overlap", "things which are inside" and can be used on a wide range of data-types, including GIS data. PostGIS uses an R-Tree index implemented on top of GiST to index GIS data.

4.6.1. GiST Indexes

GiST stands for "Generalized Search Tree" and is a generic form of indexing. In addition to GIS indexing, GiST is used to speed up searches on all kinds of irregular data structures (integer arrays, spectral data, etc) which are not amenable to normal B-Tree indexing.

Once a GIS data table exceeds a few thousand rows, you will want to build an index to speed up spatial searches of the data (unless all your searches are based on attributes, in which case you'll want to build a normal index on the attribute fields).

The syntax for building a GiST index on a "geometry" column is as follows:

The above syntax will always build a 2D-index. To get the an n-dimensional index supported in PostGIS 2.0+ for the geometry type, you can create one using this syntax

Building a spatial index is a computationally intensive exercise: on tables of around 1 million rows, on a 300MHz Solaris machine, we have found building a GiST index takes about 1 hour. After building an index, it is important to force PostgreSQL to collect table statistics, which are used to optimize query plans:

GiST indexes have two advantages over R-Tree indexes in PostgreSQL. Firstly, GiST indexes are "null safe", meaning they can index columns which include null values. Secondly, GiST indexes support the concept of "lossiness" which is important when dealing with GIS objects larger than the PostgreSQL 8K page size. Lossiness allows PostgreSQL to store only the "important" part of an object in an index -- in the case of GIS objects, just the bounding box. GIS objects larger than 8K will cause R-Tree indexes to fail in the process of being built.

4.6.2. Using Indexes

Ordinarily, indexes invisibly speed up data access: once the index is built, the query planner transparently decides when to use index information to speed up a query plan. Unfortunately, the PostgreSQL query planner does not optimize the use of GiST indexes well, so sometimes searches which should use a spatial index instead default to a sequence scan of the whole table.

If you find your spatial indexes are not being used (or your attribute indexes, for that matter) there are a couple things you can do:

Firstly, make sure statistics are gathered about the number and distributions of values in a table, to provide the query planner with better information to make decisions around index usage. For PostgreSQL 7.4 installations and below this is done by running update_geometry_stats([table_name, column_name]) (compute distribution) and VACUUM ANALYZE [table_name] [column_name] (compute number of values). Starting with PostgreSQL 8.0 running VACUUM ANALYZE will do both operations. You should regularly vacuum your databases anyways -- many PostgreSQL DBAs have VACUUM run as an off-peak cron job on a regular basis.

If vacuuming does not work, you can force the planner to use the index information by using the SET ENABLE_SEQSCAN=OFF commander. You should only use this command sparingly, and only on spatially indexed queries: generally speaking, the planner knows better than you do about when to use normal B-Tree indexes. Once you have run your query, you should consider setting ENABLE_SEQSCAN back on, so that other queries will utilize the planner as normal.

As of version 0.6, it should not be necessary to force the planner to use the index with ENABLE_SEQSCAN .

If you find the planner wrong about the cost of sequential vs index scans try reducing the value of random_page_cost in postgresql.conf or using SET random_page_cost=#. Default value for the parameter is 4, try setting it to 1 or 2. Decrementing the value makes the planner more inclined of using Index scans.


10.6. Datum Transformations¶

In QGIS, ‘on-the-fly’ CRS transformation is enabled by default, meaning that whenever you use layers with different coordinate systems QGIS transparently reprojects them to the project CRS. For some CRS, there are a number of possible transforms available to reproject to the project’s CRS!

By default, QGIS will attempt to use the most accurate transformation available. However, in some cases this may not be possible, e.g. whenever additional support files are required to use a transformation. Whenever a more accurate transformation is available, but is not currently usable, QGIS will show an informative warning message advising you of the more accurate transformation and how to enable it on your system. Usually, this requires download of an external package of transformation support files, and extracting these to the proj folder under your QGIS user profile folder.

If desired, QGIS can also prompt you whenever multiple possible transformations can be made between two CRSs, and allow you to make an informed selection of which is the most appropriate transformation to use for your data.

This customization is done in the Settings ► Options ► Transformations tab menu under the Default datum transformations group:

using Ask for datum transformation if several are available : when more than one appropriate datum transformation exist for a source/destination CRS combination, a dialog will automatically be opened prompting users to choose which of these datum transformations to use for the project. If the Make default checkbox is ticked when selecting a transformation from this dialog, then the choice is remembered and automatically applied to any newly created QGIS projects.

or defining a list of appropriate datum transformations to use as defaults when loading a layer to a project or reprojecting a layer.

Use the button to open the Select Datum Transformations dialog. Then:

Choose the Source CRS of the layer, using the drop-down menu or the Select CRS widget.

Provide the Destination CRS in the same way.

A list of available transformations from source to destination will be shown in the table. Clicking a row shows details on the settings applied and the corresponding accuracy and area of use of the transformation.

Fig. 10.5 Selecting a preferred default datum transformation ¶

In some cases a transformation may not be available for use on your system. In this case, the transformation will still be shown (greyed) in this list but can not be picked until you install the required package of transformation support. Usually, a button is provided to download and install the corresponding grid, which is then stored under the proj folder in the active user profile directory.

Find your preferred transformation and select it

Set whether you Allow fallback transforms if preferred operation fails

A row is added to the table under Default Datum Transformations with information about the Source CRS , the Destination CRS , the Operation applied for the transformation and whether Allow fallback Transforms is enabled.

From now, QGIS automatically uses the selected datum transformations for further transformation between these two CRSs until you remove it () from the list or change the entry () in the list.

Datum transformations set in the Settings ► Options ► Transformations tab will be inherited by all new QGIS projects created on the system. Additionally, a particular project may have its own specific set of transformations specified via the CRS tab of the Project properties dialog ( Project ► Properties… ). These settings apply to the current project only.

© Copyright 2002-now, QGIS project. Last updated on Jul 01, 2021 09:02.


The shapefile format is a geospatial vector data format for geographic information system (GIS) software. It is developed and regulated by Esri as a mostly open specification for data interoperability among Esri and other GIS software products. The shapefile format can spatially describe vector features: points, lines and polygons.

The term “shapefile” is quite common, but the format consists of a collection of files with a common filename prefix, stored in the same directory. The three mandatory files have filename extensions .shp, .shx, and .dbf.

UNE Spatial Reference System Identifier (SRID) is a unique value used to unambiguously identify projected, unprojected, and local spatial coordinate system definitions. These coordinate systems form the heart of all GIS applications. Most often there is an .xml or .prj file to help us see which SRID we are dealing with.

If it is a large amount of data, it should be transferred to the database, and Tableau supports direct connections to spatial data using these connectors:

When you need to accurately enter coordinates in a GIS, the first step is to uniquely define all coordinates on Earth.

This means you need a reference frame for your latitude and longitude coordinates because where would you be on Earth without having reference to it?

Because the Earth is curved – and in GIS we deal with flat map projections – we need to accommodate both the curved and flat views of the world. Surveyors and geodesists have accurately defined locations on Earth. More about map projections at https://en.wikipedia.org/wiki/List_of_map_projections and https://en.wikipedia.org/wiki/Map_projection

We begin modelling the Earth with an ellipsoid. To be clear, this is different from a geoid which is a measure of mean sea level. Over time, the ellipsoid has been estimated to the best of our ability through a massive collection of surface measurements.

When you combine these measurements, we arrive at a geodetic datum. Horizontal datums precisely specify each location on Earth’s surface in latitude and longitude or other coordinate systems. For instance, NAD83, WGS84 and ETRS89 are examples of geodetic datums.

Using geographic coordinate systems, we can define positions on Earth. For example, we use degrees/minutes/seconds (DMS) and decimal degrees (DD) for spherical coordinates. After we flatten the Earth with map projections, we use projected coordinate systems like the State Plane Coordinate System (SPCS) or UTM grid system.

In Tableau, the following geodetic datums (SRIDs) are supported:

le North American Datum of 1983 (NAD 83) is the most current datum being used in North America. It provides latitude and longitude and some height information using the reference ellipsoid GRS80. Geodetic datums like the North American Datum 1983 (NAD83) form the basis of coordinates of all horizontal positions for Canada and the United States.

In 1990 at it symposium in Firenze, Italy, EUREF designed the European Terrestrial Reference System 89 (ETRS89) in such a way that it would be based on the ITRS except that it is tied to the stable part of Europe, so that the relations between European stations are kept fixed. Coordinates in ETRS89 are expressed as either three dimensional (X, Y, Z) Cartesian coordinates or as three dimensional ellipsoidal coordinates (Φ, λ and H, Ellipsoidal height), based on the GRS80 ellipsoid.

The acceptance of ETRS89 by several communities (civil aviation, industry, national and regional agencies) as the backbone for geo-referencing in Europe is a continuous process. EuroControl (European Agency for Safely of Air navigation) uses ETRS89 since a long time in its technical specifications and there is a recommendation by the European Commission to adopt ETRS89 as the geodetic datum for geo-referenced information and to promote the use of ETRS89 within its member states.

The Global Positioning System uses the World Geodetic System (WGS84) as its reference coordinate system.

In spatially enabled databases (such as IBM DB2, IBM Informix, Ingres, Microsoft SQL Server, MySQL, Oracle RDBMS, Teradata, PostGIS, SQL Anywhere and Vertica), SRIDs are used to uniquely identify the coordinate systems used to define columns of spatial data or individual spatial objects in a spatial column.

Remember: If you must show continent-wide or worldwide data, then use WGS84, if you are lowering the level of information to a region or city, use a national projection.

To move data from Shapefiles to a database, we can use Open Source tools to do all that quickly!I would recommend to use ogr2ogr (https://gdal.org/programs/ogr2ogr.html) because the data may be in a projection used in your country and should be transferred to a projection that Tableau supports.

Using ogr2ogr is really easy:

How to use ogr2ogr for changing the coordinate reference system from EPSG:4326 to EPSG:3857:

If the data is stored in Database in WGS84 or ETRS89 but you have Geometry and you need Geography, we can use the following trick:

We must add 2 fields to the tables we want to convert:

Once you transfer Shapefile to DB, you can really do quality analysis over the data.

Although databases allow points, lines and areas to be in the same table, it is preferable that each element goes to its own table in the database.


Conclusion and perspective

Apache SIS and Proj.4 are in agreement for all coordinate conversions (e.g. map projections) tested in this blog on a planet flattened like Earth. But they sometime disagree by 2 meters for coordinate transformations (e.g. datum shifts) on Earth and 90 meters for map projections on a Earth-sized planet flattened like Jupiter. In two of the three disagreements, the library providing the correct answer is Apache SIS. In the third disagreement, we may argue that both libraries are not wrong provided that distances between Proj.4 results and Apache SIS results are smaller than the transformation accuracy. But Proj.4 gives no indication about the accuracy of its operations.

The degree of confidence that we can put in a coordinate operation library depends on many factors, some at Proj.4 advantage and others at Apache SIS advantage:

Long history and large users base, which in theory increases the chances that bugs have been identified and fixed. However Proj.4 included GIGS in its test suite only recently, and as of September 2017 is known to produce different results for some GIGS tests (this issue has also been observed years ago with Proj.4 wrappers in GeoAPI). Since Proj.4 is used by MapServer, PostGIS, QGIS and since Proj4J and Proj4JS are derived from Proj.4, any potential error in the library may not be immediately visible when using only above-cited software if they all reproduce the same errors.

Apache SIS advantages:

Run subset of GIGS tests since 2011 (indirectly). Apache SIS either passes those tests or have identified corrections that need to be applied to GIGS tests. However the tests implemented in GeoAPI and Apache SIS are incomplete.

Standard (ISO 19162) and more detailed description of coordinate operations. This capability allows users to verify what the library is actually doing (e.g. to see the effective Bursa-Wolf parameters). This information is often necessary when investigating why data do not appear where they should be.

Late-binding implementation, which enables better compliance with authoritative definitions (EPSG) for choosing Bursa-Wolf parameters. For some pairs of CRS, the use of WGS84 as a pivotal system in early-binding implementations can only introduce errors (e.g. 1 metre in Martinique).

Domain of validity information. This reduce the risk that users apply the wrong transformation for a given pair of CRS (for example using in Canada the NAD27 to WGS84 transformations designed for USA).

Expected accuracy information. This avoid luring the users in thinking that a coordinate operation is accurate up to rounding errors while actually it may have a stochastic 20 metres error.

More robustness to high eccentricities. The is beneficial mostly to planetary CRS, but also improves Cylindrical Equal Area inverse projection accuracy as a side-effect.

At the time of writing this blog, work is underway for improving Proj.4 with a new API. But I do not know which of above issues would be addressed. Changing the current Proj.4 early-binding approach into a late-binding one would be a significant architectural change. Whether such improvement is needed or not depends on the desired accuracy. Unfortunately, there is nothing in current implementation telling to user if Proj.4 is delivering the accuracy that (s)he need. Ideally, this lack of critical information could be fixed by implementing Well Known Text (WKT) version 2 (ISO 19162) in Proj.4. The following points describe a possible path:

  • Move the WKT parsing and formatting code from GDAL to Proj.4.
  • Provide WKT 2 support for projPJ data structure:
    • Define some WKT 2 keywords as aliases of WKT 1 keywords (e.g. “PROJCRS” as alias of “PROJCS” ).
    • When a WKT 2 keyword is detected, raise a flag changing the way GDAL/Pro.4 applies units of measurement. While the WKT 2 standard defined by ISO 19162 is designed for backward compatibility with WKT 1 as defined in OGC 01-009 standard, the way that GDAL/Proj.4 currently handles units of measurement other than degrees and meters is not conform to that WKT 1 standard. This is unlikely to change for GDAL compatibility reasons, but this error shall not be propagated to WKT 2 parser. This would require GDAL/Proj.4 to implement a WKT parser working in two different modes depending on which keywords is found in the WKT definition.
    • Add support for mandatory WKT 2 elements, in particular AXIS .
    • Include the Bursa-Wolf parameters (or any other parameters) effectively used.
    • Include operation domain of validity and expected accuracy. Those metadata are better described with late-binding implementations, but an early-binding implementation can still give some idea for example by computing the intersection of the domain of validity of source and target CRS.

    Since Apache SIS is already there (and beyond), it could be used for inter-operability experiments and validation during Proj.4 developments. The Java Native Interface (JNI) bindings in the sis-gdal module should make this process easy.


    Voir la vidéo: ArcMap 10: Reproject WGS 1984 to UTM NAD 1983 Zone 17 with Geographic Transformation Basics (Octobre 2021).