मैन्युअल रूप से परिवर्तित lat / lon को नियमित lat / lon में बदलना?


24

पहले मुझे स्पष्ट करना चाहिए कि मेरे पास क्षेत्र के साथ पिछला अनुभव नहीं है, इसलिए मुझे तकनीकी शब्दावली का पता नहीं है। मेरा प्रश्न इस प्रकार है:

मेरे पास दो मौसम डेटासेट हैं:

  • पहले वाले के पास नियमित समन्वय प्रणाली है (मुझे नहीं पता कि इसका कोई विशिष्ट नाम है), -90 से 90 और -180 से 180 तक, और डंडे अक्षांश -90 और 90 पर हैं।

  • दूसरे एक में, हालांकि यह एक ही क्षेत्र के अनुरूप होना चाहिए, मैंने कुछ अलग देखा: अक्षांश और देशांतर समान नहीं थे, क्योंकि उनके पास एक और संदर्भ बिंदु है (विवरण में घुमाया गया ग्रिड कहा जाता है )। लैट / लोन जोड़े के साथ, निम्नलिखित जानकारी आती है: दक्षिणी ध्रुव अक्षांश: -35.00, दक्षिणी ध्रुव लोन: -15.00, कोण: 0.0।

मुझे लोन की दूसरी जोड़ी / लाट को पहले एक में बदलना होगा। यह अक्षांशों में 35 को जोड़ने और अनुदैर्ध्य में 15 के रूप में सरल हो सकता है, क्योंकि कोण 0 है और यह एक साधारण स्थानांतरण लगता है, लेकिन मुझे यकीन नहीं है।

संपादित करें: मेरे पास निर्देशांक के बारे में जानकारी निम्नलिखित है

http://rda.ucar.edu/docs/formats/grib/gribdoc/llgrid.html

स्पष्ट रूप से, दूसरी समन्वय प्रणाली को गोले के एक सामान्य रोटेशन द्वारा परिभाषित किया गया है

"इन मापदंडों के लिए एक विकल्प है:

  • समन्वय प्रणाली के दक्षिणी ध्रुव की डिग्री में भौगोलिक अक्षांश, उदाहरण के लिए टीएटीपी;

  • समन्वय प्रणाली के दक्षिणी ध्रुव की डिग्री में भौगोलिक देशांतर, उदाहरण के लिए लैम्ब्डैप;

  • समन्वय प्रणाली के नए ध्रुवीय अक्ष (दक्षिणी ध्रुव से उत्तरी ध्रुव की ओर देखने पर घड़ी की दिशा में मापा गया) के बारे में डिग्री में रोटेशन का कोण, नए अक्ष को पहली बार गोलाकार ध्रुवीय अक्ष के बारे में लैम्बडैप डिग्री के माध्यम से गोलाकार घुमाकर प्राप्त किया गया है। , और फिर (90 + टीएटीपी) डिग्री के माध्यम से घूम रहा है ताकि दक्षिणी ध्रुव (पहले घुमाया गया) ग्रीनविच मेरियनियन के साथ चले। "

लेकिन फिर भी मुझे नहीं पता कि इसे पहले कैसे बदलना है।


2
तो क्या यह GRIB डेटा है? यदि हां, तो शायद हमें एक ग्रिब टैग की आवश्यकता है।
कर्क कुंकेंडल

@ ECMWF लिंक मान्य नहीं लगते हैं। क्या आप संपादित कर सकते हैं?
गन्सुब

@gansub मैंने लिंक संपादित किए हैं। मुझे पता नहीं है कि जानकारी बिल्कुल वैसी ही है क्योंकि यह एक लंबा समय रहा है, लेकिन मेरा मानना ​​है कि नया लिंक भविष्य के संदर्भ के लिए कुछ संदर्भ प्रदान कर सकता है।
skd

@skd जब आप कहते हैं angle=0.0, आप क्या मतलब है असर ? मेरे पास घूमने वाले ध्रुव निर्देशांक के साथ एक netcdf फ़ाइल है, लेकिन किसी भी कोण का कोई उल्लेख नहीं है।
फाकॉफी

@ CF84 मैं वास्तव में निश्चित नहीं हूं। मुझे लगता है कि यदि कोण का कोई उल्लेख नहीं है, तो यह कोण = 0
skd

जवाबों:


24

