2012-02-08 23 views
15

से यूटीएम जोन (रूपांतरित करने के लिए) निर्धारित करना मैं एक प्रोग्राम लिख रहा हूं जो कई अक्षरों/लंबी बिंदुओं की अपेक्षा करता है, और मीटर में कुछ गणना करने के लिए मैं उन्हें आंतरिक रूप से यूटीएम में परिवर्तित करता हूं।अक्षांश/अक्षांश

अक्षांश/लंबी बिंदुओं की सीमा स्वयं काफी छोटी है - लगभग 200 मीटर x 200 मीटर। उन्हें लगभग हमेशा एक यूटीएम क्षेत्र में रहने के लिए भरोसा किया जा सकता है (जब तक कि आप दुर्भाग्यपूर्ण न हो और ज़ोन की सीमा पार हों)।

हालांकि, जो क्षेत्र लेट/लांग में है, वह अप्रतिबंधित है। एक दिन कार्यक्रम ऑस्ट्रेलिया में लोगों के लिए चलाया जा सकता है (और ओह, कितने क्षेत्र एक भी राज्य में झूठ बोलते हैं, और कितना दर्द है जो मुझे पहले से ही ...), और मेक्सिको में लोगों के लिए एक और दिन है।

मेरा प्रश्न है - यह निर्धारित करने का एक तरीका है कि कौन सा क्षेत्र एक विशेष लम्बा/लेट है, ताकि इसे एक रूपांतरण पुस्तकालय में खिलाया जा सके (मैं वर्तमान में प्रोजे 4 और आर पैकेज rgdal का उपयोग करता हूं)।

मेरी भाषा आर है, लेकिन जवाब होना आवश्यक नहीं है - शायद यह सिर्फ एक साधारण गणना है, या शायद मैं proj निष्कर्ष निकालने योग्य सिस्टम कॉल एम्बेड कर सकता हूं।

चीयर्स।

+0

http://stat.ethz.ch/R-manual/R-patched /library/base/html/timezones.html – aatrujillob

+0

मैं इसे gis.stackexchange.com पर ले जाने का सुझाव दूंगा। – blindjesse

+0

@AndresT - वह समय क्षेत्र है। मैं यूटीएम जोन चाहता हूँ। –

उत्तर

33

संपादित करें: (गैर आर) कोड है कि पृथ्वी पर सभी गैर-ध्रुवीय क्षेत्रों के लिए काम करता है के लिए, here या here देखते हैं।


जब तक आप असाधारण क्षेत्रों (Svalbard and parts of Norway) के एक जोड़े से डेटा के साथ काम कर रहे हैं, यह एक सरल पर्याप्त गणना है कि आप के रूप में अच्छी बस इसे अपने आप को आर में क्या चाह सकते हैं देशांतर UTM से संबंधित है के Wikipedia's description है जोन संख्या:

यूटीएम प्रणाली 80 डिग्री सेल्सियस और 84 डिग्री अक्षांश अक्षांश के बीच पृथ्वी की सतह को 60 जोनों में विभाजित करती है, चौड़ाई में प्रत्येक 6 डिग्री रेखांश। जोन 1 रेखांश 180 डिग्री से 174 डिग्री डब्ल्यू कवर करता है; ज़ोन नंबरिंग पूर्ववर्ती क्षेत्र में जोन 60 तक बढ़ता है जिसमें 174 से 180 पूर्व तक रेखांश शामिल है।

long2UTM <- function(long) { 
    (floor((long + 180)/6) %% 60) + 1 
} 

# Trying it out for San Francisco, clearly in UTM Zone 10 
# in the figure in the Wikipedia article linked above 
SFlong <- -122.4192 
long2UTM(SFlong) 
# [1] 10 

कि अभिव्यक्ति:

तो, यह सोचते हैं कि आपके डेटा में Prime Meridian के पश्चिम में देशांतर -180 0 डिग्री से चल के रूप में एन्कोड रहे हैं, यहाँ ऊपर के आर-कोड संस्करण है स्पष्ट रूप से थोड़ा सा सरल किया जा सकता है, लेकिन मुझे लगता है कि इस रूप में इसके निर्माण के अंतर्गत तर्क सबसे स्पष्ट है। %% 60 बिट वहां बस है यदि आपकी कुछ लम्बाई 180 से अधिक या -180 से कम है।

+0

आह, यह गणना थी जिसके बाद मैं था - मैं अक्षांश/देशांतर से यूटीएम क्षेत्र की गणना कैसे करें "और गुकी की जांच भी नहीं करता था। चियर्स! –

+0

हाँ, मैं एक ही प्रक्रिया के माध्यम से बहुत पहले नहीं चला था। मुझे सहायता प्रदान करके ख़ुशी मिली। वैसे, यदि आप स्थानिक डेटा के साथ बहुत कुछ कर रहे हैं, तो [आर-सिग-जियो] (https://stat.ethz.ch/mailman/listinfo/r-sig-geo) सूची सेवा अमूल्य है। मैंने हाल ही में एक सवाल पूछा, और रोजर बिवांद से तत्काल सहायता प्राप्त की, जिन्होंने मुझे जवाब दिया कि कोई भी नहीं और कुछ आर-कोर सदस्य प्रदान कर सकते थे। चीयर्स! –

+0

@ToolmakerSteve - सुझाए गए सुधार के लिए धन्यवाद (जिसे 5 में से 3 एसओ संपादकों ने गलत तरीके से खारिज कर दिया था)। –

2

मैं आर-कोड पता नहीं है, लेकिन मैं इस PL/SQL कोड अपवादों के साथ मदद कर सकता है लगता है:

UTMZone := Trunc((lon - Zone0WestMeridian)/d); 
    --Special Cases for Norway & Svalbard 
    CASE 
    WHEN (lat > 55) AND (UTMZone = 31) AND (lat < 64) AND (lon > 2) THEN UTMZone := 32; 
    WHEN (lat > 71) AND (UTMZone = 32) AND (lon < 9) THEN UTMZone := 31; 
    WHEN (lat > 71) AND (UTMZone = 32) AND (lon > 8) THEN UTMZone := 33; 
    WHEN (lat > 71) AND (UTMZone = 34) AND (lon < 21) THEN UTMZone := 33; 
    WHEN (lat > 71) AND (UTMZone = 34) AND (lon > 20) THEN UTMZone := 35; 
    WHEN (lat > 71) AND (UTMZone = 36) AND (lon < 33) THEN UTMZone := 35; 
    WHEN (lat > 71) AND (UTMZone = 36) AND (lon > 32) THEN UTMZone := 37; 
    ELSE UTMZone := UTMZone; 
    END CASE; 

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^