Suite

Transformation de projection dans OpenLayers3


J'essaie de transformer un objet GeoJSON d'une certaine transformation (EPSG:28992) en mon système de coordonnées cartographique actuel (EPSG:4326). J'ai essayé de faire plusieurs choses mais aucune ne semble fonctionner. J'essaie actuellement d'utiliser proj4.js. Un exemple minimal de mon script peut être trouvé ici :

http://jsfiddle.net/TimLucas/k69ujyev/5/

J'essaie de trouver une méthode pour transformer ma couche GeoJSON (Layer2) en la projection utilisée dans ma carte, telle que définie par les styles qu'elle devrait apparaître sous forme de points verts. Cela semble en quelque sorte avoir fonctionné pour l'autre couche (Couche1, points rouges). J'ai essayé de suivre les différents exemples sur openlayers.org (qui suggèrent d'utiliser proj4.js), mais cela ne fonctionne pas pour une raison quelconque. Pouvez-vous s'il vous plaît m'aider avec ce que je fais mal?

Edit: j'ai oublié de mentionner, l'autre projection est celle que OL prend en charge par défaut, donc le problème ici est d'utiliser des systèmes de projection externes…

Edit2 : J'ai découvert qu'ArcMAP n'exporte pas très bien ce système de coordonnées. Je l'ai changé à la main pour les coordonnées correctes mais ne s'affiche toujours pas, des suggestions ? Et quelqu'un a-t-il des suggestions sur le moyen le plus simple de convertir ESRI JSON en GeoJSON ?


Il n'y a rien de mal avec votre GeoJSON. Il suffit de définir la projection par défaut et la projection de destination dans la source pour une projection à la volée. De plus, il n'est pas nécessaire d'enregistrer les objets de projection dans des variables, commeProjectionNL, vous pouvez utiliser le code EPSG de n'importe quelle projection, après qu'il ait été défini par Proj4JS. Bien sûr, vous pouvez changer« EPSG : 28992 »avecProjectionNL, selon ce qui vous semble le plus logique.

var Layer2 = new ol.layer.Vector({ source : new ol.source.GeoJSON({ objet : '{"type":"FeatureCollection",[… ]}', defaultProjection : 'EPSG:28992', projection : ' EPSG : 3857' }), style : styleFunction2 });

Leprojectionpropriété doit toujours être la projection de destination (projection cartographique), alors que vous devez définir la projection source dans lepar défautProjectionparamètre.


Projections¶

Chaque projection cartographique implique la distorsion des zones, des distances, des directions et ainsi de suite, dans une certaine mesure. Certaines projections préservent la zone, de sorte que tous les objets ont une taille relative les uns par rapport aux autres, d'autres projections préservent les angles (conformes) comme la projection de Mercator. Certaines projections tentent de trouver un bon équilibre intermédiaire avec une distorsion minimale sur plusieurs paramètres.

Le point commun à toutes les projections est la transformation du monde (sphérique) en un système de coordonnées cartésiennes plat. Le choix de la bonne projection pour vos données dépend en grande partie de la façon dont vous utiliserez les données.

Parfois, une seule projection peut ne pas répondre à toutes vos exigences et vous devez transformer et reprojeter entre les systèmes de référence spatiale. PostGIS inclut une prise en charge intégrée pour modifier la projection des données, en utilisant le ST_Transform(géométrie, srid) une fonction. Pour gérer les identifiants de référence spatiale sur les géométries, PostGIS fournit les ST_SRID(géométrie) et ST_SetSRID(géométrie, srid) les fonctions.

Pour confirmer le SRID (identificateur de référence spatiale) d'une table géométrique, utilisez la fonction ST_SRID.

Il existe deux définitions de �” (ou de toute valeur SRID valide) conservées dans la table PostGIS spatial_ref_sys. La définition “well-known text” ( WKT ) est conservée dans la colonne srtext et le format “proj.4” dans la colonne proj4text.

Les colonnes srtext et proj4text sont importantes. La colonne srtext est utilisée par des programmes externes tels que GeoServer, uDig et FME, et la colonne proj4text est utilisée en interne par PostGIS.


Samuel Bosch

Merci pour le commentaire, je sais que ogr l'a déjà utilisé pour d'autres choses comme l'ajout de fichiers de formes et la lecture de fichiers MapInfo à partir de C#. J'ai utilisé ESRI pe.dll car je ne voulais pas installer de logiciel supplémentaire côté client et je voulais être sûr que les résultats étaient les mêmes que lorsque vous utilisez l'outil de projection ESRI.

Super article! Mais j'ai un problème pour lequel vous pourrez peut-être m'aider. J'essaie de convertir de GCS NAD27 en PCS UTM NAD83 17N mais je n'arrive pas à faire fonctionner correctement la transformation.

Fondamentalement, j'ai supprimé le pe_proj_to_geog de la fonction de transformation. Le script fonctionne bien mais les résultats ne semblent pas prendre en compte la transformation. En fait, peu importe que je fasse la transformation ou non, j'obtiens toujours les mêmes résultats.

Avez-vous des suggestions ici? Tout avis serait grandement apprécié. Merci!

Avez-vous essayé la projection dans ArcMap ou ArcCatalog ?
Je ne connais pas les systèmes de projection américains mais je pense que vous devrez d'abord faire une transformation géographique du NAD27 au NAD83 et du NAD83 au NAD83 17N projeté.
Pouvez-vous m'envoyer des données de test et votre script ?

J'ai essayé la projection dans ArcCatalog et ArcObjects et j'obtiens les mêmes résultats. Malheureusement, j'en ai besoin pour fonctionner en Python. Quelle est la meilleure façon de vous faire parvenir le script ? Vous pouvez m'envoyer un e-mail à [email protected] Merci!

Ce que j'essaie de faire, c'est de charger en mémoire un module .dll. Il a été chargé avec succès.

>>> malib = CDLL("d:SHImapsAS13910ArealInterpolator.dll")
>>> imprimer malib

L'utilisation manuelle de ce module nécessitera des paramètres d'entrée (fichiers cartographiques SIG) et le module produira un nouveau fichier.


Génial - les tuiles vectorielles devraient maintenant fonctionner ! Cependant, mapbox-gl-js est encore en utilisant son système de coordonnées par défaut. Nous ne pouvons pas y faire grand-chose à part soumettre un PR !

Ajoutez la station Mawson à la carte au [62.87417, -67.603232] :

Ne semble pas être le bon emplacement. proj4 à la rescousse ! Il peut transformer les coordonnées pour nous côté client. Gardez à l'esprit que cela entraîne un coût de performance très réel. Peut-être pouvez-vous trouver un moyen de minimiser cela. Voici un script CDN pour proj4 :

Mapbox utilise EPSG:3857, qui est prédéfini dans la bibliothèque proj. Nous pouvons trouver des définitions de proj sur des sites comme epsg.io et spatialreference.org. Pour en définir un manuellement, passez un alias de votre choix comme premier argument et la définition comme second :

Transformez d'abord les coordonnées en notre projection souhaitée. Transformez ensuite le résultat de notre affichage projection (projection Web Mercator de Mapbox, EPSG:3857), aux coordonnées géographiques standard lat/lon EPSG:4326 (qui sont également prédéfinies dans proj) :

Leaflet, mapbox-gl-js, Google Maps, etc. finissent tous par transformer les valeurs en un système plat permettant de peindre des pixels aux coordonnées x/y pour les afficher sur nos écrans. Mapbox accepte nos coordonnées lat/lon, puis les modifie avec un tas de maths. Nous devons contourner ce processus d'une manière ou d'une autre, en procédant désormais comme suit :

  • Prenez un point lat/long à Mawson qui s'affiche bien avec une couche Mapbox normale.
  • Reprojetez cela avec proj sur EPSG:3031 afin qu'il corresponde à la couche stéréographique.
  • mapbox-gl-js le traitera comme EPSG:3857 et le placera au même endroit qu'avant.
  • Reprojetez-le à nouveau sur EPSG:4326, lisez uniquement le point EPSG:3031 comme EPSG:3857.
  • Donne des coordonnées qui s'affichent de manière incorrecte sur un calque normal, mais parfaitement pour le calque EPSG:3031.

Couches de remplissage-extrusion, mapbox-gl-draw et autres bibliothèques :

remplissage-extrusion les couches fonctionnent bien, l'axe z n'est pas affecté dans ce contexte. Notez que toutes les bibliothèques mapbox-gl-js ne connaîtront pas les différents systèmes de coordonnées et vous devrez reprojeter les coordonnées lorsque vous les utiliserez. Encore une fois, le coût des performances.


Transformation entre WGS 84 Web Mercator / WGS84 Web Mercator (sphère auxiliaire) et WGS 84 (ellipsoïde)

En pratique, comment gérer la transformation datum/projection entre WGS 84 Web Mercator / WGS84 Web Sphere Mercator et WGS 84 (ellipsoïde). De plus, comment transférer « correctement » ?

par Melita Kennedy

Si vous utilisez EPSG:3857 / ESRI: 102100 / OpenLayers:900913, vous n'avez rien de différent à faire que la conversion vers l'ancien EPSG:4326, WGS 1984. La conversion "sphère" funky WGS 1984 est effectuée dans l'algorithme de projection, plutôt que via une transformation géographique/donnée. Il vous suffirait de sélectionner ou de définir une transformation pour convertir d'Ain el Abd 1970 en WGS 1984.

Si vous utilisez Esri:102113 ou EPSG:3785 (pourquoi ??), ceux-ci utilisent un GeoCRS basé sur une sphère et vous avez dû effectuer une sorte de transformation comptable pour convertir entre eux. Cependant, aucun changement de coordonnées réel n'a lieu.

La conversion "sphère" funky WGS 1984 est effectuée dans l'algorithme de projection, plutôt que via une transformation géographique/donnée.

Il semble que certains décalages existent, dans la partie nord de la péninsule du Moyen-Orient, si aucune transformation n'est appliquée.

Vos informations donnent quelques indices, ce qui peut me pousser à essayer autre chose.

Pour EPSG 3785, l'une des raisons pour lesquelles nos clients acceptent « était » :


Ce projet était auparavant hébergé sur CodePlex - je l'ai simplement déplacé vers GitHub et je me suis assuré qu'il serait construit avec le dernier Visual Studio. Au-delà, ce projet n'est actuellement pas maintenu.

Moteur de référence spatiale et de projection .NET

Proj.NET effectue des conversions de coordonnées point à point entre les systèmes de coordonnées géodésiques pour une utilisation dans fx. Systèmes d'information géographique (SIG) ou applications GPS. Le modèle de référence spatiale utilisé est conforme à la spécification Simple Features.

  • Transformations de référence
  • Systèmes de coordonnées géographiques, géocentriques et projetées
  • .NET Standard 1.0, donc fonctionnera avec n'importe quel cadre de plainte .NET Standard 1.0 (c'est-à-dire tous !)
  • Convertit les systèmes de coordonnées vers/depuis le texte bien connu (WKT) et vers XML