मैन्युअल रूप से रोटेशन को उलट कर चाल करना चाहिए; कहीं न कहीं गोलाकार समन्वय प्रणालियों को घुमाने के लिए एक सूत्र होना चाहिए, लेकिन जब से मैं इसे नहीं ढूँढ सकता, यहाँ व्युत्पत्ति ( ' घुमाए गए समन्वय प्रणाली को चिह्नित करता है; सामान्य भौगोलिक निर्देशांक सादे प्रतीकों का उपयोग करते हैं):

पहले डेटा को दूसरी डेटासेट में गोलाकार (लोन ', लेट') से (x ', y', z) में कनवर्ट करें:

x' = cos(lon')*cos(lat')
y' = sin(lon')*cos(lat')
z' = sin(lat')

फिर दूसरी समन्वय प्रणाली को घुमाने के लिए दो रोटेशन मेट्रिसेस का उपयोग करें ताकि यह पहले 'सामान्य' के साथ मेल खाता हो। हम समन्वित कुल्हाड़ियों को घुमाएंगे, इसलिए हम धुरी घूर्णन मैट्रिक्स का उपयोग कर सकते हैं । हमें ईसीएमडब्ल्यूएफ परिभाषा में उपयोग किए गए रोटेशन अर्थ से मिलान करने के लिए ϑ मैट्रिक्स में साइन को उल्टा करने की आवश्यकता है, जो मानक सकारात्मक दिशा से अलग प्रतीत होता है।

चूंकि हम समन्वय प्रणाली की परिभाषा में वर्णित रोटेशन को पूर्ववत कर रहे हैं, हम पहले o = - (90 + lat0) = -55 डिग्री y 'अक्ष (घुमाए गए ग्रीनविच मेरिडियन के साथ) और फिर φ = के आसपास घुमाते हैं। लोन = z अक्ष के आसपास +15 डिग्री):

