বিশেষ প্রতিবেশী জন্য ফোকাল পরিসংখ্যান গণনা?


18

আমি একটি নির্দিষ্ট মাপদণ্ডের আশেপাশে একটি রাস্টার প্রতিটি কক্ষের কেন্দ্রিয় পরিসংখ্যান গণনা করতে দেখছি।

পটভূমি - আমার কাছে তিনটি বাইনারি রাস্টার রয়েছে, প্রত্যেকে একক উদ্ভিদের আগ্রহের প্রতিনিধিত্ব করে। আমি আমার অধ্যয়নের ক্ষেত্রের যে কোনও ঘরের 20 কিলোমিটার ^ 2 এর মধ্যে প্রতিটি গাছের প্রকারের শতাংশের কভারেজ গণনা করতে চাই (আশেপাশে মোট কোষ) সমস্যাটি হ'ল আমি প্রতিটি কক্ষের চারপাশে একটি সাধারণ বৃত্ত বা বর্গাকার পাড়া ব্যবহার করতে পারি না কারণ, যদি আমি এটি করি, যোগফলটি গণনা করতে ব্যবহৃত অনুসন্ধান অঞ্চলটি আমার অধ্যয়নের ক্ষেত্রের বাইরের অঞ্চলগুলিকে অন্তর্ভুক্ত করবে। এই ব্যতিক্রমটি গুরুত্বপূর্ণ কারণ পরিসংখ্যানগুলি একটি আবাসনের মডেলের ইনপুট হিসাবে ব্যবহৃত হবে এবং আমার অধ্যয়নের ক্ষেত্রের বাইরের অঞ্চলগুলিকে সম্ভাব্য আবাস হিসাবে বিবেচনা করা যায় না - সেগুলি নগরায়িত। এগুলি সহ আমাকে ভ্রান্ত পরিসংখ্যান দিত। তো, আমি কি ' এনআমার মানদণ্ডগুলি পূরণ করে) আমার কাঙ্ক্ষিত পাড়ার আকারের সমান একটি অঞ্চল কভার করতে প্রয়োজনীয় কক্ষের সংখ্যা দ্বারা নির্ধারিত)। মানদণ্ডগুলি হ'ল এগুলি একটি নগরায়িত অঞ্চলে পড়ে না। আমি ভাবছি যে সেলুলার অটোমেটার কিছু ফর্ম ব্যবহার করা উচিত। যদিও আমি সিএর সাথে কখনই কাজ করিনি।

আমার ধারণা আমি যা পছন্দ করি তা হ'ল স্টার্টার কোডের মতো, বা সঠিক দিকের একটি পয়েন্ট।


নীচে কমেন্টের জন্য উত্তর দিন:

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


10/24/2014 হিসাবে "অগ্রগতি"

শ্যাপলি এবং ফিয়োনাকে ব্যবহার করে আমি এ পর্যন্ত কোডটি নিয়ে এসেছি:

import numpy as np
import pprint
import shapely
from shapely.geometry import*
import fiona
from fiona import collection
import math

traps = fiona.open('C:/Users/Curtis/Documents/ArcGIS/GIS_Data/occurrence/ss_occ.shp', 'r')

study_area = fiona.open('C:/Users/Curtis/Documents/ArcGIS/GIS_Data/Study_Area.shp', 'r')
for i in study_area: #for every record in 'study_area'
        sa = shape(i['geometry']) #make a variable called 'sa' that is a polygon

grassland = fiona.open('C:/Users/Curtis/Documents/ArcGIS/GIS_Data/land_cover/polys_for_aa/class3_aa.shp', 'r')
pol = grassland.next()
gl = MultiPolygon([shape(pol['geometry']) for pol in grassland])

areaKM2 = 20
with traps as input:
    r = (math.sqrt(areaKM2/math.pi))*1000
    for point in input:
        pt = shape(point['geometry'])
        pt_buff = pt.buffer(r)
        avail_area = pt_buff.intersection(sa).area
        # works to here
        while avail_area < areaKM2:
            r += 10
            pt_buff = pt.buffer(r)
            avail_area = pt_buff.intersection(sa).area

        perc_cov = pt_buff.intersection(gl).area//areaKM2
        print perc_cov

