রাস্টার এর মধ্যে প্রদত্ত পিক্সেল মানের ন্যূনতম সীমাবদ্ধতা সন্ধান করছেন?


9

আমি ভাবছি যে কোনও নির্দিষ্ট মান সহ একজন রাস্টারকে সর্বনিম্ন সীমাবদ্ধতা সন্ধান করার কোনও উপায় আছে কিনা? আমি একটি বিশ্বব্যাপী চিত্র থেকে একটি রাস্টার ক্লিপ করেছি এবং পরিমাণটি নোডাটা অঞ্চল দিয়ে বিশ্বব্যাপী পরিধি হিসাবে সেট করা হয়েছে। আমি এই রাস্টার থেকে নোডাটা অঞ্চলটি সরাতে এবং নির্দিষ্ট মানের পিক্সেলযুক্ত অঞ্চলটিই ধরে রাখতে চাই। কিভাবে আমি এটি করতে পারব?

এখানে আমার উদাহরণটি রয়েছে: আমি মান = 1 (নীল অঞ্চল) এক্সট্রাক্ট করতে চাই এবং আরও প্রক্রিয়াজাতকরণের জন্য পুরো পৃথিবীর চেয়ে নীল অঞ্চলটির পরিমাণটি ব্যবহার করতে চাই।

নমুনা চিত্র


আপনি একটি নমুনা পোস্ট করতে পারেন?
হারুন

"আমি এই রাস্টারটির জন্য নাল সারি এবং কলামগুলি মুছতে চাই" " আসলে এটার অর্থ কি? কাঙ্ক্ষিত শেষ ফলাফল কী তা আমি বুঝতে পারি না।
blah238

"ন্যূনতম সীমাবদ্ধতা সীমা" দ্বারা আপনি কি আয়তক্ষেত্রের সীমাটি বা কোনও বহুভুজীয় পদচিহ্ন অনুসন্ধান করছেন যা ডেটা সহ চিত্রের ক্ষেত্রটি উপস্থাপন করে?
blah238

1
@Tomek, অপ করছে এটি পরিমাণ, না নিজে তৈরি করা আছে।
blah238

1
আক্ষরিক অর্থে যদি কোনও জিনিস নিখরচায় হয় তবে কিছু সফ্টওয়্যার এগুলি করার জন্য বিল্ট-ইন কমান্ড দেয়; দেখতে reference.wolfram.com/mathematica/ref/ImageCrop.html উদাহরণস্বরূপ।
whuber

উত্তর:


6

যদি আমি প্রশ্নটি সঠিকভাবে বুঝতে পেরেছি তবে মনে হচ্ছে আপনি ন্যূনতম মানগুলির ন্যূনতম বাউন্ডিং বাক্সটি জানতে চান Mআমি আপনি রাস্টারকে বহুভুজতে রূপান্তর করতে পারেন, আপনার আগ্রহী বহুভুজগুলি নির্বাচন করুন এবং তারপরে এগুলি আবার একটি রাস্টারতে রূপান্তর করতে পারেন। তারপরে আপনি সেই বৈশিষ্ট্যগুলির মানগুলি দেখতে পারেন যা আপনাকে ন্যূনতম বাউন্ডিং বাক্স দেয়।


1
আর্কজিআইএস রাস্টার প্রক্রিয়াজাতকরণ কার্যপ্রবাহের সীমাবদ্ধতার পরে সম্ভবত এটিই সর্বোত্তম পন্থা।
blah238

আমি এটা ঠিক করেছি। কোন স্বয়ংক্রিয় উপায় আছে? আমি মনে করি রাস্টার থেকে বহুভুজ অ্যালগরিদমের রাস্টারটির সর্বনিম্ন বাউন্ডিং বাক্সটি বের করার জন্য একটি পদক্ষেপ রয়েছে।
দেখা

আপনি কি অজগর সমাধানের পরে?
ডাঙ্গো

8

কৌশলটি হ'ল ডেটাগুলির সীমাবদ্ধতা গণনা করা। সম্ভবত এটির দ্রুততম, সবচেয়ে প্রাকৃতিক এবং সর্বাধিক সাধারণ উপায় হ'ল জোনাল সংক্ষিপ্তসারগুলির সাথে: জোনটির জন্য সমস্ত ননডাটা কোষ ব্যবহার করে, জোনাল নূন্যতম এবং এক্স এবং ওয়াই সমন্বয়যুক্ত গ্রিডের সর্বাধিক পরিধি সরবরাহ করবে।

