2016-11-23 3 views
3

Ich bin ein WRT Zeichenfolge aus einem specialPolygons Objekt in R. SchaffungSatz Präzision in writeWKT von rgeos Paket

Jedoch I durch die Anzahl der Stellen in dem Ausgang bin überrascht. Gibt es eine Möglichkeit, es zu reduzieren?

x = sp::SpatialPolygons(Srl = list(sp::Polygons(srl = list(sp::Polygon(coords = cbind(c(-19.8, -19.9, -19.9, -19.8, -19.8),c(148, 148, 148.2, 148.2, 148)))), ID = "1")), pO = 1:1) 
rgeos::writeWKT(x) 

Das gibt mir:

"POLYGON ((-19.8000000000000007 148.0000000000000000, -19.8999999999999986 148.0000000000000000, -19.8999999999999986 148.1999999999999886, -19.8000000000000007 148.1999999999999886, -19.8000000000000007 148.0000000000000000))" 
+0

Basierend auf einem Chat ich h Anzeige mit [@Spacedman] (http://chat.stackoverflow.com/transcript/message/34211117#34211117), dies würde eine C-Level-Bastelei erfordern. –

+0

Insbesondere diese Zeile hier https://gitlab.com/geos/libgeos/blob/svn-trunk/src/geom/Coordinate.cpp#L43 scheint die Genauigkeit auf "17" zu setzen. Ziemlich gut fest darin codiert. – Spacedman

+0

Jemand postet als Antwort? Ich denke, eine Hacky-Alternative besteht darin, 'writeWKT' mit einem regulären Ausdruck nachzubearbeiten, um unerwünschte signifikante Ziffern zu verwerfen ... –

Antwort

2

Funktionen in der ausgezeichneten neuen sf package arbeitet scheinen mehr zu arbeiten wie du hoffen würdest:

library(sf) 
st_as_text(st_as_sfc(x)) 
## [1] "POLYGON((-19.8 148, -19.9 148, -19.9 148.2, -19.8 148.2, -19.8 148))" 
1

dies, ärgerlich müssen 3 pkgs statt 1, aber :)

library(geojson) 
library(wellknown) 
library(jsonlite) 
geoj <- as.geojson(x) 
geojson2wkt(fromJSON(geoj, FALSE)$features[[1]]$geometry, fmt = 1) 

#> [1] "POLYGON ((-19.8 148.0, -19.9 148.0, -19.9 148.2, -19.8 148.2, -19.8 148.0))"