দুর্ভাগ্যক্রমে, এটি খুব ধীরে ধীরে।


1
এটি একটি আকর্ষণীয় সমস্যা। আপনি আপনার অধ্যয়নের ক্ষেত্রের বাইরের সমস্ত ঘর নোডাটাতে সেট করতে পারেন তবে আমি জানি না আপনি কীভাবে অভিযোজিত এবং একই 20 বর্গ কিলোমিটার আকার রাখতে চান (এটির আকার পরিবর্তন করতে হবে)।
jbchurchill

@ সিএসবি জেবিচর্চিল ঠিক আছে, এখানে সবচেয়ে ভাল কাজটি হল আপনার অধ্যয়নের ক্ষেত্রের বাইরে নোডাটা মানগুলি অর্পণ করা। ফোকাল পরিসংখ্যান সরঞ্জাম সেই নোডা মানগুলি যথাযথভাবে আচরণ করতে পারে। দেখুন 'NoData প্রক্রিয়াকরণ সেলের এখানে resources.arcgis.com/en/help/main/10.1/index.html#//...
WhiteboxDev

@ হোয়াইটবক্সদেভ - আপনার পরামর্শটি আমার সমস্যা সমাধান করবে না। আমি উপরেরটি সম্পাদনা করব এবং কেন এটি কাজ করবে না তা ব্যাখ্যা করব।
সিএসবি 21

আপনি কি এই পোস্টটি দেখেছেন, যা একটি পরিবর্তনশীল ব্যাসার্ধের সাথে ফোকাল স্ট্যাটিস্টিক্স ব্যবহার করে আলোচনা করে ( gis.stackexchange.com/questions/34306/… )? এটি আপনার সমস্যা বলে মনে হচ্ছে - প্রান্তের কক্ষগুলির বৃহত ব্যাসার্ধ থাকা উচিত এবং কেবলমাত্র অর্ধবৃত্তাকার পাড়া বিবেচনা করা উচিত। অবশ্যই, আপনার ঘরের আকারের উপর নির্ভর করে আপনাকে বেছে নিতে অনেকগুলি, অনেক রাস্টার তৈরি করতে হতে পারে।
phloem

1
@ সিএসবি আপনি নোডাটা এবং সঙ্কুচিত প্রতিবেশ ব্যবহার করেন না কেন বা আপনি যদি নিজের আশেপাশের আকার / স্থান পরিবর্তন করেন তবে তা নিশ্চিত করেই আপনি প্রান্তিক প্রভাবগুলিতে চলে যাবেন। কমপক্ষে পূর্বের সাথে, আপনি স্বচ্ছভাবে পদ্ধতিতে নিকটতম প্রান্তের উপাত্তকে ওভার স্যাম্পলিং / উপস্থাপন করবেন না। এটি কুখ্যাত সংশোধনযোগ্য অঞ্চল ইউনিট সমস্যার একটি অংশ।
হোয়াইটবক্সদেভ

উত্তর:


0

উপরের কোডটি চূড়ান্ত এবং অপূর্ণ, উত্তরটি আমি এই সমস্যার জন্য এসেছি। শেষ পর্যন্ত আমি ভেবেছিলাম সবচেয়ে ভাল উপায়টি হল একটি বিজ্ঞপ্তি পাড়া ব্যবহার করা এবং আমার "উপলভ্য" অঞ্চল ছেদ করা অঞ্চল গণনা করা। (একটি বৃত্তাকার আশেপাশে যাইহোক যাইহোক n ~ নিকটতম কক্ষগুলি দেবে - সুতরাং, সেলুলার অটোমাটার সাথে খুব বেশি অভিনব হওয়ার দরকার নেই)) যদি অঞ্চলটি খুব কম ছিল তবে আমি কেবল বৃত্তটি বাড়িয়েছি না যতক্ষণ না।

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


আপনার কোডটি পড়ার মতো দেখে মনে হচ্ছে একটি স্থানিক সূচক ব্যবহার করার একটি ভাল সুযোগ রয়েছে যা প্রায়শই নাটকীয়ভাবে কোডটি গতিতে পারে। এরকম কোনও মাল্টিপলিগনের বিরুদ্ধে ছেদ করা খুব ধীর is
স্নোরফালোরপ্যাগাস

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