ইএসআরআই এই গণনাগুলি যেভাবে করা যেতে পারে সেগুলি পরিবর্তন করে চলেছে; উদাহরণস্বরূপ, স্থানাঙ্ক গ্রিডগুলির জন্য অন্তর্নির্মিত এক্সপ্রেশনগুলি আর্কজিআইএস 8 দিয়ে বাদ দেওয়া হয়েছিল এবং প্রত্যাবর্তন হয়নি বলে মনে হয়। শুধু মজাদার জন্য, এখানে দ্রুত, সাধারণ গণনার একটি সেট রয়েছে যা কাজটিই করবে না তা যাই হোক না কেন।

  1. গ্রিডটিকে নিজের মতো করে সমান করে একক জোনে রূপান্তর করুন

    "আমার গ্রিড" == "আমার গ্রিড"

  2. মান 1 দিয়ে ধ্রুবক গ্রিড প্রবাহিত করে কলাম ইনডেক্স গ্রিড তৈরি করুন (সূচকগুলি 0 দিয়ে শুরু হবে) যদি ইচ্ছা হয় তবে এটি সেলসাইজ দিয়ে গুণ করুন এবং একটি এক্স-কো-অর্ডিনেট গ্রিড পাওয়ার জন্য উত্সের x- স্থানাঙ্ক যুক্ত করুন " এক্স "(নীচে দেখানো হয়েছে)

  3. একইভাবে, 64 মান সহ ধ্রুবক গ্রিড প্রবাহিত করে একটি সারি সূচক গ্রিড ( এবং তারপরে একটি y- সমন্বিত গ্রিড "Y") তৈরি করুন।

  4. জোনাল মিনিট এবং সর্বাধিক "এক্স" এবং "ওয়াই" গণনা করতে পদক্ষেপ (1) থেকে জোন গ্রিডটি ব্যবহার করুন : আপনার এখন পছন্দসই পরিমাণ রয়েছে।

চূড়ান্ত চিত্র

(জোনাল পরিসংখ্যানের দুটি সারণীতে যেমন পরিমাণটি দেখানো হয়েছে, এই চিত্রটিতে একটি আয়তক্ষেত্রাকার রূপরেখা দ্বারা চিত্রিত হয়েছে। গ্রিড "I" পদক্ষেপে প্রাপ্ত জোন গ্রিড (1)।)

আরও যেতে, আপনাকে এই চারটি সংখ্যা তাদের আউটপুট সারণী থেকে বের করতে হবে এবং বিশ্লেষণের সীমাটি সীমাবদ্ধ করতে এগুলি ব্যবহার করতে হবে। আসল গ্রিড অনুলিপি করা জায়গায় সীমাবদ্ধ বিশ্লেষণের পরিমাণ সহ, টাস্কটি সম্পূর্ণ করে।


8

পাইথন টুলবক্স (.পিটি) হিসাবে আর্কজিআইএস 10.1+ এর জন্য @ হুবার পদ্ধতির একটি সংস্করণ এখানে ।

import arcpy

class Toolbox(object):
    def __init__(self):
        """Define the toolbox (the name of the toolbox is the name of the
        .pyt file)."""
        self.label = "Raster Toolbox"
        self.alias = ""

        # List of tool classes associated with this toolbox
        self.tools = [ClipNoData]


