কোনও মাল্টিব্যান্ড রাস্টারটির জন্য নোটাটা সেট করা হচ্ছে?


10

আমার কাছে একটি আরজিবি অর্থোইমেজ রয়েছে যা এখানে নোটডাটার পরিবর্তে কালো অঞ্চল রয়েছে: এখানে চিত্র বর্ণনা লিখুন

আমি যখন সেটনুল সরঞ্জামটি ব্যবহার করি, এটি কালো অঞ্চলটি সরিয়ে দেয়, তবে এটি পরে এটি গ্রেস্কেল অর্থোয়েজে পরিণত করে, যা আমি চাই না।

এখানে চিত্র বর্ণনা লিখুন

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

অবশ্যই প্রতিটি ব্যান্ডে পৃথকভাবে নোডাটা সরঞ্জাম চালনা এবং তারপরে তিনটি ব্যান্ড একত্রিত করার বিকল্প রয়েছে, তবে আমার শর্ত থাকা দরকার যেখানে ব্যান্ড 1, ব্যান্ড 2, এবং ব্যান্ড 3 সমস্ত সমান 0 নোডাটা সেট করতে হবে। মডেলবিল্ডারে এটি করতে সক্ষম হওয়া আদর্শ হবে তবে আর্কপাই ব্যবহার করে এটি স্ক্রিপ্ট করাও ভাল।

আমি অ্যাডভান্সড লাইসেন্স সহ আরকিজিআইএস 10.2 ডেস্কটপ ব্যবহার করছি।


আপনি বলছেন যে আপনি "আর্কজিআইএস 10.2 প্রো" ব্যবহার করছেন তবে আর্কজিআইএস প্রো অ্যাপ্লিকেশনটি কেবল ডেস্কটপের জন্য আরকিজিআইএস 10.3 দিয়ে প্রকাশ করা হয়েছিল। আপনি কী ব্যবহার করছেন তা স্পষ্ট করতে আপনার প্রশ্নটি সম্পাদনা করতে পারেন , দয়া করে?
পলিজিও

আমার ক্ষমা। আমি অ্যাডভান্সড লাইসেন্স সহ ডেস্কটপের জন্য আরকিজিআইএস 10.2 ব্যবহার করছি।
অ্যালেক্স ম্যাকভিটি

এই প্রশ্ন জিজ্ঞাসা করার জন্য আপনাকে ধন্যবাদ। আমার কাছে ক্লায়েন্ট রয়েছে যারা সবসময় আমার কাছে ফিরে আসেন তাদের ভাবমূর্তিতে কোনও ভুল আছে।
ওয়েজ

উত্তর:


12

আপনি যা করতে চান তা হ'ল একটি স্ক্রিপ্টে রাস্টার প্রোপার্টি সেট করুন বা এটি আর্কিটেলগলগুলিতে ম্যানুয়ালি পরিবর্তন করুন। এটি কোনও নতুন রাস্টার তৈরি করতে পারে না এমনকি খুব বেশি সময়ও নেয় না।

অজগরে এটি কিছুটা জটিল:

import sys, os, arcpy

InFolder = sys.argv[1]
arcpy.env.workspace = InFolder

for Ras in arcpy.ListRasters():
    arcpy.AddMessage("Processing " + Ras)
    arcpy.SetRasterProperties_management(Ras,nodata="1 0;2 0;3 0")

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

import sys, os, arcpy

InFolder = sys.argv[1]
arcpy.env.workspace = InFolder

for Ras in arcpy.ListRasters():
    arcpy.AddMessage("Processing " + Ras)
    desc = arcpy.Describe(Ras)
    if desc.bandCount == 3:
        arcpy.SetRasterProperties_management(Ras,nodata="1 0;2 0;3 0")
    elif desc.bandCount == 4:
        arcpy.SetRasterProperties_management(Ras,nodata="1 0;2 0;3 0;4 0")
    elif desc.bandCount == 1:
        arcpy.SetRasterProperties_management(Ras,nodata="1 0")

আর্ককিগ্ল্যাজে, স্তরটিতে ডানদিকে ক্লিক করুন এবং বৈশিষ্ট্যে যান: এখানে চিত্র বর্ণনা লিখুন

সম্পাদনা বোতামটি চাপুন:

এখানে চিত্র বর্ণনা লিখুন

মানগুলি লিখুন তারপরে নোডাটা সম্পাদককে বরখাস্ত করতে ওকে চাপ দিন এবং পরিবর্তনটি কার্যকর করতে ঠিক আছে।

এখন রাস্টার আর্কম্যাপে কোনও কিছুই প্রদর্শন করবে না যেখানে ঘর মান 0,0,0 is


3

আপনি যদি রাস্টার বৈশিষ্ট্যগুলিতে যান এবং প্রতীকতত্ত্বটি যদি আরজিবি সংমিশ্রণ হিসাবে সেট করা থাকে (যা এটি মনে হয়) তবে আপনি প্রদর্শন ব্যাকগ্রাউন্ড মানগুলি (আরজিবি) বাক্সটি পরীক্ষা করতে পারেন এবং যা পছন্দ করেন তা ফাঁকা ব্যাকগ্রাউন্ড হিসাবে সেট করতে পারেন। সুতরাং কেবল 0 0 0 ব্যাকগ্রাউন্ড মান হিসাবে সেট করুন এবং আপনার ব্যবসায়ের হওয়া উচিত।


2

আমি মনে করি এটি অর্জনের সবচেয়ে সহজ উপায় হ'ল প্রথমে নাল কন্ডিশনের রাস্টার তৈরি করা, তারপরে প্রতিটি ব্যান্ডকে আলাদাভাবে নোডাটা মান নির্ধারণ করতে সেই রাস্টারটি ব্যবহার করুন।

নাল কন্ডিশন রাস্টার তৈরি করতে কন ফাংশনটি চালানোর চেষ্টা করুন ।

nullCondition = Con(((band1 == 0) & (band2 == 0) & (band3 == 0)), 1, 0)

তারপরে নাল ফাংশন সহ প্রতিটি ব্যান্ডকে নোডাটা মান নির্ধারণ করতে নাল কন্ডিশন রাস্টারটি ব্যবহার করুন । মডেল নির্মাতা বা অজগর দিয়ে আপনার এটি করা উচিত।


2

আমি বিশ্বাস করি যে আপনি গাছের বিভিন্ন পদ্ধতি ব্যবহার করতে পারেন যা তাত্ত্বিকভাবে কাজ করা উচিত। রাস্টার ক্যালকুলেটার যেখানে আপনি এই এক্সপ্রেশনটি ব্যবহার করতে পারেন SETNULL([raster] == value, [raster]) সেখানে পুনরায় শ্রেণিবদ্ধ করুন যেখানে আপনার কেবল যে মানটি চান তা পুনরায় ছড়িয়ে দিতে হবে। আর আরকিপি ব্যবহার করে আপনি এই স্ক্রিপ্টটি ব্যবহার করতে পারেন যা আমি এখানে পেয়েছি https://gis.stackexchange.com/a/24578/47790

import arcpy
from arcpy import env
from arcpy.sa import *
env.workspace = "C:/sapyexamples/data"
outSetNull = SetNull("elevation", "elevation", "VALUE = 9999")
outSetNull.save("C:/sapyexamples/output/outsetnull")
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.