मैं आर्कगिस 10.1 का उपयोग कर रहा हूं, और दो preexisting चूहों के आधार पर एक नया रेखापुंज बनाना चाहता हूं। 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")
समस्या यह है कि यह स्थानिक संदर्भ और सेल आकार को भी स्ट्रिप्स करता है। मुझे लगा कि इसे आर्कपी.नव करना है, लेकिन मैं उन्हें इनपुट रेखापुंज के आधार पर कैसे सेट करूं? मेरे द्वारा इसका निर्धारण नहीं किया जा सकता।
ल्यूक का जवाब लेते हुए, यह मेरा अस्थायी समाधान है।
ल्यूक के समाधान के दोनों ने स्थानिक संदर्भ, सीमा और कोशिका के आकार को सही ढंग से निर्धारित किया है। लेकिन पहली विधि ने सरणी में डेटा को सही ढंग से नहीं लिया और आउटपुट रैस्टर को हर जगह नोडटा से भर दिया गया। उनका दूसरा तरीका ज्यादातर काम करता है, लेकिन जहां मेरे पास नोडाटा का बड़ा क्षेत्र है, यह ब्लॉक जीरो और 255s से भरता है। यह कैसे मैं nodata कोशिकाओं को संभाला है के साथ क्या करना है, और मुझे यकीन नहीं है कि मैं यह कैसे कर रहा था (हालांकि एक और होना चाहिए)। मैं किस बारे में बात कर रहा हूं, के चित्र शामिल थे।
#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)
परिणाम दिखाने वाली छवि। मैं दोनों मामले नोडोडा कोशिकाओं को पीला दिखाया गया है।
ल्यूक की दूसरी विधि
मेरी अस्थायी विधि