class ClipNoData(object):
    def __init__(self):
        """Clip raster extent to the data that have values"""
        self.label = "Clip NoData"
        self.description = "Clip raster extent to the data that have values. "
        self.description += "Method by Bill Huber - https://gis.stackexchange.com/a/55150/2856"

        self.canRunInBackground = False

    def getParameterInfo(self):
        """Define parameter definitions"""
        params = []

        # First parameter
        params+=[arcpy.Parameter(
            displayName="Input Raster",
            name="in_raster",
            datatype='GPRasterLayer',
            parameterType="Required",
            direction="Input")
        ]

        # Second parameter
        params+=[arcpy.Parameter(
            displayName="Output Raster",
            name="out_raster",
            datatype="DERasterDataset",
            parameterType="Required",
            direction="Output")
        ]

        return params

    def isLicensed(self):
        """Set whether tool is licensed to execute."""
        return arcpy.CheckExtension('spatial')==u'Available'

    def execute(self, parameters, messages):
        """See https://gis.stackexchange.com/a/55150/2856
           ##Code comments paraphrased from @whubers GIS StackExchange answer
        """
        try:
            #Setup
            arcpy.CheckOutExtension('spatial')
            from arcpy.sa import *
            in_raster = parameters[0].valueAsText
            out_raster = parameters[1].valueAsText

            dsc=arcpy.Describe(in_raster)
            xmin=dsc.extent.XMin
            ymin=dsc.extent.YMin
            mx=dsc.meanCellWidth
            my=dsc.meanCellHeight
            arcpy.env.extent=in_raster
            arcpy.env.cellSize=in_raster
            arcpy.AddMessage(out_raster)

            ## 1. Convert the grid into a single zone by equating it with itself
            arcpy.AddMessage(r'1. Convert the grid into a single zone by equating it with itself...')
            zones = Raster(in_raster) == Raster(in_raster)

            ## 2. Create a column index grid by flow-accumulating a constant grid
            ##    with value 1. (The indexes will start with 0.) Multiply this by
            ##    the cellsize and add the x-coordinate of the origin to obtain
            ##    an x-coordinate grid.
            arcpy.AddMessage(r'Create a constant grid...')
            const = CreateConstantRaster(1)

            arcpy.AddMessage(r'2. Create an x-coordinate grid...')
            xmap = (FlowAccumulation(const)) * mx + xmin

            ## 3. Similarly, create a y-coordinate grid by flow-accumulating a
            ##    constant grid with value 64.
            arcpy.AddMessage(r'3. Create a y-coordinate grid...')
            ymap = (FlowAccumulation(const * 64)) * my + ymin

            ## 4. Use the zone grid from step (1) to compute the zonal min and
            ##    max of "X" and "Y"
            arcpy.AddMessage(r'4. Use the zone grid from step (1) to compute the zonal min and max of "X" and "Y"...')

            xminmax=ZonalStatisticsAsTable(zones, "value", xmap,r"IN_MEMORY\xrange", "NODATA", "MIN_MAX")
            xmin,xmax=arcpy.da.SearchCursor(r"IN_MEMORY\xrange", ["MIN","MAX"]).next()

            yminmax=ZonalStatisticsAsTable(zones, "value", ymap,r"IN_MEMORY\yrange", "NODATA", "MIN_MAX")
            ymin,ymax=arcpy.da.SearchCursor(r"IN_MEMORY\yrange", ["MIN","MAX"]).next()

            arcpy.Delete_management(r"IN_MEMORY\xrange")
            arcpy.Delete_management(r"IN_MEMORY\yrange")

            # Write out the reduced raster
            arcpy.env.extent = arcpy.Extent(xmin,ymin,xmax+mx,ymax+my)
            output = Raster(in_raster) * 1
            output.save(out_raster)

        except:raise
        finally:arcpy.CheckInExtension('spatial')

খুব সুন্দর লুক। স্ব অন্তর্ভুক্ত, চলমান, ইন-মেমরি ব্যবহার করে এবং বুটে ভাল মন্তব্য করেছে। এটি কাজ করার জন্য আমাকে ব্যাকগ্রাউন্ড প্রসেসিং ( জিওপ্রসেসিং> বিকল্পসমূহ> ... ) বন্ধ করতে হয়েছিল।
ম্যাট উইলকি

1
আমি স্ক্রিপ্ট আপডেট করেছি এবং ক্যানআরব্যাকগ্রাউন্ড = মিথ্যা সেট করেছি। আমি লক্ষ করব যে ওয়ার্কস্পেস / স্ক্র্যাচওয়ার্কস্ফেসের পরিবেশগুলি স্থানীয় ফোল্ডারে (এফজিডিবি নয়) পরিবর্তিত করার মতো আমি খুঁজে পেয়েছি যখন আমি তাদের ডিফল্ট হিসাবে রেখেছি (যেমন <নেটওয়ার্ক ব্যবহারকারী প্রোফাইল> \ ডিফল্ট.gdb) স্ক্রিপ্টটি 9 মিনিট নিয়েছে !!! 250x250 সেল গ্রিডে চালাতে। একটি স্থানীয় এফজিডিবিতে পরিবর্তন করা এটি 9 সেকেন্ড এবং একটি স্থানীয় ফোল্ডারে 1-2 সেকেন্ডে নিয়েছে ...
ব্যবহারকারীর 858

