Suite

Comment convertir en projection web mercator à l'aide d'un outil open source ?

Comment convertir en projection web mercator à l'aide d'un outil open source ?


J'ai un fichier KML que j'ai besoin de convertir en une projection Web Mercator. Ce fichier ira dans Tilemill. Quels sont les bons outils open source pour convertir des fichiers en projection web mercator ?


Premièrement, il n'est pas nécessaire de projeter les données sur webmercator, car tilemill peut projeter à la volée. Mais si vous avez un grand ensemble de données, il est utile d'avoir des données dans WebMercator.

Notez que selon la norme KML, les données KML ne peuvent être qu'en WGS84 Latlong, c'est-à-dire EPSG:4326.

Par conséquent, nous devrons projeter ces données dans un autre format. Si votre KML contient des données d'un seul type (c'est-à-dire des points, des polygones, etc.) avec les mêmes champs, je vous suggère de projeter ce KML dans un fichier de formes.

Vous pouvez utiliser ogr2ogr de l'ensemble d'outils Gdal pour projeter votre KML avec la commande suivante :

ogr2ogr -t_srs EPSG:3857 sortie.shp entrée.kml

Comme Andre Jooste l'a prévenu dans un commentaire ci-dessous,

Gardez un œil sur les noms des tables attributaires. Ceux-ci sont limités au format shapefile à 10 caractères, et pas seulement à un nombre. ogr2ogr peut tronquer les noms de champs si nécessaire


Créez votre propre application de suivi des vols avec Python et Open Air Traffic Data

Le suivi de la position de quelque chose est un sujet que j'aime, car cela me donne l'impression d'être un humain avec un sixième sens. Avec ce sens, je sais où se trouve un objet et comment il se déplace, même si je ne peux pas voir l'objet directement à mes yeux nus. Alors comment obtenons-nous un sixième sens ? Parce qu'en tant qu'humain ordinaire, nous n'avons que cinq sens.

À mon avis, vivant dans cette ère numérique aujourd'hui, nous avions déjà un sixième sens qui s'appelle la technologie qui s'implémente dans une application. En lien avec notre sujet dans cet article sur le suivi des vols, il existe de nombreuses applications de suivi des vols, telles que flightradar24, FlightAware, flightview, etc., qui nous ont permis de surveiller la position des avions autour de la terre. Cet article ne parlera pas de ces applications, de plus, je discuterai de la façon de créer notre propre application de suivi de vol avec python.

Auparavant, j'avais déjà posté deux tutoriels sur le suivi des vols avec python. Le premier concerne la création d'une application de suivi de vol simple avec python et l'autre consiste à créer une application de suivi de vol avec des pandas et du bokeh. Quelle est la différence avec celui-ci ? La principale différence est la source de données. Dans ces deux articles précédents, j'ai utilisé ADS-B Exchange et dans ce tutoriel, j'utilise Opensky Network. Une autre différence est la version du module. Dans ce tutoriel, j'utilise la dernière version de la bibliothèque python, en particulier pour la bibliothèque de traçage. Il y aura donc un léger changement dans le code.

Assez pour l'introduction. Passons maintenant à notre sujet principal, comment créer une application de suivi de vol avec python en utilisant des données de trafic aérien ouvertes. Ce tutoriel se compose de plusieurs sous-thèmes, il y a : Obtenir des données, importer les bibliothèques requises, charger le fond de carte, tracer la position des avions et créer une application de suivi de vol en temps réel. Nous discuterons de chaque partie, et à la fin de ce didacticiel, nous aurons une application de suivi de vol qui s'exécute dans un navigateur comme le montre la figure 1.

Figure 1. Application de suivi des vols

Obtenir des données sur le trafic aérien

Comme je l'ai mentionné plus tôt, dans ce didacticiel, nous utilisons les données de trafic aérien en plein air d'OpenSky Network. OpenSky Network est un consortium à but non lucratif qui fournit des données de trafic aérien ouvertes au public, notamment à des fins de recherche et à des fins non commerciales. Les données sont accessibles via l'API REST, l'API Python et l'API Java. Dans ce tutoriel, nous utiliserons l'API REST pour récupérer les données de trafic aérien en direct.

La récupération des données à l'aide de l'API REST peut être effectuée à l'aide de l'opération de demande. Deux types de requêtes peuvent être utilisées. La première est une demande d'avion spécifique basée sur l'heure dans l'horodatage UNIX ou l'adresse ICAO24. Le second, nous pouvons obtenir toutes les données d'avion dans une étendue de zone en utilisant le système de coordonnées WGS84. De plus, l'accès aux données peut être effectué de manière anonyme ou par un utilisateur enregistré. Pour les demandes anonymes, il a une résolution de 10 secondes et 5 secondes pour l'utilisateur enregistré.

Dans ce tutoriel, nous utiliserons le second. Nous définirons une étendue de zone avec des coordonnées minimales et maximales, puis enverrons la requête pour obtenir toutes les données d'avion dans la zone. Par exemple, nous voulons récupérer les données sur les États-Unis avec la coordonnée minimale -125,974,30,038 et la coordonnée maximale -68,748,52,214. La requête pour les utilisateurs anonymes et enregistrés sera la suivante.

Avant de continuer à lire et de vous assurer que la requête est correcte, essayons-la. Copiez la requête anonymement et collez-la dans un navigateur. Si vous obtenez une réponse comme la figure 2 ci-dessous, cela fonctionne.

Figure 2. Réponse des données de trafic aérien

La réponse de retour, comme le montre la figure 2, est dans une structure JSON avec deux clés. Le premier est temps et le second est États qui contient des données pour chaque avion dans un tableau de liste. Le tableau de la liste stocke de nombreuses données telles que : l'adresse ICAO24, l'indicatif d'appel de l'avion, le pays d'origine, la position horaire, le dernier contact, la longitude, la latitude, l'altitude du baromètre, etc. Pour une explication complète sur la réponse des données et également de plus amples informations sur l'API OpenSky Network, veuillez vous référer à la documentation de l'API OpenSky Network.

Obtenir des données de trafic aérien en Python

Nous avons déjà récupéré les données de trafic à l'aide de l'API REST dans un navigateur. Faisons-le maintenant en Python et traitons la réponse pour le prochain objectif. Pour ce tutoriel, j'utilise Jupyter notebook avec Python 3.8.2 et certaines bibliothèques telles que Bokeh 2.1.1, Pandas 0.25.3, request, json et numpy.

