জিওডিএল এবং পাইথন ব্যবহার করে জিওরফারেন্সিং রাস্টার?


10

আমি একজন রাস্টার ব্যবহার করে pythonএবং জিওরিফারেন্স করতে চাই GDAL। আমার বর্তমান পদ্ধতির কল gdal_translateএবং gdalwarpব্যবহার os.systemএবং স্থল নিয়ন্ত্রণ পয়েন্টগুলির একটি কুরুচিপূর্ণ তালিকা। আমি সত্যিই অভ্যন্তরীণভাবে এটি করার একটি উপায় চাই python

এটি আমি ব্যবহার করছি বর্তমান প্রক্রিয়া:

import os

os.system('gdal_translate -of GTiff -gcp 1251.92 414.538 -7.9164e+06 5.21094e+06 -gcp 865.827 107.699 -7.91651e+06 5.21104e+06  "inraster.tif" "outraster1.tif"')
os.system('gdalwarp -r bilinear -tps -co COMPRESS=NONE "outraster2.tif" "outraster3.tif"')

পূর্ববর্তী নেই প্রশ্ন এবং উত্তর 2012 থেকে যা যে gdal_translateআমদানির পর অ্যাক্সেস করা যেতে পারে gdal। অপ্রচলিত কিনা তা আমি নিশ্চিত নই, বা এটি ভুল কিনা তবে আমি যখন দৌড়ে from osgeo import gdalযাই তখন আমি gdal.gdal_translateকোনও বিকল্প হিসাবে দেখি না ।

আমি জানি না এটি বিদ্যমান কিনা তবে আমি পছন্দ করতাম যদি আমি অজগর উপায়ে রাস্টারদের অনুবাদ ও পুনরায় প্রচার করতে পারি। উদাহরণ স্বরূপ:

# translate
gcp_points = [(1251.92, 414.538), (-7.9164e+06, 5.21094e+06)]
gdal.gdal_translate(in_raster, gcp_points, out_raster1)

# warp
gdal.gdalwarp(out_raster1, out_raster2, 'bilinear', args*)

এ জাতীয় পন্থা কি সম্ভব?


1
gdal_translate এবং gdalwarp এবং অন্যান্য gdal ইউটিলিটিগুলি পাইথন প্যাকেজ / মডিউল নয়, এগুলি একক এক্সিকিউটেবল। এগুলিকে কল করার জন্য আপনি ওএসসিস্টেম বা (বেশি পছন্দ) সাবপ্রসেস ব্যবহার করতে পারেন op
ব্যবহারকারী2856

@ লুক কি তাই এই জিডিএল ইউটিলিটিগুলির সাথে যোগাযোগের কোনও উপায় নেই? আমি যদি অস্তিত্ব না থাকে তবে কীভাবে এগুলির জন্য পাইথন র‍্যাপার লিখতে হয় তা আবিষ্কার করতে আমি খুশি হব be
djq

আপনি gdal_translate এবং gdalwarp ইউটিলিটিগুলি যা কিছু করতে পারে প্রায় করতে জিডাল পাইথন এপিআই ব্যবহার করতে পারেন, এটি কিছুটা জটিল। Gdal.AutoCreateWarpedVRT এবং gdal ড্রাইভার.CreateCopy দেখুন।
ব্যবহারকারী 2856

উত্তর:


17

এখানে একটি উদাহরণ যা আপনি যা চান মোটামুটি করে। প্রধান পরামিতি geotransformহ'ল অ্যারে যা জিডাল কোনও রাস্টার অবস্থান (অবস্থান, পিক্সেল স্কেল, এবং স্কিউ) এবং epsgপ্রজেকশন কোডটি বর্ণনা করতে ব্যবহার করে। তার সাথে, নীচের কোডটি সঠিকভাবে রাস্টারকে জিওরফারেন্স করে এবং তার অভিক্ষেত্র নির্দিষ্ট করে।

আমি এগুলি খুব বেশি পরীক্ষা করি নি, তবে মনে হয় এটি আমার পক্ষে কাজ করে। আপনাকে অবশ্যই নিশ্চিত করতে হবে যে আমি যে স্থানাঙ্কগুলি রেখেছি সেগুলি সঠিক এবং সম্ভবত প্রক্ষেপণ এবং পিক্সেল স্কেল / আকার পরিবর্তন করবে। আশা করি এটা সাহায্য করবে.

from osgeo import gdal, osr

src_filename ='/path/to/source.tif'
dst_filename = '/path/to/destination.tif'

# Opens source dataset
src_ds = gdal.Open(src_filename)
format = "GTiff"
driver = gdal.GetDriverByName(format)

# Open destination dataset
dst_ds = driver.CreateCopy(dst_filename, src_ds, 0)

# Specify raster location through geotransform array
# (uperleftx, scalex, skewx, uperlefty, skewy, scaley)
# Scale = size of one pixel in units of raster projection
# this example below assumes 100x100
gt = [-7916400, 100, 0, 5210940, 0, -100]

# Set location
dst_ds.SetGeoTransform(gt)

# Get raster projection
epsg = 3857
srs = osr.SpatialReference()
srs.ImportFromEPSG(epsg)
dest_wkt = srs.ExportToWkt()

# Set projection
dst_ds.SetProjection(dest_wkt)

# Close files
dst_ds = None
src_ds = None

2
এটি ঠিক আছে তবে আপনি যদি আরও সঠিক হতে চান, ঘোরার ক্ষেত্রে, আপনাকে অ্যাফাইন ট্রান্সফর্মেশন ব্যবহার করতে হবে এবং এফাইন প্যাকেজটির সাথে সঠিক পরামিতিগুলি গণনা করতে হবে ( এখান থেকে ডাউনলোড করুন )। ব্যবহার: 'অ্যাফাইন.স্কেল (প্যারামিটার) * অ্যাফাইন.রোটেশন (অ্যাঙ্গেল)'। প্যারামিটার দুটি চিত্রের পিক্সেল অনুপাত থেকে, আপনি পিক্সেল আকার জানতে 'gdalinfo' বা পিআইএল ব্যবহার করতে পারেন, অ্যাঙ্গেল হল কোণ।
CaMa
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.