স্থানীয় ফোল্ডারগুলি সম্পর্কে ভাল বক্তব্য এবং দ্রুত পটভূমি স্থির করার জন্য ধন্যবাদ (আমি যার যার কাছে পাঠিয়েছি তার জন্য নির্দেশাবলী লেখার চেয়ে অনেক ভাল)। এটি বিটবাকেট / গিথুব / জিকোড / ইত্যাদি উপর নিক্ষেপ করার উপযুক্ত হতে পারে।
ম্যাট উইলকি

+1 এই অবদানের জন্য ধন্যবাদ, লুক! আমি আমার উত্তরে রেখে যাওয়া (বরং বৃহত্তর) ফাঁক পূরণ করার জন্য আমি আপনাকে প্রশংসা করি।
হোয়বার

4

আমি একটি জিডিএল এবং ন্যালি ভিত্তিক সমাধান তৈরি করেছি। এটি রাস্টার ম্যাট্রিক্সকে সারি এবং কলামগুলিতে বিভক্ত করে এবং খালি সারি / কলামটি ফেলে দেয়। এই বাস্তবায়নে "খালি" 1 এর চেয়ে কম কিছু এবং কেবল একক ব্যান্ড রাস্টাররা দায়ী।

(আমি যেমন বুঝতে পেরেছি যে এই স্ক্যানলাইন পদ্ধতিটি কেবল নোডাটা "কলারস" সহ চিত্রগুলির জন্য উপযুক্ত your যদি আপনার ডেটা নালাগুলির সমুদ্রের দ্বীপ হয়, তবে দ্বীপপুঞ্জের মধ্যবর্তী স্থানটিও পাশাপাশি হ্রাস পাবে এবং সমস্ত কিছু একসাথে বিভক্ত করে এবং জিওরফারেন্সিংকে পুরোপুরি গণ্ডগোল করবে) ।)

ব্যবসায়ের অংশগুলি (মাংস কাটা দরকার, এখন যেমন কাজ করবে না):

    #read raster into a numpy array
    data = np.array(gdal.Open(src_raster).ReadAsArray())
    #scan for data
    non_empty_columns = np.where(data.max(axis=0)>0)[0]
    non_empty_rows = np.where(data.max(axis=1)>0)[0]
        # assumes data is any value greater than zero
    crop_box = (min(non_empty_rows), max(non_empty_rows),
        min(non_empty_columns), max(non_empty_columns))

    # retrieve source geo reference info
    georef = raster.GetGeoTransform()
    xmin, ymax = georef[0], georef[3]
    xcell, ycell = georef[1], georef[5]

    # Calculate cropped geo referencing
    new_xmin = xmin + (xcell * crop_box[0]) + xcell
    new_ymax = ymax + (ycell * crop_box[2]) - ycell
    cropped_transform = new_xmin, xcell, 0.0, new_ymax, 0.0, ycell

    # crop
    new_data = data[crop_box[0]:crop_box[1]+1, crop_box[2]:crop_box[3]+1]

    # write to disk
    band = out_raster.GetRasterBand(1)
    band.WriteArray(new_data)
    band.FlushCache()
    out_raster = None

একটি পূর্ণ স্ক্রিপ্টে:

import os
import sys
import numpy as np
from osgeo import gdal

if len(sys.argv) < 2:
    print '\n{} [infile] [outfile]'.format(os.path.basename(sys.argv[0]))
    sys.exit(1)

src_raster = sys.argv[1]
out_raster = sys.argv[2]

