मैंने कुछ समय पहले ऐसा किया था, हालांकि मेरा समाधान GDAL का उपयोग कर रहा है (इसलिए, यह सिर्फ आर्कजी के लिए नहीं है)। मुझे लगता है कि आप आर्कजीआईएस 10 में एक रेखापुंज से एक न्यूपे सरणी प्राप्त कर सकते हैं, लेकिन मुझे यकीन नहीं है। NumPy सरल और शक्तिशाली सरणी अनुक्रमण, जैसे argsort
और अन्य की आपूर्ति करता है। यह उदाहरण NODATA को संभालता नहीं है या निर्देशांक को अनुमानित रूप से lat / long में परिवर्तित करता है (लेकिन यह GDAL के साथ उपलब्ध osgeo.osr के साथ करना मुश्किल नहीं है)
import numpy as np
from osgeo import gdal
# Open raster file, and get GeoTransform
rast_src = gdal.Open(rast_fname)
rast_gt = rast_src.GetGeoTransform()
def get_xy(r, c):
'''Get (x, y) raster centre coordinate at row, column'''
x0, dx, rx, y0, ry, dy = rast_gt
return(x0 + r*dx + dx/2.0, y0 + c*dy + dy/2.0)
# Get first raster band
rast_band = rast_src.GetRasterBand(1)
# Retrieve as NumPy array to do the serious work
rast = rast_band.ReadAsArray()
# Sort raster pixels from highest to lowest
sorted_ind = rast.argsort(axis=None)[::-1]
# Show highest top 10 values
for ind in sorted_ind[:10]:
# Get row, column for index
r, c = np.unravel_index(ind, rast.shape)
# Get [projected] X and Y coordinates
x, y = get_xy(r, c)
print('[%3i, %3i] (%.3f, %.3f) = %.3f'%
(r, c, x, y, rast[r, c]))
मेरी परीक्षण रेखापुंज फ़ाइल के लिए निम्नलिखित दिखाता है:
[467, 169] (2813700.000, 6353100.000) = 844.538
[467, 168] (2813700.000, 6353200.000) = 841.067
[469, 168] (2813900.000, 6353200.000) = 840.705
[468, 168] (2813800.000, 6353200.000) = 840.192
[470, 167] (2814000.000, 6353300.000) = 837.063
[468, 169] (2813800.000, 6353100.000) = 837.063
[482, 166] (2815200.000, 6353400.000) = 833.038
[469, 167] (2813900.000, 6353300.000) = 832.825
[451, 181] (2812100.000, 6351900.000) = 828.064
[469, 169] (2813900.000, 6353100.000) = 827.514