2010-02-04 2 views
2

J'ai un tas de Eastings/Northings coordonnées, en utilisant le UTM convention autant que je peux dire - donc fondamentalement, ce sont des coordonnées cartésiennes - que je voudrais convertir en Latitude et Longitude.Convertir eastings/northings en latitude/longitude en utilisant NetTopologySuite

Vraisemblablement NetTopologySuite peut m'aider avec ceci, mais je ne peux pas trouver beaucoup de documentation là-dessus.

Quelqu'un at-il des pointeurs pour me lancer? Edit: Les Eastings et Northings se sont révélés être, en particulier, OS Grid Reference Eastings et Northings, les questions et les conventions autour de laquelle sont discussed here.

Répondre

3

Pour répondre à ma propre question, les Eastings et Northings se sont révélés être des relevés d'ordonnances (OS), pour lesquels la conversion en latitude et longitude est assez bien définie. Discute de l'algorithme principal et des pièges courants. Il présente un algorithme Javascript mais j'ai trouvé un équivalent C# in this forum. Comme Chris Veness le fait remarquer, cet algorithme vous amène à Latitude et Longitude, mais sur la référence OSGB36. Habituellement, vous voudrez alors convertir cela au format de référence WGS84/GRS80 le plus communément utilisé (sinon vous aurez jusqu'à 120m de sortie, pour les emplacements britanniques). Pour cela vous avez besoin d'une transformation Helmert, as described by Chris here.

edit: Le code de Chris Veness est sous licence GNU LGPL.

+0

Vous devez probablement mentionner que le code est LGPL – MarkJ

3

Il s'agit probablement d'un outil plus simple pour vos besoins.

http://www.codeplex.com/ProjNET

Vous devez projeter de l'UTM (si elle est vraiment UTM - Il y a beaucoup de systèmes cartersian là-bas) à des coordonnées géographiques du système. Vous aurez probablement aussi besoin de connaître la donnée de vos données. Si vous avez vos données dans un fichier de formes, regardez le fichier .prj dans un éditeur de texte - il contiendra les informations de projection. Sinon, vous devez revenir au producteur de données et lui demander la projection.

7

Il s'agit d'une question très ancienne, mais étant donné que la recherche a commencé après 2 ans, j'ai trouvé que cela valait la peine de fournir une réponse qui pourrait aider les autres. Si vous pouvez l'utiliser, Ordnance Survey vous fournit maintenant une DLL (et un fichier de données associé) ou un fichier NTv2 qui peut être utilisé pour effectuer la transformation OSTN15 plus précise. Ces documents sont disponibles sous la licence BSD à:

https://www.ordnancesurvey.co.uk/business-and-government/help-and-support/navigation-technology/os-net/formats-for-developers.html

Cette conversion transformera vos coordonnées à ETRS89 (approximately equivalent to WGS84 in Europe) et sera plus précis que la transformation helmert des paramètres OSTN97/7 mentionné dans la réponse de @ codeulike.

1

Je sais que c'est une vieille question mais je viens de regarder comment faire cela en C# et trouvé this recently published article here.

L'auteur a écrit une bibliothèque C# disponible sur nuget appelé GeoUK.

Install-Package GeoUK 

Avec cette bibliothèque installée, pour convertir un Abscisse/Ordonnée à une latitude/longitude vous écrire une fonction comme ceci:

static void Main(string[] args) 
    { 
     // downing street! 
     const double easting = 530046; 
     const double northing = 179914; 

     var result = ConvertEastNorthToLatLong(easting, northing); 

     Console.WriteLine("Lat: {0} Long: {1}", result.Latitude, result.Longitude); 

     var gmaps = string.Format("https://www.google.co.uk/maps/@{0},{1},17z", Math.Round(result.Latitude,6), Math.Round(result.Longitude,6)); 
    } 

    static LatitudeLongitude ConvertEastNorthToLatLong(double easting, double northing) 
    { 
     // Convert to Cartesian 
     var cartesian = GeoUK.Convert.ToCartesian(new Airy1830(), 
       new BritishNationalGrid(), 
       new EastingNorthing(easting, northing)); 

     //ETRS89 is effectively WGS84 
     var wgsCartesian = Transform.Osgb36ToEtrs89(cartesian); 

     var wgsLatLong = GeoUK.Convert.ToLatitudeLongitude(new Wgs84(), wgsCartesian); 

     return wgsLatLong; 
    } 
} 

Cela fonctionne pour moi et produit le résultat: https://www.google.co.uk/maps/@51.503207,-0.127723,17z

L'article que j'ai mentionné plus tôt explique plus en profondeur. Cela pourrait aider quelqu'un d'autre plus tard.

+0

Est-ce possible de convertir les coordonnées lang, lat en ITM avec ce paquet? par exemple, http://zvikabenhaim.appspot.com/software/ITM/ – Venky

Questions connexes