def main(src_raster):
    raster = gdal.Open(src_raster)

    # Read georeferencing, oriented from top-left
    # ref:GDAL Tutorial, Getting Dataset Information
    georef = raster.GetGeoTransform()
    print '\nSource raster (geo units):'
    xmin, ymax = georef[0], georef[3]
    xcell, ycell = georef[1], georef[5]
    cols, rows = raster.RasterYSize, raster.RasterXSize
    print '  Origin (top left): {:10}, {:10}'.format(xmin, ymax)
    print '  Pixel size (x,-y): {:10}, {:10}'.format(xcell, ycell)
    print '  Columns, rows    : {:10}, {:10}'.format(cols, rows)

    # Transfer to numpy and scan for data
    # oriented from bottom-left
    data = np.array(raster.ReadAsArray())
    non_empty_columns = np.where(data.max(axis=0)>0)[0]
    non_empty_rows = np.where(data.max(axis=1)>0)[0]
    crop_box = (min(non_empty_rows), max(non_empty_rows),
        min(non_empty_columns), max(non_empty_columns))

    # Calculate cropped geo referencing
    new_xmin = xmin + (xcell * crop_box[0]) + xcell
    new_ymax = ymax + (ycell * crop_box[2]) - ycell
    cropped_transform = new_xmin, xcell, 0.0, new_ymax, 0.0, ycell

    # crop
    new_data = data[crop_box[0]:crop_box[1]+1, crop_box[2]:crop_box[3]+1]

    new_rows, new_cols = new_data.shape # note: inverted relative to geo units
    #print cropped_transform

    print '\nCrop box (pixel units):', crop_box
    print '  Stripped columns : {:10}'.format(cols - new_cols)
    print '  Stripped rows    : {:10}'.format(rows - new_rows)

    print '\nCropped raster (geo units):'
    print '  Origin (top left): {:10}, {:10}'.format(new_xmin, new_ymax)
    print '  Columns, rows    : {:10}, {:10}'.format(new_cols, new_rows)

    raster = None
    return new_data, cropped_transform


def write_raster(template, array, transform, filename):
    '''Create a new raster from an array.

        template = raster dataset to copy projection info from
        array = numpy array of a raster
        transform = geo referencing (x,y origin and pixel dimensions)
        filename = path to output image (will be overwritten)
    '''
    template = gdal.Open(template)
    driver = template.GetDriver()
    rows,cols = array.shape
    out_raster = driver.Create(filename, cols, rows, gdal.GDT_Byte)
    out_raster.SetGeoTransform(transform)
    out_raster.SetProjection(template.GetProjection())
    band = out_raster.GetRasterBand(1)
    band.WriteArray(array)
    band.FlushCache()
    out_raster = None
    template = None

if __name__ == '__main__':
    cropped_raster, cropped_transform = main(src_raster)
    write_raster(src_raster, cropped_raster, cropped_transform, out_raster)

স্ক্রিপ্ট হয় আমার কোড লুকোবার জায়গা লিংক একটু ঘুরে 404 মৃগয়া যায়, GitHub থেকে; এই ফোল্ডারগুলি কিছু পুনর্গঠনের জন্য পাকা।


1
এটি সত্যিই বড় ডেটাসেটের জন্য কাজ করবে না। আমি একটিMemoryError Source raster (geo units): Origin (top left): 2519950.0001220703, 5520150.00012207 Pixel size (x,-y): 100.0, -100.0 Columns, rows : 42000, 43200 Traceback (most recent call last): File "D:/11202067_COACCH/local_checkout/crop_raster.py", line 72, in <module> cropped_raster, cropped_transform = main(src_raster) File "D:/11202067_COACCH/local_checkout/crop_raster.py", line 22, in main data = np.array(raster.ReadAsArray()) MemoryError
ব্যবহারকারী 32882

2

এর সমস্ত বিশ্লেষণাত্মক শক্তির জন্য, আর্কজিআইএসের বেসিক রাস্টার ম্যানিপুলেশনগুলির অভাব রয়েছে যা আপনি জিম্পের মতো traditionalতিহ্যবাহী ডেস্কটপ ইমেজ সম্পাদকদের সাথে পেতে পারেন । এটি প্রত্যাশা করে যে আপনি যদি আউটপুট এক্সটেন্ডমেন্ট এনভায়রনমেন্ট সেটিংটি ম্যানুয়ালি ওভাররাইড না করেন তবে আপনি নিজের ইনপুট রাস্টার হিসাবে আপনার আউটপুট রাস্টার হিসাবে একই বিশ্লেষণের পরিমাণটি ব্যবহার করতে চান want যেহেতু আপনি ঠিক এটিই সন্ধান করছেন, সেট করা নেই, তাই জিনিসগুলি করার আরকিজিআইএস উপায়টি হয়ে আসছে।

আমার সর্বাত্মক প্রচেষ্টা সত্ত্বেও, এবং প্রোগ্রামিংয়ের অবলম্বন না করেই, আমি আপনার পছন্দসই উপসেটটির সীমাটি পাওয়ার কোনও উপায় খুঁজে পেলাম না (রাস্টার-টু-ভেক্টর রূপান্তর ছাড়াই যা গণনামূলকভাবে অপ্রয়োজনীয়)।

