আরকজিআইএসে একজন রাস্টার কেন্দ্র পয়েন্ট সন্ধান করছেন?


10

যদি আমি বলি, একটি আয়তক্ষেত্রাকার এবং জিওরিফারেন্সযুক্ত রাস্টার ফাইলটি একটি আর্কম্যাপ 10 ডকুমেন্টে লোড করা (.tiff ডাব্লু / সম্পর্কিত টিএফডাব্লু), আমি কীভাবে সহজেই এর কেন্দ্র পয়েন্টটি খুঁজে পেতে পারি এবং সেই বিন্দুকে একটি ভেক্টর স্তরে সংরক্ষণ করব?

এছাড়াও, আমার আর্কম্যাপ নথিতে যদি এমন একাধিক রাস্টার থাকে তবে আমি কীভাবে তাদের সকলের মধ্যে প্রক্রিয়াটি প্রয়োগ করব?

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


1
প্রোগ্রামেটিক সমাধান কি গ্রহণযোগ্য?
কर्क কুইকেনডাল

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

উত্তর:


7

মূল প্রশ্নটি 10.0 এর জন্য হলেও আমি নীচের কোডটি 10.3.1 এর জন্য আপডেট করেছি।

আরস্টারমেটার ফাংশনটি তৈরি করতে এটি আর্কম্যাপে পাইথন উইন্ডোতে অনুলিপি করুন:

import arcpy, os
def RasterCenter(raster):
    #raster: string reference to raster
    raster = arcpy.Raster(raster)
    fcname = "{}_center".format(os.path.basename(str(raster)))
    x = raster.extent.XMin + (raster.extent.XMax - raster.extent.XMin)/2
    y = raster.extent.YMin + (raster.extent.YMax - raster.extent.YMin)/2
    featureclass = arcpy.CreateFeatureclass_management("in_memory", fcname, "POINT",spatial_reference = raster.spatialReference)
    with arcpy.da.InsertCursor(featureclass, ['SHAPE@XY']) as cursor:
        cursor.insertRow(((x, y),))
    mxd = arcpy.mapping.MapDocument("CURRENT")
    df = arcpy.mapping.ListDataFrames(mxd)[0]
    arcpy.MakeFeatureLayer_management(featureclass, fcname)
    layer = arcpy.mapping.Layer(fcname)
    arcpy.mapping.AddLayer(df, layer)

তারপরে, আপনি কল করে নিজের বৈশিষ্ট্য শ্রেণি তৈরি করতে পাইথন উইন্ডোটি ব্যবহার করতে পারেন

RasterCenter("<reference to raster">)

সুতরাং, উদাহরণস্বরূপ, যদি আপনার কাছে ডিইএম নামের রাস্টার থাকে তবে আপনি পাইথন উইন্ডোতে রাস্টার কেন্দ্র ("ডেম") কল করেন এবং এটি রাস্টারটির কেন্দ্রে একটি পয়েন্ট সহ "ডেম_সেটার" নামে একটি স্তর যুক্ত করবে। স্তরটি মেমরিতে সংরক্ষণ করা হয়, তাই আপনি যদি এটি রাখতে চান তবে এটি রফতানি করুন।

আরও এক ধাপ এগিয়ে যাওয়ার জন্য, আপনি স্ক্রিপ্টটি একটি .py ফাইলে সংরক্ষণ করতে পারেন এবং পাইপথ ফাইলটি পাইথন অনুসন্ধানের পথে রাখতে পারেন। উদাহরণস্বরূপ এটিকে রাস্টারসেন্টার.পি হিসাবে সংরক্ষণ করুন এবং এটি পাইথনপথে রাখুন (সাধারণত এটির জন্য স্পটটি সি: \ পাইথন 26 \ আর্কজিআইএস 10.0 \ লিবি)

তাহলে আপনি করতে পারেন:

import RasterCenter
RasterCenter.RasterCenter("<reference to raster">)

6

খুব সহজ, সরল রাস্টারগুলির বৈশিষ্ট্য পান এবং নূন্যতম, সর্বাধিক এক্স এবং y থেকে কেন্দ্রের পয়েন্টটি কার্যকর করুন

MinX = arcpy.GetRasterProperties_management("raster", "LEFT")
MinY = arcpy.GetRasterProperties_management("raster", "BOTTOM")
MaxX = arcpy.GetRasterProperties_management("raster", "RIGHT")
MaxY = arcpy.GetRasterProperties_management("raster", "TOP")

centreX = (MaxX + MinX) / 2
centreY = (MaxY + MinY) / 2

এবং স্বাভাবিক ত্রুটি ইত্যাদি পরীক্ষা করা ....

তারপরে একটি আপডেটক্রসার দিয়ে আপনার পয়েন্ট টেবিলটিতে যুক্ত করুন


2
চমৎকার পন্থা। আমি মনে করি আপনি কেন্দ্রের সমন্বয়গুলির জন্য আপনার সূত্রগুলি উন্নত করতে চান: এগুলি শেষের পয়েন্টগুলির মাধ্যম, তাদের পার্থক্য নয়।
হোবার

এটি আমি যা খুঁজছি তা দেখে মনে হচ্ছে তবে আর্কজিআইএস-এ আমার কোনও স্ক্রিপ্টিংয়ের অভিজ্ঞতা নেই, আপনি কী আমাকে এই জাতীয় স্ক্রিপ্ট লোড করবেন এবং চালাতে পারবেন তা বলতে পারেন? (আমি প্রতিফলিত করতে মূল প্রশ্নটি আপডেট করেছি ...) ধন্যবাদ!
এইচপি

1
আপনি রাস্টার পরিমাণের বৈশিষ্ট্যগুলি ব্যবহার করেও মানগুলি অ্যাক্সেস করতে পারেন, যেমন রাস্টার = আরকিপি R রাস্টার ("রাস্টার"), তারপরে সেন্ট্রেএক্স = রাস্টার.এক্সেন্ট.এক্সম্যাক্স - রাস্টার.এক্সেন্ট.এক্সমিন
ব্লর্ড-কাস্টিলো

1
@ শুভ আমি এখন ত্রুটিটি দেখতে পাচ্ছি, আমি অন্য কিছু করার কথা ভাবছিলাম! ধন্যবাদ Whuber
লোমশ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.