Question

j'espère que vous allez bien

J'essaie de convertir les coordonnées lat / long en OSGB36 x et y à l'aide de la bibliothèque proj.4.

Quelqu'un d'autre a-t-il réussi à le faire? Je dois renseigner les variables srcPrj4String et destPrj4String, par exemple

.

chaîne srcPrj4String = "+ proj = longlat + ellps = WGS84 + date = WGS84 + no_defs " ;;
string destPrj4String = & pro; = proj = utm + zone = 11 + ellps = GRS80 + donnée = NAD83 + unités = m

mais je ne peux pas comprendre ce que la chaîne destPrj4String devrait être avec OSGB36 - je sais que la donnée doit être + datum = OSGB36, mais tout ce que j'essaie ne fonctionne pas

Des idées?

Merci d'avance

leddy

Était-ce utile?

La solution 2

j'ai compris:

string srcPrj4String = "+proj=longlat +ellps=WGS84 +towgs84=0,0,0 +no_defs";
string destPrj4String = "+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894 +units=m +no_defs";

acclamations!

Autres conseils

Google recherche cette du Dr John Stevenson, un Universitaire des sciences de la Terre de l'Université de Manchester - qui devrait le faire correctement si quelqu'un le faisait Voici une citation.

Le problème était que passer à OSGB36 nécessite à la fois une projection et une conversion de données . Avant de octobre 2007 , proj ne diffusait que la projection, entraînant ainsi un décalage important. Tu peux vérifier si vous avez la nouvelle version en exécutant 'proj -v' ou en regardant votre fichier epsg:

cat /usr/share/proj/epsg | grep -A 1 "British National Grid" 

# OSGB 1936 / British National Grid 
<27700> +proj=tmerc +lat_0=49 +lon_0=-2 +k=0.9996012717 +x_0=400000 
+y_0=-100000 +ellps=airy +datum=OSGB36 +units=m +no_defs  <> 

Les nouvelles versions ont + datum = OSGB36.

Si vous avez une ancienne version, vous pouvez la corriger en remplaçant la ligne par:

+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.999601 +x_0=400000 +y_0=-100000 
+ellps=airy 
+towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894 +units=m 
+no_defs <> 

Une complication est que OSGB36 est légèrement déformé par rapport au GPS projections (telles que WGS84 et ETRS89). Ce décalage est faible et n’est important que pour les levés de haute précision. Beaucoup de recherches sur Les décalages OSGB36 font apparaître des pages sur ce sujet. Si tu veux compenser cela aussi, vous pouvez télécharger un fichier nadgrid et l'utiliser . Pour mes données, cela a déplacé les points d'environ 1 m.

EPSG: 27700 sur spatialreference.org donne diverses chaînes pour définir cela, y compris une pour proj4.

Voici un exemple de code en ruby ?? utilisant les liaisons proj4:

#!/usr/bin/ruby
require 'rubygems'
require 'proj4'

#Some example WGS84 lat lon coordinates to convert:
lon = -0.10322
lat = 51.52237

srcPoint = Proj4::Point.new(Math::PI * lon.to_f / 180, 
                            Math::PI * lat.to_f / 180)

srcPrj  = Proj4::Projection.new("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs") 
destPrj = Proj4::Projection.new("+proj=tmerc +lat_0=49 +lon_0=-2 +k=0.999601 +x_0=400000 +y_0=-100000 +ellps=airy +towgs84=446.448,-125.157,542.060,0.1502,0.2470,0.8421,-20.4894 +units=m +no_defs <>")

point = srcPrj.transform(destPrj, srcPoint)

puts "http://www.openstreetmap.org/?mlat=" + lat.to_s + "&mlon=" + lon.to_s + "&zoom=16"
puts "Converts to:";
puts "http://streetmap.co.uk/grid/" + point.x.round.to_s + "_" + point.y.round.to_s + "_106"

La sortie:

http://www.openstreetmap.org/?mlat= 51.52237 & amp; mlon = -0.10322 & amp; zoom = 16
Converti en:
http://streetmap.co.uk/grid/531691_182089_106

Donc, cela fonctionne correctement maintenant. À l’origine, j’essayais simplement d’appeler la chaîne 'destPrj' et d’appeler la méthode 'forward', mais cela refusait de convertir les données, ce qui donnait 100 m de sortie. Il semblait nécessaire d’utiliser la chaîne 'srcPrj' et la méthode 'transform' pour que la conversion de données se produise.

Voir aussi mon article de blog: Code Ruby pour la conversion en systèmes de coordonnées UK Ordnance Survey à partir de WGS84? qui inclut une version ruby ??pure (non proj4) pour effectuer la même chose

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top