Viac

WriteOGR mení otvory MultiPolygon

WriteOGR mení otvory MultiPolygon


Mám problémy s používanímwriteOGRzapisovať súbory GeoJSON, ak existujú objekty MultiPolygon. Tu je príklad: vytváram aSpatialPolygonsDataFrameobjekt od GeoJSON, s jedinou funkciou vyrobenou z dvoch polygónov. Keď exportujem do GeoJSONu, napísaný súbor má jednu funkciu s jedným polygónom a dierou.

Prečo to je a ako môžem presvedčiť writeOGR, aby napísal dva polygóny?

# Create SpatialPolygonsDataFrame with one feature, two polygons spdf <- readOGR (layer = 'OGRGeoJSON', verbose = FALSE, '{"type": "FeatureCollection", "features": [{"type": "Feature", "id ": 0," properties ": {" label ":" CENTRAL "}," geometry ": {" type ":" MultiPolygon "," Coordinates ": [[[[[102.0, 2.0], [103.0, 2.0]," [103,0, 3,0], [102,0, 3,0], [102,0, 2,0]]], [[[100,0, 0,0], [101,0, 0,0], [101,0, 1,0], [100,0, 1,0], [100,0, 0,0 ]]]]}}]} ') # # Keď tento objekt uložím a znova načítam, súradnice majú dĺžku 1, # tj. Prvkom je mnohouholník a diera. fn <- tempfile () writeOGR (spdf, fn, vrstva = "čokoľvek", ovládač = "GeoJSON") dĺžka (odJSON (súbor = fn) $ funkcie [[1]] $ geometria $ súradnice)

Používam R 3.1.2 a rgdal 0.9.1 na OSX Yosemite.

AKTUALIZÁCIA: Tu je vytvorený dočasný súbor GeoJSON. Ako vidíte, pole súradníc bolo upravené oproti pôvodnému.

{"type": "FeatureCollection", "crs": {"type": "name", "properties": {"name": "urn: ogc: def: crs: OGC: 1.3: CRS84"}}, " features ": [{" type ":" Feature "," id ": 0," properties ": {" label ":" CENTRAL "}," geometry ": {" type ":" MultiPolygon "," Coordinates ": [[[[[102,0, 2,0], [102,0, 3,0], [103,0, 3,0], [103,0, 2,0], [102,0, 2,0]]], [[100,0, 0,0], [100,0, 1,0], [101,0, 1,0], [101,0, 0,0], [100,0, 0,0]]]]}}]}

Nenašiel som spôsob, ako sa dostaťwriteOGRpracovať - ​​tak som si namiesto toho napísal svojetoGeoJSONfunkcia. Nebudem vkladať celý kód, ale najužitočnejší bit je pre objekt nasledujúciXtriedy„Polygóny“:

require (maptools) require (rgeos) y <- maptools :: checkPolygonsHoles (x) insideWhich <- as.numeric (strsplit (rgeos :: createPolygonsComment (y), ") [[1]]] plotOrder <- y @ plotOrder

Napríklad môžete dostať

plotOrder = c (3,5,4,1,2) vo vnútri Ktoré = c (4,3,0,0,0)

To znamená: „Nakreslite polygón 4, potom 5, potom 1, potom 3 a potom 2. Polygón 1 je tiež otvor vo vnútri 4 a 2 je otvor vo vnútri 3.“ Tieto dve funkciecheckPolygonsHolesacreatePolygonsCommentpri výpočte týchto skutočností spolupracovať. S týmito informáciami je zvyšok vytvárania objektu GeoJSON pomerne jednoduchý.


Pokračujte prosím v tomto vlákne:

https://stat.ethz.ch/pipermail/r-sig-geo/2015-October/023609.html

pretože vývojári programu rgdal nečítajú SO, chyba ovplyvňuje viac ovládačov, takže použitie GDAL ako jedného rozhrania pre všetky formáty údajov je v rozpore s úsilím šírenia.

Problém je v tom, ako sú objekty wkbtype MultiPolygon zapísané prostredníctvom systému tried OGR - rgdal (OGR_write.cpp pre tento wkbtype) to nemusí robiť spôsobom, ktorý by vyhovoval všetkým ovládačom, a zdá sa, že zlyhávajú na tých, ktoré vyhovujú SFS.


Pozri si video: Histograms and Frequency Polygons in R