একটি অনুসরণ সাম্প্রতিক প্রশ্ন , আপনি দ্বারা প্রদত্ত বৈশিষ্ট্য ব্যবহার করতে চাইতে পারেন rgeos আপনার সমস্যা সমাধানের জন্য প্যাকেজ। পুনরুত্পাদনযোগ্যতার কারণে, আমি ডিআইভিএ -জিআইএস থেকে তানজানিয়ান রাস্তার একটি শেফফাইল ডাউনলোড করেছি এবং এটি আমার বর্তমান কার্যনির্বাহী ডিরেক্টরিতে রেখেছি। আসন্ন কাজের জন্য আপনার তিনটি প্যাকেজ দরকার:
- সাধারণ স্থানিক ডেটা হ্যান্ডলিংয়ের জন্য আরজিডাল
- শেফফাইল ডেটার রেস্টারাইজেশনের জন্য রাস্টার
- রাস্টার টেমপ্লেট সহ রাস্তার ছেদটি পরীক্ষা করতে এবং রাস্তার দৈর্ঘ্য গণনা করতে rgeos
ফলস্বরূপ, আপনার প্রথম লাইনগুলি দেখতে দেখতে পারা উচিত:
library(rgdal)
library(raster)
library(rgeos)
এর পরে, আপনাকে শেফফাইল ডেটা আমদানি করতে হবে। নোট করুন যে ডিআইভা-জিআইএস শেফফিলগুলি EPSG: 4326 এ বিতরণ করা হয়েছে, তাই আমি ডিগ্রির পরিবর্তে মিটারগুলি মোকাবেলায় ইপিএসজি: 21037 (ইউটিএম 37 এস) এ শেফফিলটি প্রজেক্ট করব।
roads <- readOGR(dsn = ".", layer = "TZA_roads")
roads_utm <- spTransform(roads, CRS("+init=epsg:21037"))
পরবর্তী রাস্টেরাইজেশনের জন্য আপনার একটি রস্টার টেম্পলেট দরকার যা আপনার শেফফিলের স্থানিক ব্যাপ্তি জুড়ে। রাস্টার টেম্পলেটটিতে 10 টি সারি এবং 10 কলামগুলি ডিফল্টরূপে গঠিত হয়, সুতরাং এটি খুব বেশি পরিমাণে গণনার সময় এড়িয়ে চলে।
roads_utm_rst <- raster(extent(roads_utm), crs = projection(roads_utm))
এখন যে টেমপ্লেটটি সেট আপ করা হয়েছে, রাস্টারটির সমস্ত কক্ষের মধ্য দিয়ে লুপ করুন (বর্তমানে এটি কেবল এনএ মান ধারণ করে)। বর্তমান কক্ষের জন্য '1' এর মান নির্ধারণ করে এবং পরে সম্পাদন করে rasterToPolygons
, ফলস্বরূপ শেফফিল 'tmp_shp' স্বয়ংক্রিয়ভাবে বর্তমানে প্রক্রিয়াযুক্ত পিক্সেলের ব্যাপ্তিটি ধরে রাখে। gIntersects
এই পরিমাণ রাস্তা দিয়ে ওভারল্যাপ করে কিনা তা সনাক্ত করে। যদি তা না হয় তবে ফাংশনটি '0' এর মান প্রদান করবে। অন্যথায়, রোডের শেফফাইলটি বর্তমান সেল দ্বারা ক্রপ করা হয়েছে এবং সেই ঘরের মধ্যে 'স্প্যাটাললাইনস' এর মোট দৈর্ঘ্যটি ব্যবহার করে গণনা করা হচ্ছে gLength
।
lengths <- sapply(1:ncell(roads_utm_rst), function(i) {
tmp_rst <- roads_utm_rst
tmp_rst[i] <- 1
tmp_shp <- rasterToPolygons(tmp_rst)
if (gIntersects(roads_utm, tmp_shp)) {
roads_utm_crp <- crop(roads_utm, tmp_shp)
roads_utm_crp_length <- gLength(roads_utm_crp)
return(roads_utm_crp_length)
} else {
return(0)
}
})
শেষ অবধি, আপনি গণনাকারী দৈর্ঘ্য (যা কিলোমিটারে রূপান্তরিত হয়) রাস্টার টেম্পলেটে sertোকাতে এবং আপনার ফলাফলগুলি দৃশ্যত যাচাই করতে পারেন।
roads_utm_rst[] <- lengths / 1000
library(RColorBrewer)
spplot(roads_utm_rst, scales = list(draw = TRUE), xlab = "x", ylab = "y",
col.regions = colorRampPalette(brewer.pal(9, "YlOrRd")),
sp.layout = list("sp.lines", roads_utm),
par.settings = list(fontsize = list(text = 15)), at = seq(0, 1800, 200))
vignette('over', package = 'sp')
পারে সাহায্য করতে পারে।