2009-09-15 24 views
6

आशा है कि आप अच्छी तरह से कर रहे हैंPROJ.4 पुस्तकालय और OSGB36

मैं करने के लिए OSGB36 x और y proj.4 लाइब्रेरी का उपयोग कर अक्षांश/देशांतर निर्देशांक परिवर्तित करने के लिए कोशिश कर रहा हूँ।

क्या किसी और ने सफलतापूर्वक यह किया है? मुझे srcPrj4String और destPrj4String चरों को भरने की आवश्यकता है, उदा।

स्ट्रिंग srcPrj4String = "+ proj = longlat + ellps = WGS84 + गृहीत = WGS84 + no_defs";
स्ट्रिंग destPrj4String = "+ proj = utm + zone = 11 + ellps = GRS80 + डेटाम = NAD83 + इकाइयां = एम";

लेकिन मैं समझ नहीं क्या destPrj4String OSGB36 साथ होना चाहिए - मुझे पता है गृहीत + गृहीत = OSGB36 होना चाहिए, लेकिन सब कुछ मैं कोशिश,

कोई भी विचार काम नहीं करता है?

अग्रिम

leddy

उत्तर

4

में बहुत धन्यवाद यह मिल गया:

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

चियर्स!

6

गुगलिंग मैनचेस्टर यूनिवर्सिटी अर्थ साइंस अकादमिक डॉ। जॉन स्टीवेन्सन से this को बदलता है - जो किसी को भी सही कर लेना चाहिए। यहां एक उद्धरण है।


समस्या यह है कि OSGB36 के लिए जा रहा दोनों एक प्रक्षेपण और एक datum conversion की आवश्यकता थी। October 2007 से पहले, प्रोज केवल प्रक्षेपण के बाहर ले रहा था, जिसके परिणामस्वरूप बड़ी ऑफसेट हुई। आप देख सकते हैं आपके द्वारा चलाए जा 'proj -v' द्वारा या अपने 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 <> 

नए संस्करण + गृहीत = OSGB36 है।

आप एक पुराने संस्करण है, तो आप इसके साथ लाइन की जगह सही कर सकते हैं:

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

एक उलझन है कि OSGB36 (जैसे WGS84 और ETRS89 के रूप में) अनुमानों जीपीएस के संबंध में slightly distorted है। यह ऑफसेट छोटा है, और उच्च परिशुद्धता सर्वेक्षण के लिए केवल महत्वपूर्ण है। ओएसजीबी 36 ऑफ़सेट के बारे में कई खोज इस से संबंधित पेज लाती हैं। यदि आप को इसके लिए भी क्षतिपूर्ति करना चाहते हैं, आप एक nadgrid फ़ाइल और use it डाउनलोड कर सकते हैं। मेरे डेटा के लिए, यह अंक लगभग 1 मीटर तक चला गया।

1

EPSG:27700 on spatialreference.org इस परिभाषित, 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" 

उत्पादन:

http://www.openstreetmap.org/?mlat=51.52237&mlon=-0.10322&zoom=16
में धर्मान्तरित:

यहाँ proj4 बाइंडिंग का उपयोग कर रूबी में उदाहरण कोड है
http://streetmap.co.uk/grid/531691_182089_106

तो यह अब सही ढंग से काम कर रहा है । मूल रूप से मैं केवल 'destPrj' स्ट्रिंग की कोशिश कर रहा था, और 'आगे' विधि को बुला रहा था, लेकिन इसने डेटाम रूपांतरण करने से इनकार कर दिया, जिसके परिणामस्वरूप सबकुछ 100 मीटर दूर था। डाटाम रूपांतरण होने के लिए 'srcPrj' स्ट्रिंग और 'ट्रांसफॉर्म' विधि का उपयोग करना आवश्यक प्रतीत होता था।

यह भी देखें मेरे ब्लॉग पोस्ट: Ruby code for converting to UK Ordnance Survey coordinate systems from WGS84? जिसमें एक ही

करने के लिए शुद्ध रूबी संस्करण (proj4 नहीं) शामिल है