Ci-dessous se trouve le code pour faire une demande et faire un petit traitement sur les données. Au début, nous importons les bibliothèques requises telles que les requêtes, json et Pandas. Définissez ensuite la coordonnée d'étendue dans WGS84 avec la variable respective lon_min, lat_min, lon_max et lat_max. En fonction de la coordonnée d'étendue, effectuez la requête de requête. Si vous êtes un utilisateur enregistré, indiquez le nom d'utilisateur et le mot de passe dans Nom d'utilisateur et le mot de passe variable à la ligne 11-12. Sur la base des coordonnées d'étendue et des données utilisateur données, nous créons une requête de requête dans url_data variable comme à la ligne 13 et obtenez la réponse au format json. Le reste du code est utilisé pour vider les données de réponse dans la trame de données Pandas et remplacer les données vides/vides par la valeur 'NaN' par 'No Data'. La dernière ligne qui est le cadre de données & 39s diriger méthode est utilisée pour afficher les 5 premières rangées supérieures des données, comme le montre la figure 3.

Figure 3. Cadre de données de suivi de vol

Assurez-vous qu'après avoir exécuté le code, vous obtenez un résultat comme dans la figure 3. Si vous l'obtenez, cela signifie que tout va bien et que nous avons les données qui seront utilisées pour la prochaine étape.

Tracer un avion sur la carte

Après avoir obtenu les données, traçons maintenant l'emplacement de tous les avions sur une carte. À des fins de traçage, nous utilisons la bibliothèque Bokeh. Par conséquent, nous devons d'abord importer la bibliothèque. De plus, nous devons également importer la bibliothèque NumPy qui sera utilisée dans la conversion de coordonnées.

La conversion du système de coordonnées est implémentée dans une fonction appelée wgs84_web_mercator_. Comme son nom l'indique, cette fonction sera utilisée pour transformer les coordonnées WGS84 en système de coordonnées Web Mercator. Cette transformation est nécessaire car nous utilisons un STAMEN_TERRAIN fond de carte dans un navigateur Web doté de la projection Web Mercator (EPSG : 3857).

Après avoir créé la fonction de conversion de coordonnées et effectuer la transformation pour les coordonnées du bloc de données et de l'étendue. Ensuite, nous configurons les paramètres de la figure de traçage en spécifiant l'étendue de la zone de traçage en fonction de la plage de coordonnées x et y. L'avion sera tracé sur le fond de carte en fonction des coordonnées x et y avec des points et également avec l'image de l'icône de l'avion. Pourquoi le point et l'image sont-ils utilisés pour tracer l'avion ? L'image donnera une meilleure visualisation en utilisant une image d'avion et elle peut être tournée avec l'angle de trajectoire respectif. Mais malheureusement, il ne peut pas mettre en évidence un objet sélectionné et afficher plus d'informations avec l'outil de survol. Pour surmonter ce problème, nous utilisons à la fois une image et un objet point dans le cercle pour obtenir une belle visualisation et activer l'outil de sélection et de survol.

Ce qui suit est le code jusqu'à cette étape. S'il est exécuté, nous obtiendrons un résultat comme dans la figure 4.

Créer une application de suivi des vols

Jusqu'à présent, nous avions discuté de la possibilité d'obtenir des données sur le trafic aérien et de tracer l'avion sur une carte. Dans cette dernière section, nous verrons comment créer une application de suivi de vol qui s'exécute sur un navigateur Web. L'application récupérera automatiquement de nouvelles données dans un intervalle spécifié et tracera les données sur la carte. Dans cette section, nous allons combiner le code de l'étape précédente et le compresser dans une application utilisant la bibliothèque Bokeh. Le code complet se trouve à la fin de ce tutoriel.

Si vous regardez le code, nous devons importer une bibliothèque Bokeh supplémentaire telle que Serveur, Application et Gestionnaire de fonction. Le code de l'application commence à la ligne 50. Ici, nous créons la fonction principale de l'application qui s'appelle flight_tracking. La fonction principale comprend tous les processus qui seront exécutés lors de l'exécution de la fonction principale, comme la mise à jour des données de vol, le vidage dans le cadre de données Pandas, la conversion en source de colonne de données Bokeh et la diffusion en continu, le rappel de la mise à jour toutes les 5 secondes et le traçage des données sur la carte. Après avoir créé la fonction principale de l'application, à la fin, nous déterminons quelques variables ou paramètres pour le serveur. Vous pouvez trouver tout le processus avec les balises de commentaire dans le code

Il est maintenant temps de tester l'application. Exécutez le code et ouvrez un navigateur Web. Tapez localhost:portnumber (par exemple, localhost:8084). Vous devriez voir l'application de suivi des vols s'exécuter dans le navigateur Web, comme dans la figure ci-dessous.

Figure 5. Application de suivi de vol dans un navigateur Web

C'est tout ce tutoriel qui explique comment créer une application de suivi de vol presque en "temps réel" en utilisant python et des données de trafic aérien ouvertes. Dans ce didacticiel, nous avions appris à récupérer les données de trafic aérien ouvertes à partir d'OpenSky Networks, à les traiter et à créer une application de suivi de vol qui s'exécute dans un navigateur Web. Avant de terminer cet article, je tiens à remercier l'association OpenSky Network pour tout le travail acharné et mis l'information à la disposition du public. Merci d'avoir lu et n'hésitez pas à le partager avec d'autres si vous pensez que cela leur sera bénéfique.

Quoi qu'il en soit, si vous êtes un utilisateur de QGIS, j'ai également écrit un tutoriel sur la visualisation de données en direct presque en temps réel dans QGIS avec ce cas d'utilisation des données de trafic aérien. Vérifiez-le si vous êtes intéressés.


Utilisez Proj4js avec l'API ArcGIS pour JavaScript pour reprojeter les coordonnées à la volée

Dans le support technique, j'ai parlé à de nombreuses personnes qui souhaitaient afficher la latitude et la longitude de la position actuelle de la souris en continu dans leurs applications JavaScript lors de l'utilisation d'un fond de carte avec une projection personnalisée. Prête à l'emploi, l'API ArcGIS pour JavaScript prend en charge la reprojection de pratiquement toutes les coordonnées auxquelles vous pouvez penser, mais si vous ne convertissez pas entre WGS84 et Web Mercator, il est nécessaire de tirer parti d'un service de géométrie afin d'obtenir de l'aide pour les mathématiques.