Types de projection actuellement pris en charge

  • Mercator
  • Mercator transverse
  • Albers
  • Lambert conforme
  • Krovak Voir Projections prises en charge pour plus de détails.

Il y a aussi un package disponible dans la Galerie Nuget, créé par Mathieu Cartoixa Proj.NET 1.2

Pour une introduction aux systèmes de référence spatiale, voir ici

Si vous travaillez avec Google/Bing/OpenLayers, peut-être que cet article de blog peut vous aider : La projection sphérique Mercator de Google Maps / Bing Maps


Commencer

Les bases d'OpenLayers sont simples - incluez le JavaScript dans votre page, placez un div avec un identifiant et transmettez-le à OpenLayers. L'exemple suivant utilise jQuery pour charger OpenLayers, mais jQuery n'est pas requis.

Et maintenant, nous avons une carte qui contient la carte OpenStreet, la carte Google Street et la carte Bing Street.

Il y a une chose qui me semble avoir besoin d'explications. Sur la première ligne, vous verrez quelque chose sur les projections. Qu'est-ce que vous pourriez demander? Une projection est une façon de voir le monde. Pendant un certain temps dans le passé, on croyait que la terre était plate et les projections sont un moyen de rendre la terre à nouveau plate. Nous connaissons tous le système de coordonnées WGS84 de notre GPS (alias EPSG:4326), mais la plupart des pays ont une ou plusieurs projections qu'ils utilisent pour leurs données géographiques.

La projection sphérique Mercator (EPSG:900913) est très populaire dans ces applications, également utilisée par Google et Bing. C'est pourquoi nous disons à OpenLayers d'utiliser celui-ci. C'est là qu'OpenLayers excelle. Vous pouvez définir différentes projections sur chaque couche ou données, et OpenLayers gérera la transformation entre elles.

Le reste de l'exemple parle de lui-même : créez toutes les couches de la carte, ajoutez-les à la vue, centrez-les à un endroit (notez à nouveau la transformation) et affichez un sélecteur de couches.


Transformation de projection dans OpenLayers3 - Systèmes d'Information Géographique

Proj4js est une bibliothèque JavaScript permettant de transformer les coordonnées des points d'un système de coordonnées à un autre, y compris les transformations de datum. À l'origine un portage de PROJ (alors connu sous le nom de PROJ.4) et de GCTCP C (Archive), il fait partie du groupe de projets MetaCRS.

Selon vos préférences

ou récupérez simplement manuellement le fichier proj4.js dans le dossier dist/ de la dernière version.

Si vous ne souhaitez rien télécharger, Proj4js est également hébergé sur cdnjs pour une utilisation directe dans vos applications de navigation.

Les projections peuvent être des chaînes proj ou wkt.

Les coordonnées peuvent un objet de la forme ou un tableau de la forme [x,y] .

Lorsque les 3 arguments sont donnés, le résultat est que les coordonnées sont transformées de la projection1 à la projection 2. Et renvoyées dans le même format que celui dans lequel elles ont été données.

Si une seule projection est donnée, on suppose qu'elle est projetée de WGS84 (de Projection est WGS84).

Si aucune coordonnée n'est donnée, un objet avec deux méthodes est renvoyé, ses méthodes sont en avant qui se projette de la première projection à la seconde et inverse qui se projette de la seconde à la première.

Et comme ci-dessus, si une seule projection est donnée, elle est supposée provenir de wgs84 :

Si vous préférez définir une projection sous forme de chaîne et la référencer de cette manière, vous pouvez utiliser la méthode proj4.defs qui peut être appelée de 2 manières, avec un nom et une projection :

au lieu d'écrire toute la définition de proj, par défaut, proj4 a les projections suivantes prédéfinies :

  • 'EPSG:4326', qui a l'alias suivant
    • 'WGS84'
    • 'EPSG:3785'
    • 'GOOGLE'
    • 'EPSG:900913'
    • 'EPSG:102113'

    Les projections définies sont également accessibles via la fonction proj4.defs ( proj4.defs('EPSG:4326') ).

    proj4.defs peut également être utilisé pour définir un alias nommé :

    Ajustements de référence basés sur la grille

    Pour utiliser +nadgrids= dans une définition de proj, lisez d'abord votre fichier NTv2 .gsb (par exemple depuis https://github.com/OSGeo/proj-datumgrid) dans un ArrayBuffer, puis transmettez-le à proj4.nadgrid . Par exemple:

    puis utilisez la clé donnée dans votre définition, par ex. [email protected],null . Voir Ajustements de référence basés sur la grille.

    L'implémentation de TypeScript a été ajoutée au référentiel DefinitelyTyped.

    Pour configurer les outils de génération, assurez-vous que node et grunt-cli sont installés, puis exécutez npm install .

    Pour effectuer les tests de compilation et de navigateur complets :

    Pour exécuter des tests de nœud avec une exécution de couverture :

    Pour créer un build avec uniquement les projections par défaut (latlon et Mercator), exécutez :

    Pour créer une version avec uniquement des projections personnalisées, incluez une liste de codes de projections séparés par des virgules (le nom du fichier dans 'lib/projections' sans le '.js') après deux points, par exemple :


    Applications

    La technologie SIG peut être utilisée pour les enquêtes scientifiques, la gestion des ressources, la gestion des actifs, l'archéologie, l'évaluation de l'impact environnemental, l'urbanisme, la cartographie, la criminologie, l'histoire géographique, le marketing, la logistique, la cartographie de la prospection et à d'autres fins. Par exemple, le SIG peut permettre aux planificateurs d'urgence de calculer facilement les délais d'intervention d'urgence (c. nouvel emplacement commercial pour profiter d'un marché auparavant mal desservi.


    Projection pseudo Mercator, aussi appelée sphères de Mercator, Web Mercator. Il est basé sur la projection de Mercator, projetée sur le carré du système de coordonnées WGS84. Nous savons déjà que l'ellipsoïde WGS84 est basé, mais les coordonnées factices de Mercator sont projetées sur une sphère, ce qui entraîne une distorsion des pôles qui devient importante, mais qui a été plus facilement calculée. C'est peut-être pour cela qu'on s'appelle "pseudo" la barre Mercator. De plus, le mannequin Mercator a également coupé plus de 85.051129 ° latitudes nord et sud, pour s'assurer que toute la projection est carrée. Étant donné que d'autres caractéristiques de Mercator sont conformes aux propriétés, la forme de l'objet sur le calque est conservée à différents niveaux, un carré peut continuer à être divisé en carrés plus nombreux et plus petits pour montrer les détails plus clairement. Évidemment, les données de coordonnées pseudo Mercator sont affichées, mais pas pour stocker des données, nous utilisons généralement le stockage de données WGS84, l'affichage des données utilisant le pseudo Mercator.

    Web Mercator a d'abord été proposé par Google, le courant est devenu le standard de facto pour Web Map. Mais peut-être pour les raisons "pseudo"s ci-dessus, il a été rejeté le code EPSG Web Mercator initialement attribué. Nous utilisons donc couramment EPSG : 900913 (la distorsion numérique de Google) du code non officiel pour le représenter. Jusqu'en 2008, EPSG a été attribué : code 3785, mais n'a pas pris longtemps la même année, a été abandonné, redistribué EPSG : code formel 3857 toujours en usage.


    Voir la vidéo: Openlayers 6 Tutorial #6 - Layer Switcher (Octobre 2021).