আমি আরকিজিআইএস 10.1 ব্যবহার করছি, এবং দুটি প্রিফিক্সিং রাস্টারের উপর ভিত্তি করে একটি নতুন রাস্টার তৈরি করতে চাই। RasterToNumPyArray একটি ভাল উদাহরণ যা আমি খাপ খাওয়ানো করতে চান হয়েছে।
import arcpy
import numpy
myArray = arcpy.RasterToNumPyArray('C:/data/inRaster')
myArraySum = myArray.sum(1)
myArraySum.shape = (myArray.shape[0],1)
myArrayPerc = (myArray * 1.0)/ myArraySum
newRaster = arcpy.NumPyArrayToRaster(myArrayPerc)
newRaster.save("C:/output/fgdb.gdb/PercentRaster")
সমস্যাটি এটি স্থানিক রেফারেন্স এবং কোষের আকারও বাদ দেয় stri আমি বুঝতে পেরেছিলাম এটি arcpy.env করতে হবে, তবে আমি কীভাবে ইনপুট রাস্টারটির উপর ভিত্তি করে সেগুলি সেট করব? আমি এটা বুঝতে পারি না।
লুকের উত্তর গ্রহণ করা, এটি আমার অভ্যাসগত সমাধান।
লুকের উভয় সমাধানই স্থানিক উল্লেখ, ব্যাপ্তি এবং ঘরের আকার সঠিকভাবে সেট করে। তবে প্রথম পদ্ধতিটি অ্যারেতে সঠিকভাবে ডেটা বহন করে না এবং আউটপুট রাস্টার সর্বত্র নোডাটা দিয়ে পূর্ণ হয়। তার দ্বিতীয় পদ্ধতিটি বেশিরভাগ ক্ষেত্রেই কাজ করে তবে আমার যেখানে নোডাটার বড় অঞ্চল রয়েছে এটি ব্লক শূন্য এবং 255s দিয়ে পূর্ণ। আমি কীভাবে নোডাটা কক্ষগুলি পরিচালনা করেছি তার সাথে এটি করার দরকার হতে পারে এবং আমি কীভাবে এটি করছিলাম তা সম্পর্কে পুরোপুরি নিশ্চিত নই (যদিও অন্য কিউ হওয়া উচিত)। আমি যা বলছি তার চিত্রগুলি আমি অন্তর্ভুক্ত করেছি।
#Setting the raster properties directly
import arcpy
import numpy
inRaster0='C:/workspace/test0.tif'
inRaster1='C:/workspace/test1.tif'
outRaster='C:/workspace/test2.tif'
dsc=arcpy.Describe(inRaster0)
sr=dsc.SpatialReference
ext=dsc.Extent
ll=arcpy.Point(ext.XMin,ext.YMin)
# sorry that i modify calculation from my original Q.
# This is what I really wanted to do, taking two uint8 rasters, calculate
# the ratio, express the results as percentage and then save it as uint8 raster.
tmp = [ np.ma.masked_greater(arcpy.RasterToNumPyArray(_), 100) for _ in inRaster0, inRaster1]
tmp = [ np.ma.masked_array(_, dtype=np.float32) for _ in tmp]
tmp = ((tmp[1] ) / tmp[0] ) * 100
tmp = np.ma.array(tmp, dtype=np.uint8)
# i actually am not sure how to properly carry the nodata back to raster...
# but that's another Q
tmp = np.ma.filled(tmp, 255)
# without this, nodata cell may be filled with zero or 255?
arcpy.env.outCoordinateSystem = sr
newRaster = arcpy.NumPyArrayToRaster(myArrayPerc,ll,dsc.meanCellWidth,dsc.meanCellHeight)
newRaster.save(outRaster)
চিত্র দেখাচ্ছে ফলাফল। আমি উভয় ক্ষেত্রেই নোডাটা কক্ষগুলি হলুদ দেখানো হয়।
লুক এর দ্বিতীয় পদ্ধতি
আমার অস্থায়ী পদ্ধতি