আরকজিআইএস ডেস্কটপ দিয়ে পাইথনে অ্যারে হিসাবে রাস্টার চিত্রটি পাওয়া যাচ্ছে?


10

পাইথন এবং আরকজিআইএস ৯.৩ দিয়ে কাজ শুরু করার সময়, আমি ধরে নিয়েছিলাম যে রাস্টার চিত্রটি পাইথন অ্যারেতে আনার সহজ উপায় থাকবে যাতে আমি এটিকে অন্য রাস্টার চিত্র হিসাবে সংরক্ষণ করার আগে এটিকে হেরফের করতে পারি। তবে আমি কীভাবে এটি করব তা খুঁজে বের করার মতো মনে হচ্ছে না।

যদি এটি সম্ভব হয়, তবে কিভাবে?

উত্তর:


6

আমি মনে করি না এটি আর্কজিআইএস <= 9.3.1 এর মাধ্যমে সম্ভব

আমি এই জাতীয় কাজের জন্য ওপেন সোর্স জিডিএল এপিআই ব্যবহার করি।


গ্রেট! আমি অতীতে জিডিএল ইউটিলিটি প্রোগ্রামগুলি ব্যবহার করেছি, তবে এটি করার জন্য এগুলি ব্যবহার করার কথা কখনও ভাবেননি।
রবিন্টউ

3
আমি সম্মত, gdal পাইথন মডিউল আপনাকে সহজেই একটি রাস্টার পড়তে এবং ডেপিকে একটি নম্পি অ্যারেতে ফেলে দিতে দেয়। ক্রিস গারার্ডের জিআইএস-এ ওপেনসোর্স পাইথন ব্যবহার করার একটি কোর্স রয়েছে, এটি এই বিষয়টিকে কভার করে। আপনি এটি এখানে পেতে পারেন: gis.usu.edu/~chrisg/python/2008
ডেভিডএফ

10

http://help.arcgis.com/en/arcgisdesktop/10.0/help/index.html#/RasterToNumPyArray/000v0000012z000000/

আর্কজিআইএস 10 এর মধ্যে নামপ্য অ্যারেগুলি লেখার এবং পড়ার ক্ষমতা রয়েছে।


ধন্যবাদ! দুঃখের বিষয়, আমি এই মুহুর্তে আর্কজিআইএস 9.3 এ আছি - 9.3-এ এটি করার কোনও উপায় আছে কিনা তা কি আপনি জানেন?
রবিন্টউ

6

ফমার্ক ইতিমধ্যে প্রশ্নের উত্তর দিয়েছিল, তবে এখানে কয়েকটি উদাহরণ ওএসজিইও পাইথন কোড যা আমি একটি নম্পপি অ্যারেতে একটি রাস্টার (টিফ) পড়ার জন্য লিখেছিলাম, ডেটাটি পুনরায় ছড়িয়ে ছিটিয়ে একটি নতুন টিআইফ ফাইলে লিখি। আপনি যে কোনও জিডিএল সমর্থিত ফর্ম্যাটটি পড়তে বা লিখতে পারেন।

"""
Example of raster reclassification using OpenSource Geo Python

"""
import numpy, sys
from osgeo import gdal
from osgeo.gdalconst import *


# register all of the GDAL drivers
gdal.AllRegister()

# open the image
inDs = gdal.Open("c:/workshop/examples/raster_reclass/data/cropland_40.tif")
if inDs is None:
  print 'Could not open image file'
  sys.exit(1)

# read in the crop data and get info about it
band1 = inDs.GetRasterBand(1)
rows = inDs.RasterYSize
cols = inDs.RasterXSize

cropData = band1.ReadAsArray(0,0,cols,rows)

listAg = [1,5,6,22,23,24,41,42,28,37]
listNotAg = [111,195,141,181,121,122,190,62]

# create the output image
driver = inDs.GetDriver()
#print driver
outDs = driver.Create("c:/workshop/examples/raster_reclass/output/reclass_40.tif", cols, rows, 1, GDT_Int32)
if outDs is None:
  print 'Could not create reclass_40.tif'
  sys.exit(1)

outBand = outDs.GetRasterBand(1)
outData = numpy.zeros((rows,cols), numpy.int16)


for i in range(0, rows):
  for j in range(0, cols):

    if cropData[i,j] in listAg:
        outData[i,j] = 100
    elif cropData[i,j] in listNotAg:
        outData[i,j] = -100
    else:
        outData[i,j] = 0


# write the data
outBand.WriteArray(outData, 0, 0)

# flush data to disk, set the NoData value and calculate stats
outBand.FlushCache()
outBand.SetNoDataValue(-99)

# georeference the image and set the projection
outDs.SetGeoTransform(inDs.GetGeoTransform())
outDs.SetProjection(inDs.GetProjection())

