2011-10-24 19 views
12

अक्षांश मैं पूरब की ओर गमन/उत्तर की ओर प्रारूप में स्थान के निर्देशांक मिल गया है, लेकिन मैं बिंग मैप्स में यह केंद्र के लिए यह उचित अक्षांश देशांतर में बदलने की जरूरत है। कोई सूत्र या विवरण पूर्व/उत्तर से लैट/लॉन में कैसे परिवर्तित करें?पूर्व की ओर उत्तर की ओर देशांतर

संपादित करें: अधिक विशिष्ट होना करने के लिए, मैं SVY21 निर्देशांक के लिए WGS84

उत्तर

13

Eastings की तरह कुछ का उपयोग कर कोड में परिवर्तन प्रदर्शन कर सकते हैं और उत्तरोत्तर एक आधार बिंदु के क्रमशः पूर्व और उत्तर दूरी हैं। मूल बिंदु आमतौर पर एक अक्षांश और देशांतर होता है, और पूर्वोत्तर और उत्तर आमतौर पर मीटर या पैरों में व्यक्त किए जाते हैं। पूर्व और उत्तर, हालांकि, उन्हें सकारात्मक बनाने के लिए आमतौर पर एक विशेष मूल्य का ऑफ़सेट होता है और उन्हें आधार बिंदु के पश्चिम और दक्षिण में स्थानांतरित करने की अनुमति देता है।

सामान्य तौर पर, एक से परिवर्तित करने के लिए एक और समन्वय प्रणाली के बाद से दोनों अलग ellipsoids (पृथ्वी मॉडल) और डाटुमस हो सकता है, सरल नहीं है। जैसा कि मैं समझता हूं, एक समन्वय प्रणाली से दूसरे में परिवर्तित करने के लिए सूत्र जटिल हैं।

SVY21, तथापि, ठीक उसी गृहीत उपयोग करता है और WGS84 के रूप में अंडाकार, कार्य सरल बनाने। एसवीवाई 21 में, पूर्व और उत्तर के लिए आधार बिंदु Base 7 at Pierce Reservoir, 1 डिग्री है। 22 मिनट 02.9154 सेकेंड उत्तर और 103 डिग्री। 49 मिनट 31.9 752 सेकंड। पूर्व (जो है, १.३६७४७६५ के बारे में डिग्री अक्षांश और १०३.८२,५५,४८७ के बारे में डिग्री देशांतर; अच्छी तरह से ज्ञात पाठ, तथापि, 1.3666 ... डिग्री और 103.8333 ... डिग्री, क्रमशः उपयोग करता है)। पूर्व के लिए ऑफसेट 28001.642 मीटर है, और उत्तर के लिए ऑफसेट 38744.572 मीटर है। ईपीएसजी कोड 3414 है। मैं मानता हूं कि आपकी पूर्वोत्तर और उत्तर मीटर मीटर में व्यक्त किए गए हैं।

