একটি বৃত্তাকার বাফারের ক্ষেত্রটি বাফার ব্যাসার্ধের একঘেয়ে-বর্ধমান ক্রিয়াকলাপ (যাইহোক পরিকল্পনাকারী সমন্বয় সিস্টেমে)। সুতরাং একটি সাধারণ অনুসন্ধান কৌশল একটি ব্যাসার্ধের সন্ধান করতে পারে 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)
হ'ল নিম্ন এবং উচ্চতর প্রাথমিক মানগুলি - আমি অনুমান করি আপনি নিম্নতর ব্যাসার্ধটি অন্তর্নিহিত করতে পারবেন এবং উপরেরটি এত গুরুত্বপূর্ণ নয় কারণ অনুসন্ধানের অ্যালগরিদম এটি বাড়িয়ে দেবে যতক্ষণ না অন্তরটি ক্যাপচার করে।
প্রাথমিক সর্বাধিক ব্যাসার্ধটি সত্যিই খুব বড় হলে অনুসন্ধানের অ্যালগরিদম ব্যর্থ হতে পারে, যেহেতু আপনি আপনার পুরো অঞ্চলটিকে একটি ব্যাসার্ধ দিয়ে বাফার করছেন, সেই ক্ষেত্রে ব্যাসার্ধের পরিবর্তন ঘটলে অঞ্চলটি বদলাবে না ... তবে বুদ্ধিমান সীমাবদ্ধতাগুলি এই হওয়া বন্ধ করে দেবে।