আমি প্রজাতি বিতরণ (আকৃতিগুলি থেকে বহুভুজগুলি মার্জ করা) এর উপরিভাগের ক্ষেত্রটি গণনা করেছি, তবে যেহেতু এই অঞ্চলটি বেশ দূরত্বযুক্ত বহুভুজ সমন্বয়ে গঠিত হতে পারে, তাই আমি কিছুটা বিস্তারের গণনা করতে চাই। আমি এ পর্যন্ত যা করেছি তা হ'ল প্রতিটি বহুভুজের সেন্ট্রয়েডগুলি পুনরুদ্ধার করা, এর মধ্যে দূরত্ব গণনা করা হয়েছিল এবং এগুলি নীচের ডামি উদাহরণের মতো পরিবর্তনের সহগ গণনা করতে ব্যবহার করা হয়েছিল;
require(sp)
require(ggplot2)
require(mapdata)
require(gridExtra)
require(scales)
require(rgeos)
require(spatstat)
# Create the coordinates for 3 squares
ls.coords <- list()
ls.coords <- list()
ls.coords[[1]] <- c(15.7, 42.3, # a list of coordinates
16.7, 42.3,
16.7, 41.6,
15.7, 41.6,
15.7, 42.3)
ls.coords[[2]] <- ls.coords[[1]]+0.5 # use simple offset
ls.coords[[3]] <- c(13.8, 45.4, # a list of coordinates
15.6, 45.4,
15.6, 43.7,
13.8, 43.7,
13.8, 45.4)
# Prepare lists to receive the sp objects and data frames
ls.polys <- list()
ls.sp.polys <- list()
for (ii in seq_along(ls.coords)) {
crs.args <- "+proj=longlat +datum=WGS84 +no_defs +ellps=WGS84 +towgs84=0,0,0"
my.rows <- length(ls.coords[[ii]])/2
# create matrix of pairs
my.coords <- matrix(ls.coords[[ii]],nrow = my.rows,ncol = 2,byrow = TRUE)
# now build sp objects from scratch...
poly = Polygon(my.coords)
# layer by layer...
polys = Polygons(list(poly),1)
spolys = SpatialPolygons(list(polys))
# projection is important
proj4string(spolys) <- crs.args
# Now save sp objects for later use
ls.sp.polys[[ii]] <- spolys
# Then create data frames for ggplot()
poly.df <- fortify(spolys)
poly.df$id <- ii
ls.polys[[ii]] <- poly.df
}
# Convert the list of polygons to a list of owins
w <- lapply(ls.sp.polys, as.owin)
# Calculate the centroids and get the output to a matrix
centroid <- lapply(w, centroid.owin)
centroid <- lapply(centroid, rbind)
centroid <- lapply(centroid, function(x) rbind(unlist(x)))
centroid <- do.call('rbind', centroid)
# Create a new df and use fortify for ggplot
centroid_df <- fortify(as.data.frame(centroid))
# Add a group column
centroid_df$V3 <- rownames(centroid_df)
ggplot(data = italy, aes(x = long, y = lat, group = group)) +
geom_polygon(fill = "grey50") +
# Constrain the scale to 'zoom in'
coord_cartesian(xlim = c(13, 19), ylim = c(41, 46)) +
geom_polygon(data = ls.polys[[1]], aes(x = long, y = lat, group = group), fill = alpha("red", 0.3)) +
geom_polygon(data = ls.polys[[2]], aes(x = long, y = lat, group = group), fill = alpha("green", 0.3)) +
geom_polygon(data = ls.polys[[3]], aes(x = long, y = lat, group = group), fill = alpha("lightblue", 0.8)) +
coord_equal() +
# Plot the centroids
geom_point(data=centroid_points, aes(x = V1, y = V2, group = V3))
# Calculate the centroid distances using spDists {sp}
centroid_dists <- spDists(x=centroid, y=centroid, longlat=TRUE)
centroid_dists
[,1] [,2] [,3]
[1,] 0.00000 69.16756 313.2383
[2,] 69.16756 0.00000 283.7120
[3,] 313.23834 283.71202 0.0000
# Calculate the coefficient of variation as a measure of polygon dispersion
cv <- sd(centroid_dist)/mean(centroid_dist)
[1] 0.9835782
তিনটি বহুভুজ এবং তাদের সেন্ট্রয়েডের প্লট
আমি নিশ্চিত নই যে এই পদ্ধতিটি বেশ কার্যকর, যেহেতু বেশ কয়েকটি ক্ষেত্রে, বহুভুজের কিছু (উপরের উদাহরণে নীল হিসাবে) বাকিগুলির তুলনায় বেশ বড়, এইভাবে দূরত্ব আরও বাড়িয়ে তোলে। উদাহরণস্বরূপ, অস্ট্রেলিয়ার সেন্ট্রয়েডের পাপাউয়ের পশ্চিমা বোর্ডারদের প্রায় একই দূরত্ব রয়েছে।
আমি যা পেতে চাই তা বিকল্প পদ্ধতির কিছু ইনপুট। উদাহরণস্বরূপ কীভাবে বা কোন ফাংশন দিয়ে আমি বহুভুজগুলির মধ্যে দূরত্ব গণনা করতে পারি?
আমি সমস্ত পয়েন্টের মধ্যে দূরত্ব গণনা {spatstat}
করতে চালাতে সক্ষম হতে উপরে স্প্যাটিয়ালপলিগন ডেটাফ্রেমকে পয়েন্টপ্যাটার্নস (পিপিপি) তে রূপান্তর করতে পরীক্ষা করেছি nndist() {spatstat}
। তবে যেহেতু আমি বেশ বড় অঞ্চলগুলি (অনেকগুলি বহুভুজ এবং বৃহত্তরগুলি) নিয়ে কাজ করছি, তাই ম্যাট্রিক্স বিশাল আকার ধারণ করে এবং আমি বহুভুজগুলির মধ্যে ন্যূনতম দূরত্বে কীভাবে যেতে হবে তা নিশ্চিত নই ।
আমি ফাংশনটিও দেখেছি gDistance {rgeos}
, তবে আমি মনে করি এটি কেবলমাত্র অনুমান করা ডেটাতে কাজ করে যা আমার জন্য সমস্যা হতে পারে যেহেতু আমার অঞ্চলগুলি কয়েক পার হতে পারে EPSG areas
। ফাংশনটির ক্ষেত্রেও একই সমস্যা দেখা দেবে crossdist {spatstat}
।
postgres
কিন্তু যখন আমি (দেখুন না) কিভাবে ডাটাবেসের মধ্যে কর্মপ্রবাহ / geostats সংযোগ করতে জানেন না বন্ধ R
...
postgres/postgis
ছাড়াও বিবেচনা করবেনR
? আমি একটি ওয়ার্কফ্লো ব্যবহার করেছি যেখানে আমি আমার বেশিরভাগ কাজ সম্পাদন করিR
তবে আমি যে ডেটাবেজে ব্যবহার করে অ্যাক্সেস করে ডেটা সংরক্ষণ করিsqldf
। এটি আপনাকে সমস্তpostgis
ফাংশন ব্যবহার করতে সক্ষম করে (বহুভুজগুলির মধ্যে দূরত্বটি সোজা)