मैं sf
अंतराल और slivers की शुरुआत के बिना एक बहुभुज को कैसे सरल करूं ?
एक आकृति के साथ, उदाहरण के लिए, मैं उपयोग करूंगा 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()
, जो मैन पेजों से, राज्यों:
एक अन्य प्रकार के लिए ज्यामिति कास्ट करें: या तो सरलीकृत करें, या स्पष्ट रूप से डालें
तथा:
तर्क के लिए: चरित्र; लक्ष्य प्रकार, यदि अनुपस्थित है, तो सरलीकरण की कोशिश की जाती है; जब 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()
निम्नलिखित तर्कों के साथ निर्दिष्ट किए जाने पर @sk का सुझाव टोपोलॉजिकल-अवगत सरलीकरण (अर्थात सरलीकृत किए बिना सरल बनाता है) कर सकता है:
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_simplify
हूं, जो मैंने अब तक किए गए अन्य सभी से अधिक के लिए डिफॉल्ट करता है, लेकिन मेरे पास नए विकल्प के साथ एक नाटक होगा (अपडेट: जो कि सावधानी से आगे बढ़ता है, preserveTopology = TRUE
निश्चित रूप से अभी तक ठीक से काम नहीं करता है)
regions
) में उपयोग किए गए बहुभुजों पर लगभग 1000 तक सहिष्णुता के लिए काम करता है, लेकिन इसके अलावा यह अब टोपोलॉजी को संरक्षित नहीं करता है। चूंकि यह एक निश्चित बिंदु पर टूट जाता है, मैं कहता हूं कि इसका उद्देश्य व्यवहार नहीं है