180 मेरिडियन काटने के साथ 0 360 से -180 180 तक रेखापुंज को कैसे दोहराएं


31

मेरे पास एक भू-रेखीय रेखापुंज छवि है जिसमें 0 से 360 तक longtitudes के साथ एक समन्वय प्रणाली है। छवि का क्षैतिज केंद्र 180 देशांतर है। नीचे चित्र देखें:

यहाँ छवि विवरण दर्ज करें

मैं इसे EPSG में बदलना चाहता हूं: -180 180 देशांतर रेंज के साथ 4326 SRS। और मैं चाहता हूं कि छवि का केंद्र ग्रीनविच मेरिडियन (0) पर हो। मुझे लगता है कि यह srs बहुत व्यापक रूप से उपयोग किया जाता है। मुझे उम्मीद है कि परिणाम इस तरह दिखेगा:

यहाँ छवि विवरण दर्ज करें

इसलिए मैं एक गालवडर्प कमांड का इस्तेमाल करता हूं, ताकि वे निरस्त कर सकें:

gdalwarp -s_srs '+proj=latlong +datum=WGS84 +pm=180dW' -t_srs EPSG:4326 test_col.tif test_4326.tif

लेकिन मुझे केवल बड़े आयामों (अधिक पिक्सेल) और ईपीएसजी: 4326 मेटाडेटा के साथ एक टफ मिलता है। छवि पहले जैसी ही दिखती है। लेकिन मुझे उम्मीद है कि यह गोलार्ध की अदला-बदली करेगा।

सवाल है - मैं एक छवि को सख्त कैसे कर सकता हूं -180 180 EPSG: 4326 0 देशांतर में केंद्र के साथ?

यह मेरी प्रारंभिक फ़ाइल का gdalinfo है:

Origin = (-0.102272598067084,89.946211604095552)
Pixel Size = (0.204545196134167,-0.204423208191126)
Metadata:
  AREA_OR_POINT=Area
Image Structure Metadata:
  INTERLEAVE=BAND
Corner Coordinates:
Upper Left  (  -0.1022726,  89.9462116) (  0d 6' 8.18"W, 89d56'46.36"N)
Lower Left  (  -0.1022726, -89.9462116) (  0d 6' 8.18"W, 89d56'46.36"S)
Upper Right (     359.897,      89.946) (359d53'50.18"E, 89d56'46.36"N)
Lower Right (     359.897,     -89.946) (359d53'50.18"E, 89d56'46.36"S)
Center      ( 179.8975000,  -0.0000000) (179d53'51.00"E,  0d 0' 0.00"S)

यह gdalwarp के बाद gdalinfo है

Origin = (-180.102727401932952,89.946211604095552)
Pixel Size = (0.091397622896436,-0.091420837939082)
Metadata:
  AREA_OR_POINT=Area
Image Structure Metadata:
  INTERLEAVE=PIXEL
Corner Coordinates:
Upper Left  (-180.1027274,  89.9462116) (180d 6' 9.82"W, 89d56'46.36"N)
Lower Left  (-180.1027274, -89.9699975) (180d 6' 9.82"W, 89d58'11.99"S)
Upper Right ( 179.8211116,  89.9462116) (179d49'16.00"E, 89d56'46.36"N)
Lower Right ( 179.8211116, -89.9699975) (179d49'16.00"E, 89d58'11.99"S)
Center      (  -0.1408079,  -0.0118929) (  0d 8'26.91"W,  0d 0'42.81"S)

विभिन्न संकल्पों के बारे में, क्या आपने -tr xres yresध्वज जोड़ने की कोशिश की है ?
निकलता है

जवाबों:


21

आप लक्ष्य समन्वय विकल्प का उपयोग कर स्पष्ट रूप से आउटपुट समन्वय रेंज को सेट कर सकते हैं कुछ इस तरह:

  gdalwarp -t_srs WGS84 ~/0_360.tif 180.tif  -wo SOURCE_EXTRA=1000 \
           --config CENTER_LONG 0

"SOURCE_EXTRA = 1000" ताना विकल्प पर भी ध्यान दें। स्रोत आयत गणना को फिर से शुरू करते समय देशांतर रुकावट के चारों ओर भ्रमित हो जाएगा और कुछ इमेजरी खो देगा। यह विकल्प कहता है कि कुछ अतिरिक्त में खींचो। इसके बिना आपको प्राइम मेरिडियन के पास डेटा गैप दिखाई देगा।

पुनश्च। 180dW का एक प्रमुख मध्याह्न रेखा सेट करना जैसा कि आपने किया था एक अच्छा विचार IMHO नहीं है।


1
हम्म, --config CENTER_LONG 0कुछ नहीं करता है, परिणाम एक ही रेखापुंज है। मुझे यहाँ कुछ भी याद आता है? GDAL संस्करण 2.2.3 पर चल रहा है।
जुराजब

6

मूल रूप से आपको रेखापुंज को दो भागों में काटने और एक नए ऑफसेट / स्केल के साथ एक साथ वापस करने की आवश्यकता है।

यहाँ एक उदाहरण है कि ऐसा कैसे करें कि [-180,180] से [0,360] तक gdal_translate और VRT ड्राइवर: http://trac.osgeo.org/gdal/wiki/UserDocs/RasterProcTutorial

"5 मिनट ट्यूटोरियल" के लिए नीचे स्कैन करें और विवरण "वर्चुअल फाइल्स" के तहत हैं। उदाहरण के लिए सूट को संशोधित करना सरल होना चाहिए।


2

यह पैकेज के rotateसाथ फ़ंक्शन का उपयोग करके कोड की एक पंक्ति के साथ आर में किया जा सकता है raster

library(raster)
your_raster <- raster("path/to/raster.tif")
rotated_raster <- rotate(your_raster)

1

यदि आप QGIS में रेखापुंज देखना चाहते हैं, तो आप पैरामीटर + lon_wrap = 180 के साथ एक कस्टम प्रक्षेपण सेट कर सकते हैं।

इस बारे में मेरी समझ यह है कि, डिफ़ॉल्ट रूप से, proj4 0 -> 360 से -180 -> 180 से अक्षांशों को लपेटता है। + lon_wrap = 180 प्रभावी रूप से इस रैपिंग को रद्द कर देगा, और पश्चिमी गोलार्ध में 180 और 360 के बीच अक्षांशों को प्रदर्शित करेगा।

विकल्प + ओवर को रैपिंग को पूरी तरह से अक्षम करना चाहिए, लेकिन - कम से कम मेरे मामले में - जब उस विकल्प का उपयोग किया गया था तो रैस्टर ठीक से प्रदर्शित नहीं हुआ था।

अधिक जानकारी के लिए http://proj4.org/parameters.html#lon-wrap-over-longitude-wrapping देखें ।


0

यहाँ एक फ़ंक्शन है जिसे मैंने 0-900 से -180-180 तक जावास्क्रिप्ट का उपयोग करके ग्रिड मानों के एक एकल मंद सरणी को पुन: उत्पन्न करने के लिए बनाया है। मुझे उम्मीद है कि यह किसी की मदद हो सकती है।

  let xstart = 180 / xres //xres is the number of values per 1 degree
  for (let y = 0; y < data.height; y++) {
    let index = (y * data.width) + 1,
    start = index + xstart,
    end = index + data.width
    array.splice(index, 0, ...array.splice(start, (end - start)))
  }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.