Pregunta

espero que estés bien

Estoy tratando de convertir coordenadas lat / long a OSGB36 x e y usando la biblioteca proj.4.

¿Alguien más ha hecho esto con éxito? Necesito completar las variables srcPrj4String y destPrj4String, por ejemplo

string srcPrj4String = " + proj = longlat + ellps = WGS84 + datum = WGS84 + no_defs " ;;
string destPrj4String = " + proj = utm + zone = 11 + ellps = GRS80 + datum = NAD83 + units = m " ;;

pero no puedo entender cuál debería ser el destPrj4String con OSGB36 - Sé que el dato debería ser + datum = OSGB36, pero todo lo que intento no funciona

¿Alguna idea?

Muchas gracias de antemano

leddy

¿Fue útil?

Solución 2

lo tengo:

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";

¡salud!

Otros consejos

Google busca esto del Dr. John Stevenson, un Académico de Ciencias de la Tierra de la Universidad de Manchester: quién debería hacerlo bien si alguien lo hace. Aquí hay una cita.


El problema era que ir a OSGB36 requiere tanto una proyección como un conversión de datos . Antes de octubre de 2007 , proj solo llevaba fuera de la proyección, lo que resulta en el gran desplazamiento. Puedes revisar si tiene la nueva versión ejecutando 'proj -v' o mirando su archivo 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  <> 

Las nuevas versiones tienen + datum = OSGB36.

Si tiene una versión anterior, puede corregirla reemplazando la línea con:

+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 <> 

Una complicación es que OSGB36 está ligeramente distorsionado con respecto al GPS proyecciones (como WGS84 y ETRS89). Este desplazamiento es pequeño y solo es importante para topografía de mayor precisión. Muchas búsquedas sobre Las compensaciones de OSGB36 muestran páginas relacionadas con esto. Si quieres compensar esto también, puede descargar un archivo nadgrid y úselo . Para mis datos, esto se movió los puntos por aproximadamente 1 m.

EPSG: 27700 en spatialreference.org proporciona varias cadenas para definir esto, incluido uno para proj4.

Aquí está el código de ejemplo en ruby ?? usando los enlaces 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 salida:

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

Entonces esto está funcionando con precisión ahora. Originalmente estaba probando solo la cadena 'destPrj', y llamé al método 'reenviar', pero esto se negó a hacer la conversión de datos, lo que resultó en que todo estaba a 100 m. Parecía necesario utilizar la cadena 'srcPrj' y el método 'transform' para obtener la conversión de datos.

Vea también mi publicación de blog: Código Ruby para convertir a los sistemas de coordenadas de UK Ordnance Survey de WGS84? que incluye una versión ruby ??pura (no proj4) para hacer lo mismo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top