Domanda

spero che tu stia bene

Sto cercando di convertire le coordinate lat / long in OSGB36 xey utilizzando la libreria proj.4.

Qualcun altro l'ha fatto con successo? Devo compilare le variabili srcPrj4String e destPrj4String, ad esempio

stringa srcPrj4String = " + proj = longlat + ellps = WGS84 + datum = WGS84 + no_defs " ;;
stringa destPrj4String = " + proj = utm + zone = 11 + ellps = GRS80 + datum = NAD83 + unità = m " ;;

ma non riesco a capire come dovrebbe essere destPrj4String con OSGB36 - so che il dato dovrebbe essere + datum = OSGB36, ma tutto ciò che provo non funziona

Qualche idea?

Molte grazie in anticipo

Leddy

È stato utile?

Soluzione 2

capito:

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

evviva!

Altri suggerimenti

Google go up this del Dr. John Stevenson, un Accademico di Scienze della Terra dell'Università di Manchester: chi dovrebbe farlo bene se qualcuno lo fa. Ecco una citazione.


Il problema era che andare su OSGB36 richiede sia una proiezione che un conversione del riferimento . Prima di ottobre 2007 , proj trasportava solo fuori dalla proiezione, con conseguente conseguente grande offset. Puoi controllare se hai la nuova versione eseguendo 'proj -v' o guardando il tuo file 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  <> 

Le nuove versioni hanno + datum = OSGB36.

Se hai una versione precedente, puoi correggerla sostituendo la riga 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 complicazione è che OSGB36 è leggermente distorto rispetto al GPS proiezioni (come WGS84 e ETRS89). Questo offset è piccolo e è importante solo per un rilevamento di maggiore precisione. Molte ricerche su Gli offset OSGB36 visualizzano le pagine relative a questo. Se lo desidera compensare anche questo, puoi scaricare un file nadgrid e usarlo . Per i miei dati, questo si è spostato i punti di circa 1 m.

EPSG: 27700 su spatialreference.org fornisce varie stringhe per la definizione di questo, incluso uno per proj4.

Ecco il codice di esempio in ruby ?? usando i bind 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"

L'output:

http://www.openstreetmap.org/?mlat= 51,52,237 mila & amp; mlon = -0,10322 & amp; zoom = 16
Converte in:
http://streetmap.co.uk/grid/531691_182089_106

Quindi ora funziona esattamente. Inizialmente stavo provando solo la stringa 'destPrj', e chiamando il metodo 'forward', ma questo mi ha rifiutato di fare la conversione del dato, risultando a 100 m di distanza. Sembrava necessario usare la stringa 'srcPrj' e il metodo 'transform', per far avvenire la conversione del riferimento.

Vedi anche il mio post sul blog: Codice ruby ??per la conversione in sistemi di coordinate UK Ordnance Survey da WGS84? che include una versione ruby ??pura (non proj4) per fare lo stesso

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top