سؤال

اتمنى ان تكون بخير

أحاول تحويل الإحداثيات Lat/Long إلى OSGB36 X و Y باستخدام مكتبة Proj.4.

هل قام أي شخص آخر بنجاح بهذا؟ أحتاج إلى ملء متغيرات SRCPRJ4String و DestPRJ4String ، على سبيل المثال

String srcprj4string = " +proj = longlat +ellps = wgs84 +datum = wgs84 +no_defs" ؛
String destprj4string = " +proj = utm +Zone = 11 +ellps = grs80 +datum = nad83 +units = m" ؛

لكن لا يمكنني معرفة ما يجب أن يكون عليه DestPRJ4String مع OSGB36 - أعرف أن المسند يجب أن يكون +datum = OSGB36 ، لكن كل ما أحاوله ، لا يعمل

أيه أفكار؟

شكرا كثيرا مسبقا

ليددي

هل كانت مفيدة؟

المحلول 2

فهمتك:

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

في صحتك!

نصائح أخرى

googling يظهر هذه من الدكتور جون ستيفنسون ، وهو أكاديمي لعلوم الأرض بجامعة مانشستر - الذي يجب أن يحصل عليه بشكل صحيح إذا فعل أي شخص. هذا اقتباس.


كانت المشكلة أن الذهاب إلى OSGB36 يتطلب كل من الإسقاط وتحويل المسند. قبل ذ لك أكتوبر 2007, ، كان Proj ينفذ فقط الإسقاط ، مما أدى إلى الإزاحة الكبيرة. يمكنك التحقق مما إذا كان لديك الإصدار الجديد عن طريق تشغيل "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  <> 

تحتوي الإصدارات الجديدة على +datum = 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 مشوهة قليلا فيما يتعلق بتوقعات GPS (مثل WGS84 و ETRS89). هذه الإزاحة صغيرة ، وهي مهمة فقط للمسح الدقيق العالي. العديد من عمليات البحث حول OSGB36 الإزاحة تثير صفحات تتعلق بهذا. إذا كنت ترغب في التعويض عن هذا أيضًا ، يمكنك تنزيل ملف NadGrid و استخدمه. بالنسبة لبياني ، نقل هذا النقاط بحوالي 1 متر.

EPSG: 27700 على spatialreference.org يعطي سلاسل مختلفة لتحديد هذا ، بما في ذلك واحدة ل Proj4.

هنا رمز المثال في روبي باستخدام روابط 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
يتحول إلى:
http://streetmap.co.uk/grid/531691_182089_106

لذلك هذا يعمل بدقة الآن. في الأصل كنت أحاول فقط سلسلة "Destprj" ، وأطلق على طريقة "الأمام" ، لكن هذا رفض القيام بتحويل المسند ، مما أدى إلى خروج 100 متر. يبدو أنه من الضروري استخدام سلسلة "SRCPRJ" وطريقة "التحويل" ، للحصول على تحويل المسند.

انظر أيضًا منشور مدونتي: رمز Ruby للتحويل إلى أنظمة إحداثيات مسح Ord Ordnance من WGS84؟ الذي يتضمن نسخة روبي نقية (وليس proj4) لفعل الشيء نفسه

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top