পরিবর্তে, আমি রঙ সরঞ্জাম দ্বারা সিলেক্ট ব্যবহার করে নীল অঞ্চলটি নির্বাচন করতে জিআইএমপি ব্যবহার করেছি এবং তারপরে নির্বাচনটি উল্টিয়েছি, বাকী পিক্সেলগুলি সরিয়ে ফেলতে মুছুন, চাপটি আবার উল্টিয়েছিলেন, চিত্রটি নির্বাচনের ক্ষেত্রে ক্রপ করেছেন এবং অবশেষে এটিকে আবার রফতানি করে পাঠিয়েছি পিএনজি। জিআইএমপি এটি 1-বিট গভীরতার চিত্র হিসাবে সংরক্ষণ করেছে। ফলাফল নীচে:

আউটপুট

অবশ্যই, কারণ আপনার নমুনা ইমেজের স্থানিক রেফারেন্স উপাদানটির অভাব ছিল এবং জিআইএমপি স্থানিকভাবে সচেতন নয়, আউটপুট চিত্রটি আপনার নমুনা ইনপুট হিসাবে প্রায় দরকারী useful আপনি করতে হবে georeference এটি একটি স্থানিক বিশ্লেষণ ব্যবহারের হতে জন্য এটি।


আসলে, এই অপারেশন ব্যবহৃত স্থানিক বিশ্লেষক পূর্ববর্তী সংস্করণে উপস্থিত সহজ করা: জোনাল সর্বোচ্চ এবং দুই মিনিট গ্রিড (X এবং Y) তুল্য, জোন হিসাবে বৈশিষ্ট্য ব্যবহার করে, পরিমাণ ঠিক দেব। (ভাল, আপনি চারটি দিকের অর্ধেক সেলসাইজ করে এটি প্রসারিত করতে চাইতে পারেন)) আরকজিআইএস 10-এ, একটি সমন্বিত গ্রিড তৈরি করতে আপনার সৃজনশীল হতে হবে (বা পাইথন ব্যবহার করতে হবে)। নির্বিশেষে, পুরো জিনিসটি কেবল গ্রিড অপারেশন এবং কোনও ম্যানুয়াল হস্তক্ষেপ ব্যবহার করে SA এর সম্পূর্ণরূপে করা যেতে পারে।
whuber

@ হুবুহু আমি আপনার সমাধানটি অন্য কোথাও দেখেছি, তবে এখনও আমি নিশ্চিত না যে আমি কীভাবে আপনার পদ্ধতিটি প্রয়োগ করতে পারি। আপনি কি আমাকে এই সম্পর্কে আরও কিছু বিস্তারিত দেখাতে পারেন?
দেখা

@ সাইন এই সাইটের একটি দ্রুত অনুসন্ধান gis.stackexchange.com/a/13467 এ পদ্ধতির একটি অ্যাকাউন্ট খুঁজে পাবে
whuber

1

এখানে সাগা জিআইএস ব্যবহার করার একটি সম্ভাবনা রয়েছে: http://permalink.gmane.org/gmane.comp.gis.gdal.devel/33021

সাগা জিআইএস-এ একটি "ক্রপ টু ডেটা" মডিউল রয়েছে (গ্রিড সরঞ্জাম মডিউল লাইব্রেরিতে), যা কার্য সম্পাদন করে।

তবে এর জন্য আপনাকে জিডিএল আমদানি মডিউলটি দিয়ে আপনার জিওটিফ আমদানি করতে হবে, এটি সাগায় প্রক্রিয়া করতে হবে এবং শেষ পর্যন্ত এটি জিডিএল রফতানি মডিউলের সাথে আবার জিওটিফ হিসাবে রফতানি করতে হবে।

কেবল আর্কজিআইএস জিপি সরঞ্জাম ব্যবহার করার আরেকটি সম্ভাবনা হ'ল রাস্টার থেকে টিআইএন ব্যবহার করে আপনার রাস্টার থেকে একটি টিআইএন তৈরি করা , টিআইএন ডোমেন ব্যবহার করে এর সীমানাটি গণনা করা এবং আপনার রাস্টারকে বাউন্ডারি দিয়ে ক্লিপ করুন (বা তার খামটি বহুগুণে বৈশিষ্ট্যযুক্ত খাম ব্যবহার করে )।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.