x   ( cos(φ), sin(φ), 0) (  cos(ϑ), 0, sin(ϑ)) (x')
y = (-sin(φ), cos(φ), 0).(  0     , 1, 0     ).(y')
z   ( 0     , 0     , 1) ( -sin(ϑ), 0, cos(ϑ)) (z')

विस्तारित, यह बन जाता है:

x = cos(ϑ) cos(φ) x' + sin(φ) y' + sin(ϑ) cos(φ) z'
y = -cos(ϑ) sin(φ) x' + cos(φ) y' - sin(ϑ) sin(φ) z'
z = -sin(ϑ) x' + cos(ϑ) z'

फिर वापस 'सामान्य' (लैट, लोन) का उपयोग करके परिवर्तित करें

lat = arcsin(z)
lon = atan2(y, x)

यदि आपके पास atan2 नहीं है, तो आप atan (y / x) का उपयोग करके और x-y के संकेतों की जांच करके इसे स्वयं कार्यान्वित कर सकते हैं

सुनिश्चित करें कि आप त्रिकोणमितीय कार्यों का उपयोग करने से पहले सभी कोणों को रेडियन में बदल देते हैं, या आपको अजीब परिणाम मिलेंगे; अंत में डिग्री के लिए वापस कन्वर्ट अगर आप क्या पसंद है ...

उदाहरण (घुमाया गया गोला निर्देशांक ==> मानक भौगोलिक निर्देशांक):

  • घुमाए गए CS का दक्षिणी ध्रुव (lat0, lon0) है

    (-90 °, *) ==> (-35 °, -15 °)

  • घुमाया हुआ सीएस का प्रधान मध्याह्न भौगोलिक में -15 ° मध्याह्न है (उत्तर की ओर 55 ° घुमाया गया)

    (0 °, 0 °) ==> (55 °, -15 °)

  • समरूपता के लिए आवश्यक है कि दोनों नए CS में 90 ° / -90 ° या भौगोलिक निर्देशांक में 75 ° / -105 ° पर एक दूसरे को काटें।

    (0 °, 90 °) ==> (0 °, 75 °)
    (0 °, -90 °) ==> (0 °, -105 °)

संपादित करें: उत्तर को व्हॉबर द्वारा बहुत रचनात्मक टिप्पणी के लिए फिर से लिखा गया : रोटेशन मापदंडों के लिए उचित संकेतों का उपयोग करके मेट्रिसेस और विस्तार अब सिंक में हैं; मेट्रिसेस की परिभाषा में जोड़ा गया संदर्भ; उत्तर से हटाए गए एटैन (y / x); रूपांतरण के उदाहरण जोड़े।

EDIT 2: कार्टेशियन स्पेस में स्पष्ट ट्रांस्फ़ॉर्मेशन के बिना एक ही परिणाम के लिए अभिव्यक्ति प्राप्त करना संभव है। x, y, zपरिणाम में उनकी संगत भाव के साथ प्रतिस्थापित किया जा सकता है, और उसी के लिए दोहराया जा सकता है x', y'और z'। कुछ त्रिकोणमितीय पहचानों को लागू करने के बाद, निम्नलिखित एकल-चरण अभिव्यक्तियाँ उभरती हैं:

lat = arcsin(cos(ϑ) sin(lat') - cos(lon') sin(ϑ) cos(lat'))
lon = atan2(sin(lon'), tan(lat') sin(ϑ) + cos(lon') cos(ϑ)) - φ

1
विचार अच्छा है, लेकिन कुछ विवरणों को ठीक करने की आवश्यकता है। लोन = = -15, नहीं +15। मैट्रिक्स उत्पाद के विस्तार में सभी तीन लाइनें गलत हैं। ATan2 (या इसके समतुल्य) का उपयोग किया जाना चाहिए, जब x = y = 0 होने पर किसी भी उचित देशांतर को वापस करने के लिए संशोधित किया जाए। ध्यान दें कि क्योंकि x ^ 2 + y ^ 2 + z ^ 2 = 1, अंत में आपको केवल lat = Arcsin (z) मिलता है।
whuber

1
धन्यवाद। मैंने गणित को कम से कम सही करने के लिए उत्तर को ठीक किया। रोटेशन को अब CS परिभाषा में वर्णन से मेल खाना चाहिए, लेकिन बिना किसी उदाहरण के उनके चिन्ह के बारे में निश्चित होना कठिन है (दक्षिण ध्रुव की स्थिति के अलावा)।
mkadunc

बहुत बढ़िया! मुझे आश्चर्य है कि इस उत्तर को अधिक वोट नहीं मिल रहे हैं, क्योंकि यह उपयोगी और हार्ड-टू-मटेरियल प्रदान करता है।
whuber

सामग्री खोजने के लिए यह वास्तव में बहुत कठिन है, उत्तर के लिए बहुत बहुत धन्यवाद। मैंने इस सॉफ़्टवेयर कोड का उपयोग करके समाप्त कर दिया। रोटमेड ग्रिड से एक नियमित ग्रिड में बदलने के लिए .zmaw.de/projects/cdo । मेरा अनुमान है कि यह पहले निर्देशांक को इस उत्तर में बदल देता है और फिर आयताकार ग्रिड के बिंदुओं पर परिणाम देने के लिए उन्हें प्रक्षेपित करता है। हालांकि थोड़ी देर, मैं इसे भविष्य के संदर्भ के लिए छोड़ देता हूं।
skd

1
@alfe मैं बलोच क्षेत्रों का विशेषज्ञ नहीं हूं, लेकिन सिद्धांत मेरे द्वारा किए गए कार्यों के समान है, लेकिन 3 वास्तविक निर्देशांक के साथ कार्टेशियन अंतरिक्ष में परिवर्तित करने के बजाय, संकेत 2 काल्पनिक निर्देशांक वाले अंतरिक्ष में परिवर्तित करने का सुझाव देता है (जिसका अर्थ है 4 वास्तविक घटक) और वहां रोटेशन को निष्पादित करना। आपकी टिप्पणी से त्रस्त, मैंने सभी अभिव्यक्तियों को एक साथ रखा और एक परिणाम जोड़ा, जिसमें मध्यवर्ती कार्टेशियन कदम किसी भी अधिक स्पष्ट नहीं है।
mkadunc

6

अगर किसी को दिलचस्पी है तो मैंने फ़ाइल एक्सचेंज पर एक MATLAB स्क्रिप्ट साझा की है, जो नियमित रूप से लैट / लोन को घुमाए गए लैट / लोन और इसके विपरीत में बदल रही है : घुमाया गया ग्रिड ट्रांसफ़ॉर्म

function [grid_out] = rotated_grid_transform(grid_in, option, SP_coor)

lon = grid_in(:,1);
lat = grid_in(:,2);

lon = (lon*pi)/180; % Convert degrees to radians
lat = (lat*pi)/180;

SP_lon = SP_coor(1);
SP_lat = SP_coor(2);

theta = 90+SP_lat; % Rotation around y-axis
phi = SP_lon; % Rotation around z-axis

phi = (phi*pi)/180; % Convert degrees to radians
theta = (theta*pi)/180;

x = cos(lon).*cos(lat); % Convert from spherical to cartesian coordinates
y = sin(lon).*cos(lat);
z = sin(lat);

if option == 1 % Regular -> Rotated

    x_new = cos(theta).*cos(phi).*x + cos(theta).*sin(phi).*y + sin(theta).*z;
    y_new = -sin(phi).*x + cos(phi).*y;
    z_new = -sin(theta).*cos(phi).*x - sin(theta).*sin(phi).*y + cos(theta).*z;

elseif option == 2 % Rotated -> Regular

    phi = -phi;
    theta = -theta;

    x_new = cos(theta).*cos(phi).*x + sin(phi).*y + sin(theta).*cos(phi).*z;
    y_new = -cos(theta).*sin(phi).*x + cos(phi).*y - sin(theta).*sin(phi).*z;
    z_new = -sin(theta).*x + cos(theta).*z;

end

lon_new = atan2(y_new,x_new); % Convert cartesian back to spherical coordinates
lat_new = asin(z_new);

lon_new = (lon_new*180)/pi; % Convert radians back to degrees
lat_new = (lat_new*180)/pi;

grid_out = [lon_new lat_new];

बस लिंक मृत हो जाने पर आप भविष्य के पाठकों के लिए कोड डाल सकते हैं। धन्यवाद।
माइकल स्टिमसन

1
ज़रूर - कोड डाला।
सिमोंड

2

इस परिवर्तन की गणना proj सॉफ्टवेयर के साथ भी की जा सकती है (या तो कमांड-लाइन या प्रोग्रामेटिक रूप से उपयोग करके) जो कि proj ob_tranएक लेटलिन ट्रांसफॉर्मेशन पर लागू तिरछे अनुवाद ( ) को कॉल करता है । सेट किए जाने वाले प्रोजेक्शन पैरामीटर हैं:

  • o_lat_p = उत्तरी ध्रुव अक्षांश => 35 ° उदाहरण में
  • lon_0 = दक्षिणी ध्रुव देशांतर => -15 ° उदाहरण में
  • o_lon_p = 0

इसके अलावा, -m 57.2957795130823डिग्री में अनुमानित मूल्यों पर विचार करने के लिए (180 / pi) की आवश्यकता होती है।

Mkadunc द्वारा प्रस्तावित उदाहरणों को दोहराने से एक ही परिणाम मिलता है (ध्यान दें कि यहां ऑर्डर lon latनहीं है (lat,lon), cood दिशानिर्देश मानक इनपुट में टाइप किए गए हैं, आउटपुट द्वारा चिह्नित किया गया है =>):

invproj -f "=> %.6f" -m 57.2957795130823 +proj=ob_tran +o_proj=latlon +o_lon_p=0 +o_lat_p=35 +lon_0=-15
0 -90
=> -15.000000   => -35.000000
40 -90
=> -15.000000   => -35.000000
0 0
=> -15.000000   => 55.000000
90 0
=> 75.000000    => -0.000000
-90 0
=> -105.000000  => -0.000000

invprojकमांड का उपयोग "अनुमानित" (यानी घुमाया गया) से भौगोलिक के लिए निर्देशांक में परिवर्तित करने के लिए किया जाता है, जबकि projइसके विपरीत करने के लिए।


1

मैंने CORDEX डोमेन के आधार पर रोटेट से नॉन-रोटेट में समन्वित परिवर्तित करने के लिए एक asp.net पेज विकसित किया है।

यह उपरोक्त विधियों पर आधारित है। आप इसे इस लिंक में स्वतंत्र रूप से उपयोग कर सकते हैं:

मैन्युअल रूप से घुमाए गए lat / lon को नियमित lat / lon में बदलना


कॉर्डेक्स डेटा एक्सट्रैक्टर CORDEX NetCDF फ़ाइल से डेटा निकालने के लिए एक विंडोज़ डेस्कटॉप सॉफ्टवेयर है। कॉर्डेक्स डेटा एक्सट्रैक्टर को कोडों के पीछे सभी प्रक्रियाओं के कारण मदद फ़ाइल की आवश्यकता नहीं होती है और उपयोगकर्ता सिर्फ दिनांक, समन्वय और चर नाम दर्ज करता है। कृपया इस वीडियो को देखें: youtu.be/RmpZblZPXjI agrimetsoft.com/cordexDataExtractor.aspx
Sohrab kolsoomi ayask

1

https://www.mathworks.com/matlabcentral/fileexchange/43435-rotated-grid-transform

अजगर:

from math import *

def rotated_grid_transform(grid_in, option, SP_coor):
    lon = grid_in[0]
    lat = grid_in[1];

    lon = (lon*pi)/180; # Convert degrees to radians
    lat = (lat*pi)/180;

    SP_lon = SP_coor[0];
    SP_lat = SP_coor[1];

    theta = 90+SP_lat; # Rotation around y-axis
    phi = SP_lon; # Rotation around z-axis

    theta = (theta*pi)/180;
    phi = (phi*pi)/180; # Convert degrees to radians

    x = cos(lon)*cos(lat); # Convert from spherical to cartesian coordinates
    y = sin(lon)*cos(lat);
    z = sin(lat);

    if option == 1: # Regular -> Rotated

        x_new = cos(theta)*cos(phi)*x + cos(theta)*sin(phi)*y + sin(theta)*z;
        y_new = -sin(phi)*x + cos(phi)*y;
        z_new = -sin(theta)*cos(phi)*x - sin(theta)*sin(phi)*y + cos(theta)*z;

    else:  # Rotated -> Regular

        phi = -phi;
        theta = -theta;

        x_new = cos(theta)*cos(phi)*x + sin(phi)*y + sin(theta)*cos(phi)*z;
        y_new = -cos(theta)*sin(phi)*x + cos(phi)*y - sin(theta)*sin(phi)*z;
        z_new = -sin(theta)*x + cos(theta)*z;



    lon_new = atan2(y_new,x_new); # Convert cartesian back to spherical coordinates
    lat_new = asin(z_new);

    lon_new = (lon_new*180)/pi; # Convert radians back to degrees
    lat_new = (lat_new*180)/pi;

    print lon_new,lat_new;

rotated_grid_transform((0,0), 1, (0,30))

0

आप किस सॉफ्टवेयर का उपयोग कर रहे हैं? हर जीआईएस सॉफ्टवेयर में आपको वर्तमान कॉर्डिनेट सिस्टम / प्रोजेक्शन जानकारी दिखाने की सुविधा होगी। , जो आपके वर्तमान समन्वय प्रणाली का नाम प्राप्त करने में आपकी सहायता कर सकता है।

इसके अतिरिक्त, यदि आप आर्कगिस का उपयोग कर रहे हैं, तो आप पहले उपयोगकर्ता से सेटिंग आयात कर, दूसरे डेटासेट को फिर से प्रोजेक्ट करने के लिए प्रोजेक्ट टूल का उपयोग कर सकते हैं ।


2
दुर्भाग्य से मैं किसी भी सॉफ्टवेयर का उपयोग नहीं कर रहा हूँ। वे सिर्फ ग्रिड डेटासेट हैं और वे निम्नलिखित जानकारी के साथ आते हैं: - पहले एक के लिए: ecmwf.int/publications/manuals/d/gribapi/fm92/grib1/detail/… - दूसरे के लिए: ecmwf.int/publications/ नियमावली / d / gribapi / fm92 / grib1 / detail /…
skd

चूँकि रोटेशन का कोण 0 है, मुझे लगता है कि एक साधारण अनुवाद को दूसरे डेटासेट को पहले एक में संरेखित करना चाहिए, जैसे आपने कहा कि 15 से X और 35 को Y
उज्जवलेश्री

0

अजगर के लिए कार्टोपी मॉड्यूल में एक घुमा हुआ पोल सुविधा है। यह उन परिवर्तनों को समझता है जो यह लगता है।

https://scitools.org.uk/cartopy/docs/latest/gallery/rotated_pole.html#sphx-glr-gallery-rotated-pole-py

मुझे लगता है कि उपयोगी हो सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.