Notre service de géométrie est un outil génial qui aide à toutes sortes de manipulations et d'analyses, y compris la mise en mémoire tampon, le calcul d'enveloppes convexes, la diminution de la densité des sommets et le remodelage et peut travailler sur une collection de fonctionnalités simultanément, mais dans ce scénario, c'est un peu comme sortir une tronçonneuse pour couper votre sandwich en deux.

Le temps qu'il faut pour envoyer la demande et attendre la réponse rend impossible la reprojection continue de l'emplacement actuel de la souris. Heureusement, il existe une bibliothèque JavaScript open source appelée Proj4js qui peut vous aider. Après avoir chargé Proj4js et lui avoir donné des informations sur les deux systèmes de coordonnées que vous souhaitez reprojeter, vous pouvez obtenir la réponse dont vous avez besoin directement dans le navigateur.

Voici les étapes de base que vous devrez suivre :

1. chargez Proj4js avec JSAPI dans votre application à l'aide d'une balise de script supplémentaire

2. définir deux projections personnalisées dans un format que Proj4js comprendra (consultez le projet dans Github pour plus d'informations sur le formatage)

3. enfin, câblez un écouteur d'événement pour que proj4js puisse calculer la reprojection à chaque passage de la souris sur la carte

vous pouvez trouver un échantillon en direct qui affiche les coordonnées de latitude et de longitude dans une carte interactive UTM 12N ici :


Coreregister

L'outil de co-enregistrement vous permet de co-enregistrer un ensemble d'éléments cibles à un seul élément d'ancrage au sein de votre commande, ce qui facilite l'analyse des séries chronologiques des piles d'images temporelles profondes. L'outil de coregistration garantit que les images d'une série temporelle spécifiée sont alignées spatialement, de sorte que toute caractéristique d'une image chevauche aussi précisément que possible sa position dans toute autre image de la série.

Cet outil est conçu pour prendre en charge le co-enregistrement de petites zones d'intérêt - contenues dans une seule scène - et fonctionne mieux avec un chevauchement géographique élevé entre les scènes de la série chronologique.

Entrées de produits

L'outil coregister prend en charge tous les types d'éléments à l'exception de REScene et tous les types de bundles à l'exception des bundles basic_* et *_nitf. Il n'est pas compatible avec l'outil composite.

Paramètres

  • élément_ancre (chaîne) (obligatoire) : l'élément_id de l'élément auquel tous les autres éléments doivent être enregistrés. Actuellement, un seul item_id peut être fourni et il doit être inclus comme l'un des produits de la commande. Les éléments de la commande doivent chevaucher géographiquement l'élément d'ancrage pour être correctement enregistrés.

Exemple de demande

Sorties d'outils

Un fichier de sortie d'images est produit pour chaque lot. Le fichier d'imagerie d'ancrage et l'udm correspondant auront "_anchor" ajouté à leurs noms de fichier. Les fichiers d'images et leurs udms correspondants qui sont co-enregistrés avec succès, ou déjà alignés spatialement avec l'élément d'ancrage (c'est-à-dire qui n'ont pas besoin d'être co-enregistrés) auront "_coreg" ajouté à leurs noms de fichiers.

L'outil fournit un fichier json de qualité de co-enregistrement supplémentaire pour chaque élément de la commande (à l'exception de l'élément d'ancrage), qui comprend des détails sur la transformation de chaque élément de sortie. Les fichiers Rpc et xml seront transmis.

Paramètres de fichier JSON de qualité de coregistration d'article

