Skip to content

Falha na fonte de GeoJSON #34

@ppKrauss

Description

@ppKrauss

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:
    1. Separado o backup full (pouco usado e disponível nos backups de planet)
    2. GeoJSON de geometria simplificada, conforme critérios adequados, para que forneça área, perímetro, etc. razoáveis.
    3. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions