জিডিএল ব্যবহার করে ভেক্টর স্তর সহ রাস্টার ক্লিপিং


26

আমি অসডিয়ো ইনস্টলার ব্যবহার করে জিডিএল ইনস্টল করেছি। আমি কীভাবে কোনও ভেক্টর স্তর সহ কোনও রাস্টার স্তর ক্লিপ করব? এমন কোনও জিডিএল এপিআই উপলব্ধ আছে যা আমাকে এটির জন্য সহায়তা করতে পারে? আমি পাইথন ব্যবহার করছি।

উত্তর:


13

আমি নিশ্চিত gdal API সম্পর্কে, আছে আছি void* GDALWarpOptions::hCutlineমধ্যে ওয়ার্প বিকল্প থেকে উল্লেখিত ওয়ার্প এপিআই টিউটোরিয়াল , কিন্তু কোন স্পষ্ট উদাহরণ। আপনি কি নিশ্চিত যে আপনার একটি প্রোগ্রামিক উত্তর প্রয়োজন? কমান্ড লাইন ইউটিলিটিগুলি বাক্সের বাইরে এটি করতে পারে:

  1. বহু মাত্রার আগ্রহের ক্লিপিংয়ের ক্ষেত্র যুক্ত একটি শেফফাইল তৈরি করুন
  2. ogrinfoক্লিপিং শেফফিলের পরিমাণ নির্ধারণ করতে ব্যবহার করুন
  3. gdal_translateআকার আকৃতির ক্লিপ ব্যবহার করুন
  4. পরামিতি gdalwarpসঙ্গে ব্যবহার করুন-cutline

2 এবং 3 পদক্ষেপগুলি অপ্টিমাইজেশনের জন্য, আপনি কেবলমাত্র দিয়ে যেতে পারেন gdalwarp -cutline ...

দেখুন GDAL বহুভুজ ব্যবহার করে ক্লিপিং rasters লিনাক্স ভিত্তিক সমাধান সব এক লিপিতে আচ্ছন্ন জন্য Linfinity থেকে। মাইকেল কোরির টিউটোরিয়ালে ম্যাপনিকের জন্য হিল্ড শেড তৈরির আরেকটি কাটলাইন উদাহরণ দেখা যায় ।


ম্যাট, আপনি trac.osgeo.org/gdal/ticket/1599 মনে করতে পারেন দেখে মনে হচ্ছে কাটলাইন এটি পূরণ করে
মাইক টি

10

জিওপ্যাটিয়াল পাইথনের জোয়েল ল্যাওহেডের শেপফাইল ব্যবহার করে ক্লিপ রাস্টারটিতে সম্পূর্ণ অজগর উদাহরণ রয়েছে , একটি ভাল লিখিত টিউটোরিয়াল। আপনাকে পাইথন ইমেজ লাইব্রেরি (পিআইএল) ইনস্টল করতে হবে যা ওসজিও 4 ডাব্লুতে অন্তর্ভুক্ত নেই (যার জন্য ইনস্টল প্রোগ্রামটি কাজ করতে আপনাকে উইন্ডোজ রেজিস্ট্রিতে o4w পাইথন যুক্ত করতে হবে)।


10

দেখে মনে হচ্ছে এই বিষয়টি সর্বদা ফিরে আসছে। আমি নিজেই জানতাম না যে জিডিএল> 1.8 এত উন্নত এটি ইতিমধ্যে আপনাকে সেই কাজটি করার জন্য ন্যায্য কমান্ড লাইন সরবরাহ করে।

মাইক টুউজের মন্তব্যটি বেশ কার্যকর তবে আপনি উদাহরণস্বরূপ এটি করতে পারেন:

gdalwarp -of GTiff -cutline DATA/area_of_interest.shp -cl area_of_interest  -crop_to_cutline DATA/PCE_in_gw.asc  data_masked7.tiff 

আপনি এই কমান্ডটি একটি অজগর স্ক্রিপ্টের মধ্যে দুর্দান্ত সাবপ্রসেসি মডিউল দিয়ে মোড়া করতে পারেন

একটি জিনিস যা আমার জন্য সত্যই সমস্যাযুক্ত তা হ'ল আমাকে সেই সমস্যার একটি ন্যূনতম সমাধান সরবরাহ করা দরকার, যার অর্থ যতটা সম্ভব সহজ এবং বহিরাগত নির্ভরতার প্রয়োজন নেই। জোয়েল লাউহেডের টিউটোরিয়ালে পাইথন ইমেজিং লাইব্রেরির ব্যবহার ঝরঝরে, তবে আমি নিম্নলিখিত সমাধানটি নিয়ে এসেছি: নম্পি মুখোশযুক্ত অ্যারে ব্যবহার করে।
এটি আরও ভাল কিনা তা আমি জানি না, তবে এটিই আমি জানতাম (3 বছর আগে ...) এর চেয়ে বেশি।
মূলত আমি মূল রাস্টারের অভ্যন্তরে একটি বৈধ ডেটা অঞ্চল তৈরি করেছি (উদাহরণস্বরূপ আউটপুট রাস্টারগুলির পরিমাণ যেখানে একই) তবে আমি রাস্টারটিকে আরও ছোট (যেমন-ক্রপ_ টু_কুটলাইন) তৈরি করার ধারণাটি পছন্দ করেছি, তাই আমি world2Pixelজোয়েল লাউহেড থেকে গ্রহণ করেছি । এখানে আমার নিজস্ব সমাধান:

def RasterClipper():
    craster = MaskRaster()
    contraster2 = 'PCE_in_gw.aux'
    craster.reader("DATA/"+contraster2.replace('aux','asc'))
    xres, yres = craster.extent[1], craster.extent[1]
    craster.fillrasterpoints(xres, yres)
    craster.getareaofinterest("DATA/area_of_interest.shp")
    minX, maxX=craster.new_extent [0]-5,craster.new_extent[1]+5
    minY, maxY= craster.new_extent [2]-5,craster.new_extent[3]+5
    ulX, ulY=world2Pixel(craster.extent, minX, maxY)
    lrX, lrY=world2Pixel(craster.extent, maxX, minY)
    craster.getmask(craster.corners)
    craster.mask=np.logical_not(craster.mask)
    craster.mask.resize(craster.Yrange.size,craster.Xrange.size)
    # choose all data points inside the square boundaries of the AOI,
    # replace all other points with NULL
    craster.cdata= np.choose(np.flipud(craster.mask), (craster.data, -9999))
    # resise the data set to be the size of the squared polygon
    craster.ccdata=craster.cdata[ulY:lrY, ulX:lrX]
    craster.writer("ccdata2m.asc",craster.ccdata, (minX+xres*.5, maxY+yres*.5), 10,10,Flip=False)
    # in second step we rechoose all the data points which are inside the
    # bounding vertices of AOI
    # need to re-define our raster points
    craster.xllcorner, craster.yllcorner = minX, minY
    craster.xurcorner, craster.yurcorner = maxX, maxY
    craster.fillrasterpoints(10,10)
    craster.getmask(craster.boundingvertices) # just a wrapper around matplotlib.nxutils.points_in_poly
    craster.data=craster.ccdata
    craster.clip2(new_extent_polygon=craster.boundingvertices)
    craster.data = np.ma.MaskedArray(craster.data, mask=craster.mask)
    craster.data = np.ma.filled(craster.data, fill_value=-9999)
    # write the raster to disk
    craster.writer("ccdata2m_clipped.asc",craster.data, (minX+xres*.5, maxY+yres*.5), 10,10,Flip=False)

class MaskRasterএবং এর পদ্ধতিগুলির সম্পূর্ণ বিবরণের জন্য , আমার প্রকল্পের গিথুব দেখুন

এই কোডটি ব্যবহার করে আপনাকে এখনও জিডিএল ব্যবহার করতে হবে। তবে, পরিকল্পনাটি আমি ভবিষ্যতে খাঁটি পাইথনটি যেখানে ব্যবহার করতে পারি সেখানে ব্যবহার করার কথা, কারণ আমার সফ্টওয়্যারটির অভিযুক্ত শ্রোতাদের অনেক বেশি নির্ভরতা নিয়ে সমস্যা (আমি সফটওয়্যারটি বিকাশ করতে ডেবিয়ান ব্যবহার করি এবং ক্লায়েন্টরা উইন্ডোজ ... ... ব্যবহার করে)।


আপনার দেওয়া কমান্ড-লাইনের উদাহরণটি আমি পছন্দ করি তবে আপনি কী ব্যাখ্যা করতে পারবেন যে-ক্রপ_ টু_কুটলাইন আর্গুমেন্টটি করে? আমি নিশ্চিত নই যে এর উদ্দেশ্যটি ক্লিপিং শেফফাইলটি কী-কেটেলাইন দ্বারা নির্দিষ্ট করা হয়েছে।
হেন্দ্র

1
-কুটলাইন বিকল্পটি রাস্টারটিকে বহুভুজ স্তরটির অভ্যন্তর সীমানা বাক্সে ক্লিপ করে। উদাহরণস্বরূপ, এটি প্রসারিতগুলিতে ছোট হলে আউটপুট রাস্টার আরও ছোট হবে। এটি ছাড়া আউটপুট রাস্টারটি মূল হিসাবে একই আকারের হবে তবে আপনার আগ্রহের ক্ষেত্রের বাইরে সমস্ত পয়েন্টে NULL সহ।
Oz123
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.