Le fichier sidecar json de qualité de co-enregistrement d'article comprend les informations suivantes sur les transformations de co-enregistrement :

  • projection_epsg_before: répertorie la projection d'origine de l'élément.
  • projection_epsg_after: répertorie la projection de l'élément après transformation. S'il a été transformé en reprojection de l'élément d'ancrage, il sera mis à jour. Si l'élément n'a pas été reprojeté, ce champ sera vide.
  • pixel_shift: Décrit la transformation de coregistration en pixels.
  • matching_score_before: Une métrique dérivée qui décrit l'alignement de l'image avant le coregistration.
    • Le score de correspondance examine une combinaison d'erreur quadratique moyenne normalisée et d'indice de similarité structurelle.
    • Un score correspondant va de 0 à 1.
    • Un score supérieur à 0,8 indique que l'item a déjà un très bon alignement et est déjà corrélé. Ces fichiers seront marqués du suffixe "_coreg" et seront transmis (ou reprojetés dans la projection de l'élément d'ancrage et livrés).
    • Si le score est inférieur à 0,8, l'outil tentera de co-enregistrer l'élément. Notez qu'un score de 0,8 n'indique pas nécessairement un mauvais alignement.

    Les éléments qui ne parviennent pas à coregistrer ou qui entraînent une amélioration du score de correspondance inférieure à 0,001 après la transformation de coregistration ne seront pas transformés. Au lieu de cela, ceux-ci seront livrés sans aucune transformation de coregistration (ou de reprojection) et "_coreg" ne sera pas ajouté à leurs noms de fichiers.

    Exemple de sortie - Coregistration réussie

    Exemple de sortie – Échec de co-enregistrement

    Exemple de sortie - Coregistration élément ignoré déjà corrélé

    Étant donné que le matching_score_before pour 20200714_165944_0f4e_3B_AnalyticMS.tif est supérieur à 0,8, l'élément est transmis.

    Nous aimerions recevoir vos commentaires sur l'outil Coregister ici


    Regarder sous le capot des Atlas forestiers

    Le déploiement et la gestion des différents Atlas forestiers, chacun en plusieurs langues, nécessitent une architecture et des capacités techniques solides. Voici un aperçu des coulisses de ce qui fait fonctionner ces sites.

    1. Renforcement des capacités

    Pour garantir que les données sur chaque Atlas forestier puissent aider à influencer la prise de décision nationale, nous avons introduit la planification spatiale et la réflexion spatiale dans les ministères. Pour familiariser les fonctionnaires avec les données et l'analyse spatiales, les titres forestiers et d'utilisation des terres existants pour chaque pays ont été numérisés et publiés sous forme de cartes imprimées et interactives. Les cartes présentaient l'affectation actuelle des terres, l'évolution de la couverture végétale ainsi que les interdépendances entre les deux et aidaient le personnel à comprendre la puissance de ces types d'analyse. Le personnel a ensuite été davantage formé aux SIG et à la gestion des données, ce qui leur a permis de produire eux-mêmes des cartes et des analyses. Avec une capacité accrue, des systèmes plus complexes ont été introduits utilisant des serveurs centraux, des géodatabases d'entreprise et des portails de géodonnées en ligne. Alors que le personnel du ministère gère et met à jour les données par lui-même, le personnel du WRI dans le pays soutient toujours les unités de cartographie au quotidien et dispense une formation sur le tas pour assurer la continuité et un système stable.

    2. Architecture du système

    Concevoir un système robuste qui permet à une organisation entière de partager ses données dans le contexte des pays du bassin du Congo est un défi. Des choses qui sont considérées comme acquises dans le monde occidental, comme un réseau électrique stable et l'Internet à large bande, ne sont pas acquises en Afrique centrale. Bien qu'il existe de nombreux champions, les connaissances informatiques globales sont encore très faibles.

    ArcGIS fournit des solutions qui fonctionnent même dans cet environnement difficile. Les unités de cartographie des ministères sont équipées d'une base de données centrale ArcSDE. Les techniciens répliquent la géodatabase sur leurs machines locales et peuvent accéder aux données et les modifier même lorsque le réseau est en panne ou qu'ils travaillent hors-jeu. La gestion des versions permet de garder les projets isolés jusqu'à ce qu'ils soient prêts à être publiés. Des règles de topologie distinctes aident l'équipe à identifier rapidement les incohérences dans les données. Une synchronisation régulière avec la base de données centrale garantit que chaque membre de l'équipe dispose toujours des dernières données.

    Pour permettre au personnel non technique d'accéder aux cartes et à d'autres informations, les couches de données de la géodatabase sont enregistrées auprès d'une instance ArcGIS Server et partagées au sein du ministère à l'aide d'ArcGIS Portal for Server. Le portail est configuré pour les environnements déconnectés et fonctionne indépendamment d'une connexion Internet. Les applications de l'Atlas forestier sont hébergées sur le portail pour être utilisées au sein du ministère. Les bureaux extérieurs hors réseau reçoivent des mises à jour régulières des données sous forme de fichiers delta par e-mail ou clé USB.

    La version publique est hébergée sur AWS et ArcGIS en ligne pour assurer une haute disponibilité. Les techniciens maintiennent le système à jour à l'aide de fichiers delta pour synchroniser la réplique en ligne de la géodatabase centrale. Une fois dans le cloud, les données sont répliquées dans des géodatabases actives qui contiennent des copies de la géodatabase dans différentes projections et langues. En traduisant les domaines et les sous-types dans ArcSDE, les Atlas forestiers sont capables d'afficher des couches dans différentes langues (généralement le français et l'anglais) sans avoir besoin de modifier les données sous-jacentes. Les données utilisées dans les applications Web sont reprojetées lors de la synchronisation et directement stockées dans la projection Web Mercator pour assurer un rendu plus rapide et une charge réduite sur le serveur tandis qu'une copie distincte dans la projection locale est conservée pour être distribuée via le site de données ouvertes.

    3. Générateur de cartes GFW

    Les Atlas forestiers sont publiés à l'aide de Map Builder, un outil que GFW a récemment rendu public. Il permet à quiconque de créer son propre site Web de surveillance des forêts en utilisant ses propres données couplées aux fonctionnalités d'analyse géospatiale de GFW. GFW a travaillé avec Blue Raster pour développer ce modèle d'application Web basé sur ArcGIS en ligne, et il est publié sous la licence MIT afin que toute organisation puisse créer gratuitement sa propre plate-forme de surveillance des forêts avec des données personnalisées, à n'importe quelle échelle géographique. Les utilisateurs peuvent déployer Map Builder dans ArcGIS Online et ArcGIS Portal for Server.

    Les utilisateurs peuvent personnaliser les applications Web en modifiant le logo et la marque, en insérant des données personnalisées, en concentrant la carte sur une zone d'intérêt unique ou en stylisant les données pour un sujet spécifique. Différentes applications peuvent être liées entre elles pour former un atlas complet.

    Vous pouvez accéder au nouveau modèle via ArcGIS Online. Le code source se trouve sur Github. Pour en savoir plus sur l'utilisation de GFW Map Builder, visitez la page GFW How-To.

    4. Données ouvertes ArcGIS

    Pour diffuser publiquement les données de l'Atlas forestier, les ministères des forêts s'appuient sur ArcGIS Open Data. Chaque ministère utilisant un Atlas forestier a son propre site de données ouvertes où il publie ses données géospatiales pour un accès public ainsi que des ressources supplémentaires telles que des contrats forestiers, des rapports et d'autres publications. Les données diffusées via les sites de données ouvertes sont publiées dans leurs projections originales avec des métadonnées complètes. Les données en anglais et en français sont conservées à l'aide de sites de données ouverts distincts.

    Les utilisateurs peuvent rechercher des données par mot-clé, texte intégral ou emplacement et télécharger l'ensemble de données souhaité. Les développeurs Web peuvent trouver les points de terminaison d'API nécessaires à utiliser dans leurs applications.

    Sauf indication contraire, toutes les données sont sous licence CC-by-4.0, permettant aux utilisateurs d'utiliser et de redistribuer les données.

    Commencez avec votre propre GFW

    Le succès de chaque Atlas Forestier du Bassin du Congo démontre comment le renforcement des capacités associé à une analyse SIG puissante peut améliorer la gestion des forêts à l'échelle nationale. Avec des outils open source tels que GFW Map Builder, ces applications telles que les Atlas forestiers peuvent être mises à l'échelle plus rapidement et plus facilement que jamais. Alors, quelle est l'attente? Commencez à créer votre propre GFW dès aujourd'hui !

    Pour toute personne ayant des besoins similaires, voici quelques modèles et outils open source pour vous aider :

    Thomas est un associé SIG pour le programme Alimentation, forêt et eau. Il dirige les composantes SIG, télédétection, base de données et site Web de son travail sur l'initiative forestière en Afrique centrale.

    Asa est assistante de recherche SIG pour Global Forest Watch (GFW) au sein du programme Alimentation, forêts et eau. Asa participe à l'acquisition et à la préparation de données géographiques pour la plate-forme GFW et à l'amélioration de l'efficacité de la gestion des données sur la plate-forme GFW.


    Introduction aux outils de cartographie génériques (GMT)

    Cette conférence est modifiée à partir d'un petit sous-ensemble du matériel du didacticiel officiel GMT, qui peut être trouvé ici : Tutoriel GMT.

    La conférence d'aujourd'hui se concentre sur le GMT, également connu sous le nom de logiciel Generic Mapping Tools. GMT a été inventé par deux étudiants diplômés du LDEO en 1988, Paul Wessel et Walter H.F. Smith. GMT peut effectuer un large éventail de fonctions, y compris la lecture et le traçage de données, mais son utilisation la plus unique et la plus puissante aujourd'hui réside dans sa capacité à créer des projections et des visualisations cartographiques sophistiquées. Étant donné que le traçage des données est maintenant assez simple à faire avec MATLAB et Python, nous nous concentrerons plutôt ici sur les fonctions de mappage polyvalentes disponibles dans GMT.

    GMT est une suite d'outils logiciels basée sur Unix et nous allons interagir avec elle via un shell de commande, tout comme nous avons interagi avec les commandes Unix plus tôt dans ce cours.

    Vous devriez avoir obtenu le dossier Documentation lorsque vous avez téléchargé GMT. Il a le contenu suivant

    Les dossiers html et pdf contiennent la documentation GMT. Un fichier PDF avec le GMT_Tutorial complet se trouve dans le dossier pdf. Nous allons travailler avec des éléments dans le répertoire du didacticiel. Je vous recommande de faire une copie de ce répertoire et de travailler dans la copie plutôt que dans l'original.

    Ouvrez l'application GMT 5.4.2 et elle lancera un nouveau shell de terminal. Puis cd dans le dossier Documentation et fais la copie :

    Notez que le -R indique à cp de copier récursivement le dossier.

    Le flux de travail GMT typique consiste à saisir des fichiers facultatifs dans GMT, tels qu'un tableau de données ascii ou binaire ou un ensemble de données maillées (par exemple, la topographie ou d'autres surfaces). GMT traitera ensuite le fichier, en fonction de votre séquence de commandes GMT, puis produira un ou plusieurs fichiers. En règle générale, vous obtiendrez un fichier de traçage postscript (.ps) ou .pdf, mais vous pouvez également utiliser GMT pour re-griller ou reformater des fichiers de données, donc parfois il ne produira que les fichiers de données re-grillés ou traités, en fonction de comment vous l'utilisez.

    Nous utiliserons quelques commandes courantes Unix telles que la redirection de fichiers, la canalisation et les caractères génériques lors de la construction de nos scripts GMT.

    La documentation Web en ligne GMT est une excellente ressource pour apprendre les commandes GMT. Vous pouvez y trouver des pages d'aide pour des commandes GMT particulières. Cependant, les pages d'aide peuvent être écrasantes car elles vous indiquent toutes les options possibles pour chaque commande. Il est souvent assez utile de simplement voir une commande en cours d'utilisation dans un script. Je vous recommande fortement de consulter le Galerie et Livre de recettes sections dans la documentation en ligne car elles contiennent des tonnes d'exemples. Parcourez les images pour en trouver une qui ressemble à ce que vous aimeriez faire, puis cliquez sur le lien pour voir les commandes GMT associées utilisées pour créer le tracé.

    Vous pouvez également en savoir plus sur les commandes GMT à partir du shell GMT. Par exemple

    répertorie toutes les commandes GMT disponibles. L'aide pour un module GMT donné est répertoriée avec les commandes

    où <module_name> doit être remplacé par le nom du module spécifique.

    Tracé simple

    La partie la plus essentielle de la création d'un tracé cartographique est la projection utilisée pour convertir les positions, qui sont des emplacements sur la surface d'une sphère, en une représentation plate. GMT prend en charge un grand nombre de projections cartographiques. Nous en examinerons ici un petit nombre.

    En règle générale, une commande GMT a une séquence d'appel qui ressemble à ceci :

    où <module_name> répertorie la commande GMT spécifique à appeler, et <options> répertorie tous les arguments obligatoires et facultatifs. Bien que GMT soit très puissant, il possède une pléthore d'options qui peuvent être assez intimidantes pour les nouveaux utilisateurs. Encore une fois, apprendre par l'exemple est souvent plus facile que de consulter la documentation, du moins lorsque vous débutez. Pour référence, voici un lien vers un endroit agréable pour rechercher certaines des options standard.

    La partie > outputFileName.ps utilise le symbole de redirection Unix > pour indiquer à GMT de sortir les résultats dans le fichier nommé outputFileName.ps. Qui est un fichier au format poscript (un premier fichier de graphiques vectoriels précurseur du format PDF).

    Pour créer un tracé de carte de base, vous utilisez la commande psbasemap, qui est un raccourci pour "postscript base map". Par exemple, exécutez la commande :

    Vous pouvez afficher les résultats en ouvrant le fichier en cliquant dessus, ou en tapant open GMT_tut_1.ps dans le shell.

    Ici, nous avons utilisé quatre options standard courantes : -R,-J,-B,-P .

    -R spécifie la région d'intérêt à tracer, avec la syntaxe -Rxmin/xmax/ymin/ymax . Généralement, xmin et xmax spécifient les longitudes minimale et maximale et ymin et ymax spécifient les latitudes minimale et maximale.

    -J spécifie la projection cartographique à utiliser et a la syntaxe -JXwidth[/height] . Ici, -JX signifie utiliser un tracé cartésien générique (c'est-à-dire une projection non géographique). Nous avons spécifié de faire le tracé de 4 pouces de large et 3 pouces de haut en indiquant -JX4i/3i .

    -B spécifie les annotations à utiliser sur les axes du tracé. Ici, nous avons utilisé -Ba où le a indique à GMT de déterminer automatiquement les meilleures annotations. Essayez maintenant une version plus avancée de la commande, en utilisant

    Ici, les arguments supplémentaires -B indiquent à GMT de remplir les axes ( +g ) avec une couleur rouge clair et de faire en sorte que le titre ( +t ) soit "Mon premier tracé" . Voir l'aide pour une explication détaillée et l'assaut d'autres options possibles pour -B .

    -P spécifie de faire le tracé avec la page définie en mode portrait, alors que par défaut, il trace en mode paysage. Nous n'avons pas le temps de couvrir cela, mais vous pouvez modifier n'importe quel comportement par défaut de GMT en utilisant le fichier gmt.conf dans votre répertoire personnel. Voir l'aide GMT pour les détails.

    Tracer des côtes

    Ici, nous utiliserons la commande pscoast pour créer des tracés cartographiques comportant des côtes, des rivières, des lacs et des frontières nationales. Ces informations géographiques sont incluses dans GMT avec la base de données GSHHG (Global Self-consistent, Hierarchical, High-resolution Geography Database).

    Essayez d'exécuter cette commande et d'afficher le résultat :

    Ici, -JM6i indique à GMT d'utiliser une projection conforme de Mercator pour créer un tracé de 6 pouces de large.

    Option Objectif
    -UNE Exclure les petites fonctionnalités ou celles de niveaux hiérarchiques élevés
    -RÉ Sélectionnez la résolution des données (complète, élevée, intermédiaire, faible ou brute)
    -G Définir la couleur des zones sèches (par défaut ne peint pas)
    -JE Dessiner des rivières (choisir des entités dans une ou plusieurs catégories hiérarchiques)
    -L Échelle de la carte du tracé (l'échelle de longueur peut être en km, en milles ou en milles marins)
    -N Tracez des frontières politiques (y compris les frontières des États américains)
    -S Définir la couleur pour les zones humides (par défaut ne peint pas)
    -W Dessinez des côtes et définissez l'épaisseur du stylo

    L'un des -W, -G, -S doit être sélectionné. Par exemple, utilisez -Df pour obtenir les données de limite de rivage en pleine résolution (et notez à quel point la taille du fichier de sortie est plus grande). Essayons d'activer plusieurs options :

    Modification des paramètres GMT par défaut

    Vous pouvez modifier temporairement les valeurs par défaut GMT pour votre session shell actuelle à l'aide de la commande gmtset. Tapez gmtdefaults pour voir tous les paramètres par défaut pour GMT. Supposons que vous souhaitiez tracer les cartes avec une ligne simple pour le cadre plutôt que le damier blanc et noir que GMT utilise par défaut. Vous pouvez modifier cette valeur par défaut en entrant la commande :

    Quelques autres projections

    Voici quelques autres exemples de projection. Il y a beaucoup plus d'options de projection que ce que nous avons d'espace pour montrer ici, alors consultez la documentation pour plus d'informations.

    Projection stéréographique polaire :

    Voici quelques-unes des options de projection globale :

    Lignes et symboles

    Ici, nous allons apprendre à utiliser GMT pour tracer des lignes, des symboles et du texte. Les deux principales commandes pertinentes sont psxy pour tracer des lignes et des symboles et pstext pour ajouter des étiquettes de texte aux tracés. Ces commandes ont des tonnes et des tonnes d'options, mais nous ne couvrirons ici que leur utilisation simple.

    Pour le didacticiel, nous allons d'abord tracer les données dans le fichier data dans le dossier du didacticiel. Jetez un œil aux données ici :

    Donc ce fichier a deux colonnes de nombres qui vont de 1 à 5. On peut aussi utiliser la commande info pour voir ce que GMT pense de ce fichier :

    GMT voit qu'il y a N=7 lignes avec des valeurs allant de 1 à 5 dans chaque colonne. Tracez les données en utilisant psxy :

    Par défaut, GMT a tracé cela sous forme de ligne. Nous pouvons modifier l'apparence de la ligne en utilisant les arguments -W :

    Ici, je lui ai dit d'utiliser une épaisseur de 2 points et de colorer la ligne en vert. Nous pourrions également tracer la ligne à la place comme un polygone rempli en utilisant l'argument -G avec une couleur de remplissage :

    Maintenant, traçons les symboles pour chaque position (x,y) dans les données :

    Ici, l'argument -S indique à psxy de tracer les données sous forme de symboles et le i dans -Si lui indique d'utiliser des triangles inversés. Consultez l'aide de psxy pour en savoir plus sur tous les autres types de symboles possibles. La partie 0.2i lui dit de faire des symboles de 0,2 pouces de taille.

    Maintenant, traçons à la fois la ligne et les symboles. Pour ce faire, vous tracez d'abord la ligne, puis ajoutez les symboles en superposition :

    Notez l'argument -K dans la première ligne, qui indique à GMT de garder le fichier ouvert pour d'autres ajouts. Ensuite, dans la deuxième ligne, nous avons utilisé l'argument -O pour dire à GMT d'ajouter les triangles en mode superposition. Nous avons également utilisé l'opérateur d'ajout d'Unix >>, qui ajoute la superposition au fichier de tracé plutôt que d'écraser le fichier.

    Now we will make a plot of earthquakes around Japan where the color of the symbol indicates depth and the size of the symbol indicates magnitude. See file quakes.ngdc :

    The first line above makes are color palette of red, green and blue for earthquakes with depths from 0 to 70, 70 to 300 and greater than 300 km depth. The second line creates a plot of northern Japan's outline. The third line plots the earthquakes. -h3 tells GMT to skip the first three header lines. -i4,3,5,6s0.1 tells it to read columns 5,4,6,7 (note it uses 0 based indexing!) and to scale the values in the 7th column by 0.1. Since the 7th column is the earthquake magnitude, this converts it to a number that will be useful to use as the centimeter size of the symbols. -Scc tells it to plot the symbols as circles using centimeters as the size units.

    We don't have time to cover pstext , but it uses similar syntax. See the examples in the GMT tutorial and online cookbook for further info.

    Gridded Surfaces

    Here we will use GMT to create a shaded map plot of gridded topography data. We will use the file tutorial file us.nc , which contains a subset of high-resolution topography data from the global 30” DEM called SRTM30+ (SRTM stands for the shuttle radar topography mission).

    Let's peek inside this file to see what it contains. Since this is a binary format, we can't open it in a text editor. Instead we use GMT's grdinfo command:

    Here you can see that the file goes from -108 to -103º longitude and 35 to 40º latitude, with z spanning from 1052 to 4328 m.

    GMT has many built in color palettes (CPT's) that you can use for your colormap on shaded plots. You can also download some really nice freely available ones (see http://soliton.vm.bytemark.co.uk/pub/cpt-city/). Here we will use GMT's rainbow color palette to create a colormap that spans the z range of the data in us.nc using the makecpt command:

    This command mapped GMT's rainbow color palette to the elevations 1000 to 5000 ( -T command) and made the color scale have continuous shading ( -Z ) rather than the default which is discrete shaded colors. The output was saved to file topo.cpt .

    Now let's make a shaded figure of this data.

    Take a look at that figure. It looks okay, but there is no illumination to create shadows that help define the topography, so it looks quite flat.

    You can add illumination to your GMT map plots by first computing the gradient of the topography using the grdgradient command. The gradients are then used to shade the topography:

    Here we used grdgradient to output the gradients to file us_i.nc using the -G argument. We then included the gradient data in the grdimage command using thhe -I flag. Also note the new use of the -K flag in the grdimage line. That flag tells GMT to keep the file open for further additions. We then used the psscale command to add a colorscale to the top of the figure. Note that psscale was called with the -O option, which means overlay it on top of the previously plotted stuff. We also used >> for the redirection, which tells GMT to append the color scale to the previously plotted file. Getting the syntax write for these types of multilayered plots can be tricky, so study the examples on the GMT help carefully. See also the help for psscale for more info.

    We don't have time to cover this, but you could create contours for topography using the grdcontour command. There are lots more useful GMT commands but we are out of time, so go checkout the GMT cookbook examples for further knowledge.

    Closing Comments

    GMT is really powerful but the calling sequences can be highly cryptic. Check out the online examples and cookbook as useful starting places.

    Messages récents

    • frapper
    • file system
    • python
    • programmation
    • shell
    • unix
    • assignment
    • pandas
    • xarray
    • MATLAB
    • visualisation
    • GMT
    • habanero
    • git
    • cluster
    • parallel computing
    • fortran
    • emballage
    • VPN
    • source code editor
    • contrôle de version
    • mapping
    • fond de carte
    • ndarray
    • numpy
    • matplotlib
    • parallel programming
    • arrays
    • github
    • projet
    • GeoMapApp
    • mpi
    • final
    • crépuscule

    /> Content licensed under a Creative Commons Attribution-NonCommercial 4.0 International License, except where indicated otherwise.


    How to convert to web mercator projection using an open source tool? - Systèmes d'information géographique

    Simple Gauss-Krüger transformation for C++

    This project provides a C++ implementation of coordinate transformation between geodetic coordinates and grid coordinates of Gauss (Transverse Mercator) projections, using the Krüger-n series developed to fourth order.

    A lot of inspiration comes from the Java implementation made by Kodapan, primarily in the way classes are used. That project is in turn a port of the Javascript implementation made by Arnold Andreasson. The equations and numbers used are directly based on the formulas published by Lantmäteriet (the Swedish National Land Survey), especially the document called Gauss Conformal Projection (Transverse Mercator) - Krüger's Formulas, published in 2008, and tests are implemented to check the calculations against reference points provided by Lantmäteriet.

    This C++ implementation was originally developed for coordinate conversion in the public transport application Fahrplan since using Proj4 seemed overly complex, and the intent is to make it simple to include in other projects wishing to use it. Although it was developed in a Swedish context, with Swedish coordinate systems to test with, it is thought to be useful also for other coordinate systems using the Gauss-Krüger projection.

    Except the library, a simple command line tool is included so you can play around with the transformations.

    The library itself requires no more than standard library components. To build the test, Boost Test is required, and for the command line tool, Boost Program Options is required (tested using version 1.54 of Boost).

    The library can be compiled and linked dynamically or statically, or included in your project as source code files. In the former cases, it has to be compiled first:

    The values in the following example are taken from Parametrar till approximativa transformationssamband för direktprojektion mellan SWEREF 99 och RT 90, published by Lantmäteriet (projection: 7.5 gon V 0:-15). If you have more than one projections using the same ellipsoid, the ellipsoid values can be put in a class of their own:

    Example of direct transformation from SWEREF 99 to RT90 (same values as from the library usage example):

    To see all options, run the tool without options or with --help :

    To verify the calculations, tests have been implemented to check the reference points provided by Lantmäteriet. The following documents have been used:


    Tools and products

    Open-source tools

    Most of the maps are based on OpenStreetMap data, some have additional Natural Earth data on lower zoom levels and town labels from Wikidata.

    • Streets - a general-purpose map with highlighted road infrastructure
    • Satellite - a mixture of satellite and aerial imagery with labels and streets from OSM
    • Basic - map containing only basic information
    • Dark and Light - derived from Basic, both map styles are designed to serve as a discreet background for additional geodata
    • Outdoor and Topo - maps with contour lines and hillshading, designed for movement in terrain
    • 3D - to show any of the map above in three dimensions

    Maps in custom coordinate systems

    MapTiler maps are provided in standard Mercator projection. For specific use-cases, there are maps based on OpenStreetMap in local coordinate systems, namely in:

    • WGS84
    • French Lambert
    • Swiss EPSG:2056
    • Dutch RD-New
    • . and others

    Maps from other open-data sources

    Apart from maps based on OSM, there are local maps based on government open-data:

    • Ordnance Survey maps of Great Britain
    • Map of Japan with government road data
    • Map of the Netherlands

    Choropleths

    In this post I will simultaneously have Fun With Data and Fun With Maps. I will use public APIs to turn my Isle of Alameda into a “choropleth“, a map which displays areas that are colored or patterned in relation to data.

    To do this I will need to find boundaries within Alameda that I can associate with data of some kind. For this I turn to the ultimate source of geographical data within the United States: the U. S. Census Bureau. To do its work the Census Bureau divides the country into regions, states, counties, cities, tracts, and block groups and gathers data at each level. The main island of Alameda is divided into fourteen tracts which in turn are divided into fifty block groups.

    All this data is free to the public and accessible via public APIs, but the government web sites are so sprawling and complex that most people access them through intermediary sites like Knight-Ridder’s Census Reporter. These sites do a great job at producing pre-made tables and choropleths, but I want to learn how to do it myself.

    Knight-Ridder’s Census Reporter

    After much hunting I find raw tract boundaries in a downloadable CSV file from the Alameda County Data Sharing Initiative. Using the Census Reporter site to identify tract numbers, I reduce the 372 tracts in Alameda County to the 14 on the main island of Alameda. Each tract boundary is defined by a long list of longitudes and latitudes.

    I can now pull up my own Alameda map outline in NodeBox. When I convert each list to X,Y coordinates and overlay the paths, they don’t quite fit at first. I spend hours muttering and pulling my hair until I realize that the formula I’m using does not properly account for the curvature of the earth. There are different ways of projecting coordinates onto a flat surface and when you get down to the street level you need to get everything exactly right – especially when overlaying boundaries from different sources.

    I got my original island boundary from Open Street Map. OSM stores its data using the same geographic coordinate system (EPSG 4326) used by GPS devices, but uses a different projeté coordinate system (EPSG 3857) when creating its map tiles. To convert you need to use a spherical pseudo-Mercator projection (not the true oblate ellipsoid Mercator projection). Confus? I was – as were many others before me. Fortunately the correct formula (in many different programming languages) appears on the Open Street Map Wiki:

    Formula for converting latitude and longitude

    Note: the constant 6,378,137 in the formula is the idealized radius of the earth in meters. Formulas without this value did not work for me.

    With the right formula in place, the tract boundaries snap perfectly into position. The boundaries extend beyond the shore, but for now are sufficient to verify proper alignment:

    NodeBox display of tract boundary allignment

    Choropleths convey more information (and look cooler) when you divide the map into smaller pieces. So having cracked the code for tracts, I now turn my attention to the smallest unit used for census data: block groups.

    Finding block group boundaries expressed in pure latitudes and longitudes proves to be more difficult. I finally turn to the government’s TIGER site (Topologically Integrated Geographic Encoding and Referencing), but here I run into another problem. The boundary data is only available in shp files, which require a powerful application called arcGIS. This is what the big boys use, but I want to draw the boundaries myself.

    My solution is to convert the shp file into GeoJSON format which I can then parse using NodeBox. I try a free online conversion service, but it doesn’t work. I locate an open source library that would do the job, but don’t feel like mucking about in javascript. I finally turn to a service called MyGeodata Cloud. The first five megs are free my 11 meg file costs $3.55 – a fair price for the time saved.

    Parsing the data was a multi-step process. The original file contained 31,647 boundaries, one for each block fragment in Alameda County. Using zip code data, I identify the 14 tracts on the island and use that list to filter the data down to a mere 1298 block fragments. I then group those block fragments into 282 blocks and those blocks into 50 block groups. Here is the NodeBox network I made to do the parsing:

    NodeBox network which converts a GeoJSON file into a CSV

    And here is what all those block fragments look like before I group them into block groups and trim them to fit the outline of the island:

    NodeBox display of randomly colored block fragments

    The final step, trimming the boundaries, takes some time and patience. The basic technique is to take the intersection of one shape, like a block group, with a second shape, like the island outline. But when you look closely you see that some of the defined boundaries only approximate the true shape of the island, leaving little slivers of leftover space here and there. To fix this I have to increase the area by doing a union with an arbitrary rectangle and then do an intersection to trim it back to the exact shoreline.

    There are also some peculiarities. A tiny triangular corner of the island actually resides in San Francisco County. Since this is uninhabited marshland it cannot affect the data so I add it to the nearest block group. Another group has an absurdly narrow tongue which sticks up along the median of a street separating two other groups, creating a distracting mess. I quietly trim it away. This is the kind of thing you have to do when cleaning any dataset. The difference here is that instead of correcting numbers, you are correcting shapes. Here is the final result, slightly exploded to better show each block group boundary:

    NodeBox display of exploded block group boundaries

    Now that I finally have the boundaries of my choropleth it’s time to find data to color them with. The place to find that is a government site called the American Fact Finder. This site contains many different data sources or “programs”. In addition to the Decennial Census, there are housing surveys, commodity flow surveys, employer statistics, and much more.

    The Census Bureau’s American Fact Finder website

    I choose a source called the American Community Survey, the largest household survey the Census Bureau administers. Unlike the decennial census, it does not count everyone it uses a statistical sample to estimate information based on surveys sent to 3.5 million households per year. So it’s not as accurate as the full census, but is more up to date. The estimates are quite reliable on a large scale, but can have a significant margin of error when applied at the block group level.

    I select the 2015 5-year survey applied at the block group level in Alameda county. This reduces the available data to 342 separate tables including Median Age by Sex, Travel Time to Work, Household Size, School Enrollment, Median Income, Number of Bedrooms, Aggregate Rent, and on and on. You can only download forty tables at a time so I pick a few at random.

    Using NodeBox I can easily read these tables, lookup individual values for each block group, and then color my block groups accordingly. Within minutes I am producing one choropleth after another:

    A selection of Alameda choropleths generated in NodeBox

    These maps may not seem all that interesting to you, but for someone like me who has lived on this island for twenty-five years they are fascinating. I can imagine hundreds of possible investigations. But for now I bask in the sheer power of effortlessly turning any random spreadsheet I come across into a gleaming, perfect choropleth.

    As a final flourish I will take this idea to the next level. Instead of coloring each block group a solid color, I can fill it with randomly scattered colored dots, one dot for each person on the island. There are 63,043 people living on the main island and I can assign each one a color based on their self-identified race. Our racial diversity is one of the things I like about Alameda it’s nice to finally see it in a single image:

    NodeBox map of self-identified race in Alameda

    I hope you have enjoyed this experiment. Open source mapping has become an energetic worldwide movement with a supportive community and many powerful tools. I have packed this post with links to help you get started on your own projects here are some more.

    For more tutorials see Mike Bostock’s Let’s Make a Map and Command-Line Cartography. D3 users should check out d3-geo, a library to convert GeoJSON to SVG paths. Leaflet is another javascript library which you can use to make mobile interactive “slippy maps“. Mapbox is a popular source of maps and tools for building mapping applications. Friend of the lab Ed Jones edits Open Street Map data using the JOSM plugin and uses the Street Map Plugin for UE4 to create 3D renderings.


    Converting Topo50 coordinates

    Learn how to convert Topo50 coordinates to other projections.

    The projection and datum used to produce Topo50 and Topo250 maps is the New Zealand Transverse Mercator 2000 (NZTM2000) projection and the New Zealand Geodetic Datum 2000 (NZGD2000).

    These are different to the pre 2009 topographic map series, NZMS260 and NZMS262, which were produced using the New Zealand Map Grid (NZMG) projection and the New Zealand Geodetic Datum 1949 (NZGD1949) datum.

    Converting coordinates

    Basic conversions - to convert individual coordinates between commonly used datums and projections (including those used in the Topo50 and NZMS260 maps), you can either:

    Detailed conversions - to convert coordinates between a wider range of datums, projections and height systems, and make use of format options such as bulk conversions, you can either:

    Note: Using these detailed tools requires a working understanding of coordinate and height conversions.

    Perturbation des services

    Over the last couple of days the server that runs the Geodetic Database and the Online Coordinate Converter has become unstable. As a result the server has to be rebuilt. We are working to do this as quickly as possible. In the meantime you can use these alternate links:

    Please sign up to our mailing list if you wish to receive an email notification when the service is back up and running.
    LINZ Geodetic Notifications


    Voir la vidéo: How to modify m52m50 wiring harness to fit e30