আমি কীভাবে অ্যাফাইন স্থানাঙ্কগুলিকে ল্যাট / এলএনজে রূপান্তর করব?


14

আমি জিআইএসে অত্যন্ত নতুন।

আমি gdalএকটি ল্যান্ডউজ / ল্যান্ডকভার মানচিত্রে পড়ার জন্য ব্যবহার করছি এবং আমাকে নির্দিষ্ট ল্যান্ড কভার প্রকারের ল্যাড / এলএনজি বাছাই করতে হবে অন্য একটি ডেটাসেটে যা সূচক / ল্যাংগেই প্রকাশ করা হয় into দুর্ভাগ্যক্রমে, আমি জিওট্রান্সফর্ম থেকে বিশেষত নীচে originXএবং originYনীচে আমাকে দেওয়া x এবং y স্থানাঙ্কগুলির ফর্মটি বুঝতে পারি না :

geotransform = dataset.GetGeoTransform()
originX = geotransform[0]
originY = geotransform[3]

এই মানগুলি মুদ্রণ করা আমাকে পছন্দ মত স্থানাঙ্ক দেয় (447466.693808, 4952570.40529)। এগুলি কীভাবে মূল অক্ষাংশ এবং দ্রাঘিমাংশের সাথে সম্পর্কিত?

সম্পাদনা:

এখানে একটি সাধারণ অজগর উদাহরণ যা আমি যা পেয়েছিলাম তা পেয়েছিলাম:

srs = osr.SpatialReference()
srs.ImportFromWkt(dataset.GetProjection())

srsLatLong = srs.CloneGeogCS()
ct = osr.CoordinateTransformation(srs,srsLatLong)
print ct.TransformPoint(originX,originY)

থেকে চুরি হয়েছে: tolatlong.py


দেখে মনে হচ্ছে আপনার ডেটা প্রজেক্ট করা আছে (উদা। ইউটিএম) এবং দীর্ঘ / ল্যাটের স্থানাঙ্কগুলিতে এটি "আনপ্রোজেক্ট" করতে প্রজেকশনটি কী তা আপনাকে জানতে হবে।

@ ড্যান ধন্যবাদ, সুতরাং আমি জানি যে আমি একটিটির মাধ্যমে প্রজেকশনটি পেতে পারি dataset.GetProjectionRef()এবং জানতে পারি যে আমি "ইউটিএম জোন 10" ব্যবহার করছি, তবে কী? আমি "আনপ্রসেক্ট" এর মতো পদ্ধতির জন্য প্রায় ঘুরে বেড়াচ্ছি তবে শূন্য হয়ে আসছি।
ধনী

দশমিক ডিগ্রিতে ডেটা প্রত্যাশিত না হওয়ায় আনপ্রজেক্ট শব্দটি (উদ্ধৃতিতে) ব্যবহারের জন্য দুঃখিত, তবে আপনি যদি কোনও প্রদত্ত অভিক্ষিপণ থেকে দশমিক ডিগ্রীতে ফিরে প্রজেক্টড ডেটা পেতে চান, তবে আপনাকে "উদ্ধৃতিগুলি নোট করুন" "প্রকল্প" করতে হবে এটি কোনও ভৌগলিক স্থানাঙ্ক ব্যবস্থায় ফিরে আসে, দশমিক ডিগ্রি ডেটা ডেটা।

2
এই (নতুন) থ্রেডটি একটি সুস্পষ্ট উদাহরণ এবং অন্য একটি সমাধান সরবরাহ করে: gis.stackexchange.com/questions/8430/…
হুবুহু

উত্তর:


10

gdal_translate আপনার ডেটা যে কোনও প্রক্ষেপণ থেকে অন্য যে কোনও ক্ষেত্রে তা পুনঃপ্রক্রিয়া করবে (এই ক্ষেত্রে আপনি ইপিএসজি চান: 4326) ব্যবহার করে:

gdal_translate -a_srs epsg:4326 srcfile new_file 

অথবা আপনি পয়েন্টগুলি রূপান্তর করতে gdaltrasfor ব্যবহার করতে পারেন (এবং আমি নিশ্চিত যে আপনি পাইথন থেকেও এটি অ্যাক্সেস করতে পারেন (?))


(+1) কেন জানি এটিকে নিম্নচালিত করা হয়েছিল, আয়ান, কারণ এটি আমার কাছে একরকম ক্রিয়াকলাপের মতো দেখায় যেমন অ্যাফাইন রূপান্তর প্রয়োগের পরে এটির প্রয়োজন হবে be
whuber

