sfফাঁক এবং স্লাইভারগুলি না জানিয়ে আমি কীভাবে বহুভুজকে সরল করব ?
একটি শেফফাইল সহ, উদাহরণস্বরূপ, আমি ব্যবহার করব rmapshaper::ms_simplify():
library("pryr")
library("rgdal")
library("rmapshaper")
download.file("https://borders.ukdataservice.ac.uk/ukborders/easy_download/prebuilt/shape/England_gor_2011.zip",
destfile = "regions.zip")
unzip("regions.zip")
regions <- readOGR(".", "england_gor_2011")
object_size(regions)
# ~13MB
regions <- ms_simplify(regions)
object_size(regions)
# < 1MB
sf::st_cast()ম্যান পেজ থেকে আমি যা চেষ্টা করেছি :
অন্য ধরণের জ্যামিতি নিক্ষেপ করুন: হয় সরল করুন, বা স্পষ্টভাবে কাস্ট করুন
এবং:
to argument: চরিত্র; লক্ষ্য প্রকার, যদি অনুপস্থিত থাকে, সরলীকরণের চেষ্টা করা হয়েছে; x যখন sfg টাইপ হয় (যেমন, একক জ্যামিতি) তখন নির্দিষ্ট করা দরকার।
যখন আমি toঅনুপস্থিত হিসাবে ছেড়ে গেছি তবে এটি প্রত্যাশার মতো কাজ করে নি (আমি জানতাম এটি সত্য হওয়া খুব ভাল ছিল!):
library("sf")
regions <- sf::read_sf("england_gor_2011.shp")
object_size(regions)
# ~13MB
regions <- sf::st_cast(regions)
object_size(regions)
# Still 13MB
বর্তমানে আমি ফাইলটি খুলছি rgdal::readOGR(), এটিকে সরলীকরণ করছি, এটি সংরক্ষণ করব, তার সাথে আবার এটি লোড করছি sf।
একটি ভাল উপায় আছে কি?
rgeos::gSimplify()
rgeos::gSimplify()নীচের যুক্তিগুলির সাথে নির্দিষ্ট করে @ এসএসএসের পরামর্শ টপোলজিক্যালি-সচেতন সরলিকরণগুলি (যেমন স্লাইভার তৈরি না করে সরলকরণ) করতে পারে:
library("rgeos")
regions_gSimplify <- gSimplify(regions, tol = 0.05, topologyPreserve = TRUE)
gSimplify@dataযদিও ফ্রেম সংরক্ষণ করে না , তাই আমাদের এটি আবার তৈরি করা উচিত:
regions_df <- regions@data
regions_gSimplify <- sp::SpatialPolygonsDataFrame(regions_gSimplify, regions_df)
এবং এটি প্রকৃতপক্ষে একটি ছোট ফাইল আকারে এর ফলাফল দেয় ( tolএটি আরও ছোট হওয়ার জন্য তর্কটি মুছে ফেলতে পারে) এবং আমি নিশ্চিত করেছিলাম যে এটি কিউজিআইএস-এ পরীক্ষা করে কোনও স্লাইভার তৈরি করে নি।
object_size(regions_gSimplify)
# ~8MB
যদিও এটি আমার একটি বৈধ বিকল্প হলেও rmapshaper::ms_simplify()আমার এখনও একই সমস্যা রয়েছে, যথা এটি এর সাথে কাজ করে না sf:
regions_sf <- sf::read_sf("england_gor_2011.shp")
object_size(regions_sf)
regions_gSimplify <- gSimplify(regions_sf, topologyPreserve = TRUE, tol = 0.05)
# Error in gSimplify(regions_sf, topologyPreserve = TRUE, tol = 0.05) :
# no slot of name "proj4string" for this object of class "sf"
@obrl_soil এর উত্তরও প্রয়োগ করা যেতে পারে gSimplify(), কেবল এটির জায়গায় ব্যবহার করুন ms_simplify()।
st_simplifyকরার কথা না? (এটি এখনও ব্যবহার করেননি)
st_simplify, এটি নির্দেশ করার জন্য ধন্যবাদ। আমি এখনও rmapshaper::ms_simplifypreserveTopology = TRUE
regions) তবে এর বাইরে এটি টপোলজিকে আর সংরক্ষণ করে না। এটি নির্দিষ্ট সময়ে ভাঙ্গার সাথে সাথে আমি বলব যে এটি উদ্দেশ্যমূলক আচরণ নয়