del outData

2

পাইথন থেকে আরকঅবজেক্টগুলি অ্যাক্সেস করছেন? পাইথনের সাথে আরকোবজেক্টগুলির সংহতকরণ নিয়ে আলোচনা করে।

সম্ভবত এই নমুনাটির কোডটি এমনভাবে গ্রহণ করা যেতে পারে যাতে এটি অজগর থেকে কল করা যায়।

আমি নিশ্চিত না যে অ্যারে বাইরেফকে অজগর থেকে ফিরে যাওয়ার কোনও উপায় আছে কিনা। যদি থাকে, তবে আইপিক্সেলব্লক P পিক্সেলডাটাবাইরাফ চেষ্টা করার মতো হবে।


1

আপনি আপনার রাস্টারকে ইএসআরআই এসিআই গ্রিড হিসাবে সংরক্ষণ করতে পারেন এবং সেই ফাইলটিকে নম্পির সাথে পড়তে / ম্যানিপুলেট করতে পারেন।

এটি কিছু শুরুর পয়েন্ট সরবরাহ করে: http://sites.google.com/site/davidpfinlayson2/esriasciigridformat

তবে নজর রাখুন - মনে হচ্ছে আসকি গ্রিড ফর্ম্যাটটি সবসময়ই অনুমানগুলি অনুসরণ করে না, তাই প্রতিবার সেগুলি সঠিকভাবে পড়া চ্যালেঞ্জ হতে পারে।


1

আমি নিশ্চিত নই যে আপনি রাস্টার পিক্সেলটিকে পিক্সেল দ্বারা পরিচালনা করতে পারবেন তবে আপনি পাইপন এপিআইয়ের সাথে মিলে জিওপ্রসেসিং অবজেক্টগুলি ব্যবহার করতে পারেন।

এই ধরণের কারসাজির জন্য আপনি যে কোনও সরঞ্জামবক্স ব্যবহার করতে পারেন। একটি নমুনা স্ক্রিপ্ট হবে:

#import arcgisscripting

gp = arcgisscripting.create(9.3)

gp.AddToolbox("SA") # addint spatial analyst toolbox

rasterA = @"C:\rasterA.tif"
rasterB = @"C:\rasterB.tif"

rasterC = @"C:\rasterC.tif" # this raster does not yet exist
rasterD = @"C:\rasterD.tif" # this raster does not yet exist

gp.Minus_SA(rasterA,rasterB,rasterC)

gp.Times_SA(rasterA,rasterB,rasterD)

# lets try to use more complex functions

# lets build and expression first

expression1 = "slope( " + rasterC + ")"
expression2 = "(" + rasterC " + " rasterD + ") - " + rasterA 

gp.SingleOutputMapAlgebra_SA(expression1,@"C:\result_exp1.tif")
gp.SingleOutputMapAlgebra_SA(expression2,@"C:\result_exp2.tif")

আপনার প্রশ্নের এখানে একটি ফলোআপ দেওয়া আছে । তবুও সম্ভব হচ্ছে না। 10.0 সংস্করণে নিশ্চিত নয়।


ধন্যবাদ - এটি খুব সহায়ক। যাইহোক, আদর্শভাবে আমি রাস্টার অ্যারে জুড়ে এটির জন্য বিভিন্ন জিনিস করতে সক্ষম হতে চাই। আমি ভাবতাম আর্কজিআইএস এ করার জন্য কোনও উপায় থাকত, তবে সম্ভবত না!
রবিন্টউ

রবিন্টউ, আমি রেফারেন্সটিতে যা দেখেছি তার জন্য, রাস্টারের নির্দিষ্ট পিক্সেল পাওয়ার কোনও উপায় নেই। আমি নিশ্চিত না আর্কিপাইতে (ভি 10 থেকে উপলব্ধ) আপনি এই পৃথক কক্ষগুলি আনতে পারেন, যেহেতু তারা প্রচুর নতুন ফানকুনিয়ালিটির সাথে পাইথন এপিআই বাড়িয়েছে।
জর্জ সিলভা

0

সবচেয়ে সহজ উপায় হ'ল রাস্টারকে নেট নেট সিডিএফ তে রূপান্তর করা এবং তারপরে এটি খুলুন এবং গ্রিডের মধ্য দিয়ে চলুন। রাস্টার কোষগুলিতে নির্ধারিত তথ্যের ভিত্তিতে রাস্টারদের ফিচার ডেটাতে পরিণত করার সাথে জড়িত একটি প্রকল্পের জন্য আমি খুব একই কাজ করেছি। আমি যুগ যুগ ধরে এটি দেখেছি এবং গ্রিড ডেটা হেঁটে এই সিদ্ধান্তে পৌঁছেছি নেটডিসিএফ থেকে সহজ হবে F

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