gdal_translate আপনার যেমনভাবে কাজ করবে না (বা এটি কেবল ডেটাগুলিতে EPSG: 4326 নির্ধারণ করবে), আপনাকে ডেটাটি এমন কিছু দিয়ে সজ্জিত করতে হবে: gdalwarp -s_srs EPSG: 32610 -t_srs EPSG: 4326 src ডেস্ক যদি ডেটাতে ইতিমধ্যে প্রোজ মেটাডেটা রয়েছে, আপনি -s_srs প্যারামিটারটি খনন করতে পারেন।
MerseyViking

আমি এই কি পরে হতে পারে। "Epsg: 4326" কী বিশ্বব্যাপী ল্যাট / এলএনজে রূপান্তরিত? আমি মনে করি যে আমি এমন কিছু ক্লাস দেখি যেখানে আমি একটি প্রক্ষেপণ সরবরাহ করতে পারি, আমি "WGS: 84" ভাবছিলাম, তবে আমি পার্থক্যটি জানি না।
ধনী

1
@ রিচ আপনার প্রশ্নে "স্থানাঙ্ক-সিস্টেম" ট্যাগটিতে ক্লিক করুন , ফলস্বরূপ পৃষ্ঠাটি ভোটের মাধ্যমে বাছাই করুন এবং পড়া শুরু করুন। আপনার অনেক প্রশ্নের কয়েক মিনিটের মধ্যে উত্তর দেওয়া হবে।
whuber

7

জিওট্রান্সফর্মটি https://gdal.org/user/raster_data_model.html এ নথিভুক্ত করা হয়েছে । ধারণাটি হ'ল আপনি ডেটাসেট থেকে সরাসরি (x, y) স্থানাঙ্ক গ্রহণ করেন, এর সাথে (ইউ, ভি) পেতে একটি রৈখিক রূপান্তর প্রয়োগ করুন

u = a*x + b*y
v = c*x + d*y

(আপনি এটিকে একটি রৈখিক রূপান্তরকরণের সংজ্ঞা হিসাবে গ্রহণ করতে পারেন ), তারপরে আপনি জিওট্রান্সফর্ম [0] কে ইউ এবং জিওটান্সফর্ম [3] কে ভিতে যুক্ত করে উত্সটি স্থানান্তর করুন That এটি (এক্স, ওয়াই) এর "অ্যাফাইন রূপান্তর" দেয়। এটি আসলে ঘোরানো, স্কেল পরিবর্তন করা, সম্ভবত কিছু স্কিউ ত্রুটির জন্য কিছুটা সংশোধন করা এবং পরিচিত স্থানাঙ্ক ব্যবস্থার সাথে মেলে তথ্য-নির্দিষ্ট স্থানাঙ্ক (এক্স, ওয়াই) পুনরায় সন্ধান করা। ফলাফলটি অনুমানিত স্থানাঙ্ক তৈরি করার কথা এর সহজ অর্থ হ'ল এখানে একটি গাণিতিক পদ্ধতি রয়েছে (দ্রাঘিমাংশ, অক্ষাংশ) গ্রহণ করা এবং তাদেরকে জ্ঞাত স্থানাঙ্কে পরিণত করা: এটিকে "প্রক্ষেপণ" বলা হয়। "আনপ্রজেক্টিং" বিপরীত করছে; সুতরাং, যদি আপনি জানেন যে কোন অভিক্ষেপ প্রয়োজন, আপনি এটি affine রূপান্তরিত (x, y) স্থানাঙ্কগুলিতে প্রয়োগ করুন অক্ষাংশ এবং দ্রাঘিমাংশ পেতে।

যাইহোক, ধ্রুবকগুলির মান, বি, সি, ডি ভূ-ট্রান্সফর্ম অ্যারেতে 1, 2, 4 এবং 5 টি এন্ট্রি দিয়ে দেয়।


