-
Notifications
You must be signed in to change notification settings - Fork 15
Description
Vem sendo usado o http://polygons.openstreetmap.fr/get_geojson.py?id={relation_id} como fornecedor das geometrias simplificadas em GeoJSON. Falhas da própria simplificação já foram apresentadas antes no state-codes/issues/18, que podem ser ambos, falta de atualização e falha de simplificação.
Sugestão resumida
- Armazenar no city-codes ou no dump_osm do city-codes apenas area, centroide e BBOX precisos.
- avaliar se vale "trocar de fornecedor do GeoJSON" ou, mais correto, baixar o Planet para fazer o tratamento adequado... Opção de remover o dump_osm.
- remover o dump_osm de GeoJSON, ficar com com BBOX, Center, etc. e migrar a preservação de GeoJSON para a OSM-BR. Junto sugerir o uso de três tipos de backup:
- Separado o backup full (pouco usado e disponível nos backups de planet)
- GeoJSON de geometria simplificada, conforme critérios adequados, para que forneça área, perímetro, etc. razoáveis.
- TopoJSON (ver PostGIS/AsTopoJSON parece funcionar bem).
Avaliação
Como estão apresentando bug e já se mostraram simplificadas demais para por exemplo medidas de área, parece ser o momento de trazer originais do Planet e estabelecer um algoritmo local para obtenção das medidas (area, perimetro, bbox, centroid) e simplificação satisfatório (com algoritmos lentos e usando dilatação-erosão dentro do intervalo de erro estimado na obtenção dos dados).
As geometrias exatas de coastLine precisam ser adquiridas em separado e fornecerão resultados distintos.
As mensagens de erro podem ser obtidas com o script abaixo,
CREATE TABLE test_city AS
SELECT *, st_area(geom,true) aprox_area,
ST_Envelope(geom) geom_bbox, ST_PointOnSurface(geom) geom_center
FROM (
SELECT *, ST_SetSRID( ST_GeomFromGeoJSON( read_geojson(path)), 4326) as geom
FROM (
select state||'/'||lib.initcap_sep("lexLabel",true) as path,*
from io.citybr
) t
) t2
WHERE ST_IsValid(geom)
;
SELECT state,name, "idIBGE" from io.citybr
WHERE "idIBGE" NOT IN (SELECT "idIBGE" FROM test_city);NOTICE: Nested shells at or near point -51.504055899999997 -29.400515200000001
NOTICE: Nested shells at or near point -57.613555699999999 -18.999119400000001
NOTICE: Self-intersection at or near point -49.415139578296895 -17.692605747287082
NOTICE: Nested shells at or near point -52.491542099999997 -31.457800899999999
NOTICE: Nested shells at or near point -55.7061761 -22.552483200000001
NOTICE: Nested shells at or near point -47.875667300000003 -22.590384400000001
NOTICE: Self-intersection at or near point -56.423870703139137 -4.7442622930554128
SELECT 5559
Foram ao todo 11 municípios sem geometria avaliada:
| state | name | idIBGE |
|---|---|---|
| GO | Morrinhos | 5213806 |
| MG | Chiador | 3116209 |
| MS | Corumbá | 5003207 |
| MS | Ponta Porã | 5006606 |
| PA | Trairão | 1508050 |
| RJ | Casimiro de Abreu | 3301306 |
| RS | Barão | 4301651 |
| RS | Pelotas | 4314407 |
| SP | Florínea | 3516101 |
| SP | São Luiz do Paraitinga | 3550001 |
| SP | São Pedro | 3550407 |
Lembretes sobre simplificação
-
morphology/Dilation = positive buffer, morphology/Erosion = negative buffer
-
ST_RemoveRepeatedPoints — Returns a version of the given geometry with duplicated points removed.
-
ST_Simplify — Returns a "simplified" version of the given geometry using the Douglas-Peucker algorithm.
-
ST_SimplifyPreserveTopology — Returns a "simplified" version of the given geometry using the Douglas-Peucker algorithm. Will avoid creating derived geometries (polygons in particular) that are invalid.
-
ST_SimplifyVW — Returns a "simplified" version of the given geometry using the Visvalingam-Whyatt algorithm