উপকূলরেখার দ্বারা সীমাবদ্ধ এমন অঞ্চল বাফার তৈরি করুন


10

আমি প্রাক-সংজ্ঞায়িত ক্ষেত্রের উপর ভিত্তি করে পয়েন্টগুলির একটি বাফার তৈরি করতে আর্কজিআইএস 10.2 ব্যবহার করার চেষ্টা করছি (উদাহরণস্বরূপ 400 বর্গ কিমি)। এরপরেও কিছু পয়েন্টের বাফারগুলি উপকূলরেখার কাছাকাছি অবস্থিত যার জন্য বাফারগুলি উপকূলরেখায় কাটতে হবে এবং এখনও অভ্যন্তরীণ অঞ্চলের (৪০০ বর্গকিলোমিটার) সমান অঞ্চল রয়েছে।

কেউ কি জানেন যে মডেল বিল্ডার বা আরকিপির সাথে এটি কীভাবে করা যেতে পারে?

আমার আরকিপি এবং আর এর সাথে সীমিত দক্ষতা রয়েছে তবে এর সমাধান পেতে কিছু স্ক্রিপ্টিংয়ে কাজ করতে পেরে খুশি হব।

আমি কী অর্জন করার চেষ্টা করছি তার চিত্রিত উপস্থাপনা দেখিয়ে নীচের চিত্রটি দেখুন showing

[1]


2
আপনি কথায় কী বর্ণনা দেওয়ার চেষ্টা করছেন তার একটি চিত্র আপনি অন্তর্ভুক্ত করতে সক্ষম হবেন?
পলিজিও

আপনি তখন কেটে ফেললে কীভাবে অঞ্চলগুলি আরও বড় করে তুলবেন? বাফারের ব্যাসার্ধ বাড়িয়ে দিয়ে?
পিটার হর্সবল মোলার

উত্তর:


15

একটি বৃত্তাকার বাফারের ক্ষেত্রটি বাফার ব্যাসার্ধের একঘেয়ে-বর্ধমান ক্রিয়াকলাপ (যাইহোক পরিকল্পনাকারী সমন্বয় সিস্টেমে)। সুতরাং একটি সাধারণ অনুসন্ধান কৌশল একটি ব্যাসার্ধের সন্ধান করতে পারে Rযেমন Rবহুভুজ অঞ্চলে ক্লিপড ব্যাসার্ধের বাফারের ক্ষেত্রফল A(কিছুটা সহনশীলতা অবধি) s

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

পাইথনে বাইনারি অনুসন্ধান লিখে আর্কজিআইএস পাইথন এপিআই ব্যবহার করা শিখার পক্ষে ভাল উপায় বলে মনে হচ্ছে! আমি মোটামুটি নিশ্চিত যে আমি কয়েক বছর আগে আর-তে এটি করেছি ...

এখানে কিছু আর কোড রয়েছে:

cropareabuff <- function(pt, region, target){
    f = function(r){
        b = rgeos::gBuffer(pt, width=r)
        return(gArea(gIntersection(b, region)) - target)
    }
    f
}

buff_with_area <- function(pt, region, target, lower, upper){
    f = cropareabuff(pt, region, target)
    r = uniroot(f, lower=lower, upper=upper, extendInt="upX")
    list(r=r, b=gIntersection(rgeos::gBuffer(pt, width=r$root), region))
}

ব্যবহার:

প্রথমে একটি সাধারণ ইউকে বহুভুজ অঞ্চল স্থাপন করুন:

library(raster); library(rgeos); library(rgdal)
uk = getData("GADM", country="GBR", level=0)
uk = spTransform(uk,CRS("+init=epsg:27700"))
uk = gSimplify(uk, tol=1000)

এখন একটি বিষয় নির্ধারণ করুন:

p = SpatialPoints(coords=list(x=269042, y=235937), proj4string=CRS("+init=epsg:27700"))

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

b = buff_with_area(p, uk, 10000000000, 1, 10000)

এটি দুটি উপাদান সহ একটি তালিকা, bবাফার:

plot(b$b, col=2)
plot(uk, add=TRUE)

এবং এর সঠিক ক্ষেত্র রয়েছে:

gArea(b$b)
[1] 1e+10

এবং rএটি থেকে আউটপুট uniroot, যার মধ্যে বাফার ব্যাসার্ধের মান অন্তর্ভুক্ত।

> b$r$root
[1] 63338.88

সুতরাং এই ক্ষেত্রে বাফার প্রস্থটি k৪ কিলোমিটারের নীচে ছিল।

এখানে মূল বিষয়গুলি sqrt(A/pi)হ'ল নিম্ন এবং উচ্চতর প্রাথমিক মানগুলি - আমি অনুমান করি আপনি নিম্নতর ব্যাসার্ধটি অন্তর্নিহিত করতে পারবেন এবং উপরেরটি এত গুরুত্বপূর্ণ নয় কারণ অনুসন্ধানের অ্যালগরিদম এটি বাড়িয়ে দেবে যতক্ষণ না অন্তরটি ক্যাপচার করে।

প্রাথমিক সর্বাধিক ব্যাসার্ধটি সত্যিই খুব বড় হলে অনুসন্ধানের অ্যালগরিদম ব্যর্থ হতে পারে, যেহেতু আপনি আপনার পুরো অঞ্চলটিকে একটি ব্যাসার্ধ দিয়ে বাফার করছেন, সেই ক্ষেত্রে ব্যাসার্ধের পরিবর্তন ঘটলে অঞ্চলটি বদলাবে না ... তবে বুদ্ধিমান সীমাবদ্ধতাগুলি এই হওয়া বন্ধ করে দেবে।


আপনি কীভাবে এটি আর এ করলেন? আমি উল্লেখ করতে ভুলে গেছি যে আর-তে আমার কিছু অভিজ্ঞতা আছে তাই আমি আর ব্যবহার করেও কোনও সমাধান মনে করব না।
ফানকেহ-মনকেহ

rgeosপ্যাকেজ এবং তার gBufferফাংশন, সম্ভবত ...
Spacedman

প্রকৃতপক্ষে আমি একটি মিথ্যা বলি, আমি পাইথনে এটির মতো একটি কিউজিআইএস প্লাগইন হিসাবে প্রয়োগ করেছি - এটি বহুভুজকে বাফার করেছিল যতক্ষণ না বাফার পলিটি মূল বহুভুজের ক্ষেত্রফল 2x (বা এনএক্স) না হয়। যদিও একই অনুসন্ধান অ্যালগরিদম।
স্পেসডম্যান

+1 টি। কোডটিতে প্রদর্শিত পদ্ধতির সুবিধাগুলি Rহ'ল (ক) এটি জিআইএসের গণনাগুলি অনুসন্ধান যুক্তি থেকে পৃথক করে এবং (খ) এটি অনুসন্ধানের অ্যালগরিদমে (ইন uniroot) অনুকূলিত এবং পরীক্ষিত হয়েছে - এটি আপনাকে লিখতে হবে না নিজেই (এবং এটি সম্ভবত সবচেয়ে কার্যকর হবে না)।
হুবুহু

আমার সন্দেহ হয় স্কিপি তার অপ্টিমাইজ মডিউলে অনুরূপ মূল-সন্ধানকারী অ্যালগরিদমগুলি প্রয়োগ করে: ডকস.এসসিপি.আর / ডক / স্কিপি / রেফারেন্স / আপ্টিমাইজ এইচটিএমএল (হ্যাঁ, আনিরूट ব্রেন্টকে উদ্ধৃত করে, স্কিপিতে ব্রেন্ট-ইশ ফাংশন রয়েছে)
স্পেসডম্যান

1

পয়েন্টগুলির অবস্থানের কারণে এটি প্রায় অসম্ভব। আপনি 400km 2 এর বাফার তৈরি করতে পারেন , তবে উপকূলরেখার নিকটবর্তী পয়েন্টগুলির সাথে আরও দূরে থাকা অঞ্চলের তুলনায় সর্বদা একটি ছোট অঞ্চল থাকবে (> 400km 2 )।

কেবলমাত্র আপনি যা করতে পারেন তা হল পয়েন্টগুলিতে একটি বাফার বিশ্লেষণ করা এবং তৈরি করা বাফারগুলি উপকূলরেখার বৈশিষ্ট্যটির পরে ক্লিপ করুন।


2
এটি অসম্ভব নাও হতে পারে তবে এটি এনপি কমপ্লিট সমস্যা হতে পারে যা সমাধানকে বিভ্রান্ত করতে পারে। অঞ্চলটি নিখুঁত করা চ্যালেঞ্জ (নিকটবর্তী হতে কয়েকবার পুনরাবৃত্তি নিতে পারে)।
ভিন্স

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