1
আপনার প্রদত্ত লিঙ্কটির ভূ-ট্রান্সফর্ম বিভাগটি পড়েছি, তবে আমি মনে করি না এটিই আমি পরে করছি। দুঃখিত, আমি যদি অবসন্ন হই, তবে এটি কীভাবে x এবং y সূচকগুলি (0 থেকে XSize বা YSize) প্রজেক্টেড স্থানাঙ্কগুলিতে প্রজেক্ট করবেন তা বর্ণনা করে না? আমি কৌতূহলী যে আপনি কীভাবে অনুমানিত স্থানাঙ্কগুলি অক্ষাংশ এবং দ্রাঘিমাতে অনুবাদ করেন। একটি সাধারণ উদাহরণ হিসাবে, জিওট্রান্সফর্মটি রাস্টারটির উপরের বাম দিকের কোণার এক্স / ওয়াই উত্সটিকে অনুমিত স্থানাঙ্কগুলিতে (447466.693808, 4952570.40529) সংজ্ঞায়িত করে। কীভাবে আমি এই স্থানাঙ্কগুলিকে লেট / এলএনজিতে ফিরিয়ে আনব (লেট: 44, এলএনজি: -122 এর মতো)।
ধনী

@ রিচ নো, সেই লিঙ্কটি কোনও প্রক্ষেপণের বর্ণনা দেয় না। এটি কেবল দুটি মানচিত্রের মধ্যে স্থানাঙ্কের পরিবর্তনের বর্ণনা দেয়, বিশ্ব এবং মানচিত্রের মধ্যে নয়। Unprojection অ্যাফিন (Lat, LON) মধ্যে স্থানাঙ্ক এর রুপান্তর সক্রিয়। আপনি এটির জন্য কোড লিখতে চান না যদি আপনি এটি সহায়তা করতে পারেন! আন-প্রজেকশনটি প্রায়শই সর্বদা প্রজেকশন কী প্রয়োজন তা সনাক্ত করার জন্য এবং আপনার জন্য কাজটি করার জন্য সঠিক সফ্টওয়্যারকে কল করার বিষয়টি (যেমন @ iant এর জবাবে পরামর্শ দেওয়া হয়েছে) is
whuber

লিঙ্কটি নষ্ট হয়ে গেছে। @ আমি কী ঠিক জানি যে অ্যাফাইন ট্রান্সফর্মটি (জিডিএল এর গেটজিও ট্রান্সফর্ম থেকে) পিক্সেল এবং সিআরএসের স্থানাঙ্কের মধ্যে রূপান্তর? সুতরাং, উদাহরণস্বরূপ, যদি ডেটাটি জিডিএ প্রক্ষেপণে থাকে তবে পয়েন্টগুলি ডাব্লুজিএস /৪ / ল্যাট / দীর্ঘ থেকে জিডিএএক্সএক্সে উদাহরণস্বরূপ CoordianteTransfor ব্যবহার করে এবং তারপরে জিও ট্রান্সফর্ম ব্যবহার করে পিক্সেলগুলিতে রূপান্তর করতে হবে? এই দ্বি-পদক্ষেপ প্রক্রিয়া এমন একটি বিষয় যা আমাকে প্রচুর পরিমাণে ছুঁড়ে ফেলেছে এবং আমার সন্দেহ হয় যে ওপি'র সমস্যাও ঘটছে। জারা ট্রান্সফর্ম মানগুলি স্ক্রু করে এমন xarray / রাস্টেরিওতে এমন একটি বাগ উপস্থিত হতে দেখাতে সহায়তা করে নি: github.com/pydata/xarray/issues/3185
naught101

@ না পেয়ে আমি নতুন ইউআরএল খুঁজে পেয়েছি এবং আমার পোস্ট আপডেট করেছি।
শুশুক

0

আপনি নিম্নলিখিত ব্যবহার করতে পারেন:

import gdal, numpy as n
def coord(file):
    padfTransform = file.GetGeoTransform()
    indices = n.indices(file.ReadAsArray().shape)
    xp = padfTransform[0] + indices[1]*padfTransform[1] + indices[1]*padfTransform[2]   
    yp = padfTransform[3] + indices[0]*padfTransform[4] + indices[0]*padfTransform[5]  
    return xp,yp
file = gdal.Open('Yourfile.tif') # A GeoTiff file
x,y = coord(file)

Coord সমস্ত পিক্সেলের দ্রাঘিমাংশ (x) এবং অক্ষাংশ (y) প্রদান করবে। মনে রাখবেন যে স্থানাঙ্কগুলি একটি পিক্সেলের বাম কোণে


এটি ইন্ডিক্স (1] * প্যাডফ্রান্সফর্ম [1] + সূচকগুলি [0] * প্যাড ট্রান্সফর্ম [2] এবং yp এর বিপরীতে হওয়া উচিত নয়?
সিএমসিডিগ্রাগনকাই
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.