के बाद से SVY21 WGS84 के रूप में एक ही प्रणाली का उपयोग करता, तुम सब करने की ज़रूरत है:

  • उनके संबंधित ऑफसेट मूल्यों से पूरब की ओर गमन और उत्तर की ओर घटाएं। (मान मीटर में किया जाएगा।) यदि पूरब की ओर गमन सकारात्मक है
  • दी आधार बिंदु, पूरब की ओर गमन का निरपेक्ष मान, और 90 डिग्री के असर गंतव्य बिंदु का पता लगाकर भी बिंदु के देशांतर खोजें, या 270 अगर यह नकारात्मक है तो डिग्री। This link में प्रासंगिक सूत्र शामिल हैं। (इस गणना के लिए, आप कोसाइन के गोलाकार कानून का उपयोग कर सकते हैं, जैसा कि "गंतव्य बिंदु दिया गया दूरी और प्रारंभ बिंदु से असर" अनुभाग में दिया गया है, या अधिक सटीक Vincenty's direct formula। पहला लिंक वाला पृष्ठ, हालांकि, इसका उपयोग नहीं करता है इस गणना के लिए हावर्सिन फॉर्मूला।)
  • आधार बिंदु, उत्तर के पूर्ण मूल्य को देखते हुए दिए गए गंतव्य बिंदु को ढूंढकर दिए गए बिंदु के अक्षांश को ढूंढें, और अगर उत्तर सकारात्मक है, या 180 डिग्री यदि 0 डिग्री यह नकारात्मक है।
+0

क्या आप हावरसिन के फॉर्मूला का जिक्र कर रहे हैं? पूर्व/उत्तर से लैट/लॉन तक कैसे? – Bahamut

+0

नहीं, मैं कोसाइन के गोलाकार कानून का जिक्र कर रहा हूं, हालांकि यह विन्सेंटी के प्रत्यक्ष सूत्र के साथ भी काम कर सकता है। –

+0

धन्यवाद मैं इसे आज़मा दूंगा। – Bahamut

3

समन्वय विभिन्न के सैकड़ों प्रणालियां हैं बदलने की आवश्यकता - पूर्व की ओर/उत्तर की ओर और अक्षांश/देशांतर प्रकार निर्देशांक के हैं, लेकिन वे ' सिस्टम को विशिष्ट रूप से पहचानने के लिए पर्याप्त नहीं है, जिससे उन निर्देशांक प्राप्त किए जाते हैं।

आपको या तो ईपीएसजी कोड (जैसे 4326, 4269, 27700, 32701) या वैकल्पिक रूप से, आपके स्रोत दोनों के लिए स्थानिक संदर्भ प्रणाली (डेटाम, प्रक्षेपण, प्राइम मेरिडियन और माप की इकाई) का विवरण होना चाहिए और चयनित गंतव्य प्रारूप। आप अपने प्रश्न के शीर्षक में "जीपीएस" का उल्लेख है, इसलिए मैं यह सोचते हैं रहा है कि अक्षांश/देशांतर की आवश्यकता WGS84 ग्लोबल पोजीशनिंग सिस्टम द्वारा प्रयुक्त गृहीत के सापेक्ष परिभाषित किया गया है, लेकिन अभी भी है कि गृहीत है कि विभिन्न करने के लिए ले जा सकता है के कई अनुमानों हैं पूर्व/मूल्य निर्धारण मूल्य।

एक बार जब आप का इस्तेमाल किया प्रक्षेपण के विवरण मिल गया है, तो आप Proj.4 पुस्तकालय (http://trac.osgeo.org/proj/)

+0

जो परिणाम मैं प्राप्त कर रहा हूं वह SVY21 प्रारूप में हैं और मुझे इसे WGS84 में परिवर्तित करने और इसे बिंग मानचित्रों में प्लॉट करने की आवश्यकता होगी। क्या पुस्तकालय का उपयोग करना संभव है? – Bahamut

2

वहाँ पर्ल में एक अपेक्षाकृत सरल समाधान है:

तो, सब से पहले, सुनिश्चित करें कि आप पर्ल इंस्टॉल किया हुआ है। फिर, निम्नलिखित चार मॉड्यूल स्थापित:

भू :: HelmertTransform भूगोल :: NationalGrid सीएएम :: DBF mySociety :: GeoUtil

आप कई तरीकों से में ऐसा कर सकते हैं। यहाँ कैसे मैंने किया है:

# Geo::HelmertTransform 
wget http://search.cpan.org/CPAN/authors/id/M/MY/MYSOCIETY/Geo-HelmertTransform-1.13.tar.gz 
tar xzf Geo-HelmertTransform-1.13.tar.gz 
perl Makefile.PL 
make 
make install 

# Geography::NationalGrid 
http://search.cpan.org/CPAN/authors/id/P/PK/PKENT/Geography-NationalGrid-1.6.tar.gz 
tar xzf Geography-NationalGrid-1.6.tar.gz 
perl Makefile.PL 
make 
make install 

# CAM::DBF 
wget http://search.cpan.org/CPAN/authors/id/C/CL/CLOTHO/CAM-DBF-1.02.tgz 
tar xzf CAM-DBF-1.02.tgz 
perl Makefile.PL 
make 
make install 

# mySociety::GeoUtil 
# See: http://parlvid.mysociety.org:81/os/ -> https://github.com/mysociety/commonlib/blob/master/perllib/mySociety/GeoUtil.pm 
mkdir -p mySociety 
wget -O mySociety/GeoUtil.pm 'https://raw.githubusercontent.com/mysociety/commonlib/master/perllib/mySociety/GeoUtil.pm' 
  1. जीबी डेटा प्राप्त करें।

पर क्लिक करके ग्रेट ब्रिटेन "कोड-पॉइंट® ओपन" डेटासेट डाउनलोड करें और निर्देशों का पालन करें। एक बार जब आप codepo_gb.zip डाउनलोड किया है तो आप इसे निकाल सकते हैं इस प्रकार है: यह मानकर कि अनज़िप फ़ाइलों मौजूदा निर्देशिका में अब कर रहे हैं

unzip codepo_gb.zip

, आप तो क्रम में निम्नलिखित PerlScript चला सकते हैं डेटा पार्स करने के लिए, जीबी eastings/northings निकालें और उन्हें अक्षांश/देशांतर में बदलने का।

use strict; 
use mySociety::GeoUtil qw/national_grid_to_wgs84/; 

while (<>) { 
    my @x=split(/,/); # split csv 
    my ($pc, $east, $north) = ($x[0], $x[10], $x[11]); 
    $pc=~s/\"//g; # remove quotes around postcode 
    my ($lat, $lng) = national_grid_to_wgs84($east, $north, "G"); # "G" means Great Britain 
    print "$pc,$lat,$lng\n"; 
} 

(कॉल करने के लिए, एक .pl फाइल करने के लिए पिछले कोड ब्लॉक बचाने के लिए, और उसके बाद perl script.pl your.csv फोन ... भी याद है, $ x [0], $ x [10] और $ x [11 ] पोस्टकोड, पूरब की ओर गमन और क्रमश: उत्तर की ओर के स्तंभ संख्या होना चाहिए।

पूर्ण क्रेडिट http://baroque.posterous.com/uk-postcode-latitudelongitude

+0

अच्छा होगा लेकिन मैं पोर्टेबिलिटी के रूपांतरण के लिए गणना और/या सूत्र पसंद करता हूं। दूसरी बात, svy21 सिंगापुर है इसलिए डब्ल्यूजीएस 84 रूपांतरण के लिए ब्रिटेन का एसवीवाई लागू नहीं है। – Bahamut

+0

मेरे बुरा, उम्मीद है कि यह किसी की मदद कर सकते हैं, हालांकि के रूप में मैं इस सवाल पर ठोकर खाई, जबकि एक भीड़ में एक समाधान खोजने के लिए और इस ब्रिटिश रूपांतरण के लिए सबसे आसान तरीका था। – rickyduck

+1

सच। यही कारण है कि मैंने इसे कम नहीं किया क्योंकि किसी को भी यह उपयोगी लगता है। – Bahamut

2

को मैं WGS84 अक्षांश/देशांतर मूल्यों के लिए T-SQL कार्यों में एक Javascript क्रियान्वयन परिवर्तित कर दिया है। के लिए स्वतंत्र महसूस जैसा कि आप फिट देखते हैं उसका उपयोग करें। अगर आपको एक अलग समन्वय प्रणाली की आवश्यकता है, तो विस्कॉन्सिन विश्वविद्यालय देखें - ग्रीन बे वेब पेज जिसे मैंने स्रोत के रूप में उपयोग किया और अद्यतन स्थिरांक प्राप्त किया।

drop function UF_utm_to_lat 
go 
create function UF_utm_to_lat(@utmz float, @x float, @y float) returns float 
as 
begin 
    --Based on code from this page: http://www.uwgb.edu/dutchs/usefuldata/ConvertUTMNoOZ.HTM 
    declare @latitude float; 
    declare @longitude float; 
    set @latitude = 0.00; 
    set @longitude = 0.00; 

    --Declarations 
    declare @a float; 
    declare @f float; 
    declare @drad float; 
    declare @k0 float; 
    declare @b float; 
    declare @e float; 
    declare @e0 float; 
    declare @esq float; 
    declare @e0sq float; 
    declare @zcm float; 
    declare @e1 float; 
    declare @M float; 
    declare @mu float; 
    declare @phi1 float; 
    declare @C1 float; 
    declare @T1 float; 
    declare @N1 float; 
    declare @R1 float; 
    declare @D float; 
    declare @phi float; 
    declare @lng float; 
    declare @lngd float; 

    --Datum Info here: Name, a, b, f, 1/f 
    --WGS 84 6,378,137.0 6356752.314 0.003352811 298.2572236 

    set @a = 6378137.0; 
    set @b = 6356752.314; 
    set @f = 0.003352811; 
    set @drad = PI()/180.0; 
    set @k0 = 0.9996; --scale on central meridian 

    set @e = SQRT(1.0 - (@b/@a)*(@b/@a)); --Eccentricity 
    --e = Math.sqrt(1 - (b/a)*(b/a));//eccentricity 
    set @e0 = @e/SQRT(1.0 - @e*@e); --Called e prime in reference 
    --e0 = e/Math.sqrt(1 - e*e);//Called e prime in reference 
    set @esq = (1.0 - (@b/@a)*(@b/@a)); --e squared for use in expansions 
    --esq = (1 - (b/a)*(b/a));//e squared for use in expansions 
    set @e0sq = @e*@e/([email protected]*@e); --e0 squared - always even powers 
    --e0sq = e*e/(1-e*e);// e0 squared - always even powers 
    set @zcm = 3.0 + 6.0*(@utmz-1.0) - 180.0; --Central meridian of zone 
    --zcm = 3 + 6*(utmz-1) - 180;//Central meridian of zone 
    set @e1 = (1.0 - SQRT(1.0 - @e*@e))/(1.0 + SQRT(1.0 - @e*@e)); --Called e1 in USGS PP 1395 also 
    --e1 = (1 - Math.sqrt(1 - e*e))/(1 + Math.sqrt(1 - e*e));//Called e1 in USGS PP 1395 also 
    set @M = 0.0 + @y/@k0; --Arc length along standard meridian 
    --M = M0 + y/k0;//Arc length along standard meridian. 
    set @mu = @M/(@a*(1.0 - @esq*(1.0/4.0 + @esq*(3.0/64.0 + 5.0*@esq/256.0)))); 
    --mu = M/(a*(1 - esq*(1/4 + esq*(3/64 + 5*esq/256)))); 
    set @phi1 = @mu + @e1*(3.0/2.0 - 27.0*@e1*@e1/32.0)*SIN(2.0*@mu) + @e1*@e1*(21.0/16.0 - 55.0*@e1*@e1/32.0)*SIN(4.0*@mu); --Footprint Latitude 
    --phi1 = mu + e1*(3/2 - 27*e1*e1/32)*Math.sin(2*mu) + e1*e1*(21/16 -55*e1*e1/32)*Math.sin(4*mu);//Footprint Latitude 
    set @phi1 = @phi1 + @e1*@e1*@e1*(SIN(6.0*@mu)*151.0/96.0 + @e1*SIN(8.0*@mu)*1097.0/512.0); 
    --phi1 = phi1 + e1*e1*e1*(Math.sin(6*mu)*151/96 + e1*Math.sin(8*mu)*1097/512); 
    set @C1 = @e0sq*POWER(COS(@phi1),2.0); 
    --C1 = e0sq*Math.pow(Math.cos(phi1),2); 
    set @T1 = POWER(TAN(@phi1),2.0); 
    --T1 = Math.pow(Math.tan(phi1),2); 
    set @N1 = @a/SQRT(1.0-POWER(@e*SIN(@phi1),2.0)); 
    --N1 = a/Math.sqrt(1-Math.pow(e*Math.sin(phi1),2)); 
    set @R1 = @N1*([email protected]*@e)/(1.0-POWER(@e*SIN(@phi1),2.0)); 
    --R1 = N1*(1-e*e)/(1-Math.pow(e*Math.sin(phi1),2)); 
    set @D = (@x-500000.0)/(@N1*@k0); 
    --D = (x-500000)/(N1*k0); 
    set @phi = (@D*@D)*(1.0/2.0 - @D*@D*(5.0 + 3.0*@T1 + 10.0*@C1 - 4.0*@C1*@C1 - 9.0*@e0sq)/24.0); 
    --phi = (D*D)*(1/2 - D*D*(5 + 3*T1 + 10*C1 - 4*C1*C1 - 9*e0sq)/24); 
    set @phi = @phi + POWER(@D,6.0)*(61.0 + 90.0*@T1 + 298.0*@C1 + 45.0*@T1*@T1 - 252.0*@e0sq - 3.0*@C1*@C1)/720.0; 
    --phi = phi + Math.pow(D,6)*(61 + 90*T1 + 298*C1 + 45*T1*T1 -252*e0sq - 3*C1*C1)/720; 
    set @phi = @phi1 - (@N1*TAN(@phi1)/@R1)*@phi; 
    --phi = phi1 - (N1*Math.tan(phi1)/R1)*phi; 


    set @latitude = FLOOR(1000000.0*@phi/@drad)/1000000.0; 

    set @lng = @D*(1.0 + @D*@D*((-1.0 - 2.0*@T1 - @C1)/6.0 + @D*@D*(5.0 - 2.0*@C1 + 28.0*@T1 - 3.0*@C1*@C1 + 8.0*@e0sq + 24.0*@T1*@T1)/120))/COS(@phi1); 
    set @lngd = @[email protected]/@drad; 
    set @longitude = FLOOR(1000000.0*@lngd)/1000000.0; 


    return @latitude; 
end 
go 
drop function UF_utm_to_long 
go 
create function UF_utm_to_long(@utmz float, @x float, @y float) returns float 
as 
begin 
    --Based on code from this page: http://www.uwgb.edu/dutchs/usefuldata/ConvertUTMNoOZ.HTM 
    declare @latitude float; 
    declare @longitude float; 
    set @latitude = 0.00; 
    set @longitude = 0.00; 

    --Declarations 
    declare @a float; 
    declare @f float; 
    declare @drad float; 
    declare @k0 float; 
    declare @b float; 
    declare @e float; 
    declare @e0 float; 
    declare @esq float; 
    declare @e0sq float; 
    declare @zcm float; 
    declare @e1 float; 
    declare @M float; 
    declare @mu float; 
    declare @phi1 float; 
    declare @C1 float; 
    declare @T1 float; 
    declare @N1 float; 
    declare @R1 float; 
    declare @D float; 
    declare @phi float; 
    declare @lng float; 
    declare @lngd float; 

    --Datum Info here: Name, a, b, f, 1/f 
    --WGS 84 6,378,137.0 6356752.314 0.003352811 298.2572236 

    set @a = 6378137.0; 
    set @b = 6356752.314; 
    set @f = 0.003352811; 
    set @drad = PI()/180.0; 
    set @k0 = 0.9996; --scale on central meridian 

    set @e = SQRT(1.0 - (@b/@a)*(@b/@a)); --Eccentricity 
    --e = Math.sqrt(1 - (b/a)*(b/a));//eccentricity 
    set @e0 = @e/SQRT(1.0 - @e*@e); --Called e prime in reference 
    --e0 = e/Math.sqrt(1 - e*e);//Called e prime in reference 
    set @esq = (1.0 - (@b/@a)*(@b/@a)); --e squared for use in expansions 
    --esq = (1 - (b/a)*(b/a));//e squared for use in expansions 
    set @e0sq = @e*@e/([email protected]*@e); --e0 squared - always even powers 
    --e0sq = e*e/(1-e*e);// e0 squared - always even powers 
    set @zcm = 3.0 + 6.0*(@utmz-1.0) - 180.0; --Central meridian of zone 
    --zcm = 3 + 6*(utmz-1) - 180;//Central meridian of zone 
    set @e1 = (1.0 - SQRT(1.0 - @e*@e))/(1.0 + SQRT(1.0 - @e*@e)); --Called e1 in USGS PP 1395 also 
    --e1 = (1 - Math.sqrt(1 - e*e))/(1 + Math.sqrt(1 - e*e));//Called e1 in USGS PP 1395 also 
    set @M = 0.0 + @y/@k0; --Arc length along standard meridian 
    --M = M0 + y/k0;//Arc length along standard meridian. 
    set @mu = @M/(@a*(1.0 - @esq*(1.0/4.0 + @esq*(3.0/64.0 + 5.0*@esq/256.0)))); 
    --mu = M/(a*(1 - esq*(1/4 + esq*(3/64 + 5*esq/256)))); 
    set @phi1 = @mu + @e1*(3.0/2.0 - 27.0*@e1*@e1/32.0)*SIN(2.0*@mu) + @e1*@e1*(21.0/16.0 - 55.0*@e1*@e1/32.0)*SIN(4.0*@mu); --Footprint Latitude 
    --phi1 = mu + e1*(3/2 - 27*e1*e1/32)*Math.sin(2*mu) + e1*e1*(21/16 -55*e1*e1/32)*Math.sin(4*mu);//Footprint Latitude 
    set @phi1 = @phi1 + @e1*@e1*@e1*(SIN(6.0*@mu)*151.0/96.0 + @e1*SIN(8.0*@mu)*1097.0/512.0); 
    --phi1 = phi1 + e1*e1*e1*(Math.sin(6*mu)*151/96 + e1*Math.sin(8*mu)*1097/512); 
    set @C1 = @e0sq*POWER(COS(@phi1),2.0); 
    --C1 = e0sq*Math.pow(Math.cos(phi1),2); 
    set @T1 = POWER(TAN(@phi1),2.0); 
    --T1 = Math.pow(Math.tan(phi1),2); 
    set @N1 = @a/SQRT(1.0-POWER(@e*SIN(@phi1),2.0)); 
    --N1 = a/Math.sqrt(1-Math.pow(e*Math.sin(phi1),2)); 
    set @R1 = @N1*([email protected]*@e)/(1.0-POWER(@e*SIN(@phi1),2.0)); 
    --R1 = N1*(1-e*e)/(1-Math.pow(e*Math.sin(phi1),2)); 
    set @D = (@x-500000.0)/(@N1*@k0); 
    --D = (x-500000)/(N1*k0); 
    set @phi = (@D*@D)*(1.0/2.0 - @D*@D*(5.0 + 3.0*@T1 + 10.0*@C1 - 4.0*@C1*@C1 - 9.0*@e0sq)/24.0); 
    --phi = (D*D)*(1/2 - D*D*(5 + 3*T1 + 10*C1 - 4*C1*C1 - 9*e0sq)/24); 
    set @phi = @phi + POWER(@D,6.0)*(61.0 + 90.0*@T1 + 298.0*@C1 + 45.0*@T1*@T1 - 252.0*@e0sq - 3.0*@C1*@C1)/720.0; 
    --phi = phi + Math.pow(D,6)*(61 + 90*T1 + 298*C1 + 45*T1*T1 -252*e0sq - 3*C1*C1)/720; 
    set @phi = @phi1 - (@N1*TAN(@phi1)/@R1)*@phi; 
    --phi = phi1 - (N1*Math.tan(phi1)/R1)*phi; 

    set @latitude = FLOOR(1000000.0*@phi/@drad)/1000000.0; 

    set @lng = @D*(1.0 + @D*@D*((-1.0 - 2.0*@T1 - @C1)/6.0 + @D*@D*(5.0 - 2.0*@C1 + 28.0*@T1 - 3.0*@C1*@C1 + 8.0*@e0sq + 24.0*@T1*@T1)/120))/COS(@phi1); 
    set @lngd = @[email protected]/@drad; 
    set @longitude = FLOOR(1000000.0*@lngd)/1000000.0; 


    return @longitude; 
end 
संबंधित मुद्दे