Více

Zjednodušit geometrii dlaždic při zachování čehokoli na hraně

Zjednodušit geometrii dlaždic při zachování čehokoli na hraně


Mám datovou sadu polygonů rozdělenou na rovnoměrně velké dlaždice. Jak je mohu zjednodušit, ale ne podél okrajů dlaždic, aby při spojování dlaždic mezi sebou nebyly žádné mezery mezi spojitými prvky? Zde jsou například dvě zjednodušené dlaždice:

Po zjednodušení se mezi dvěma polovinami Antarktidy vytvoří „šev“:

Zde jsou seznamy nezjednodušených a zjednodušených souborů GeoJSON. V současné době rozděluji původní geometrie na dlaždice a pak zjednodušení a jedním z řešení se zdá být obrácení tohoto pořadí (zjednodušení a následné obložení), ale to bohužel není z architektonických důvodů proveditelné. Upřednostňuje se řešení PostGIS, ale alternativy jsou vítány!


Po nějakém vyšetřování jsem se rozhodl pro následující řešení: zjednodušit polygony před vyřezávání dlaždice. Moje počáteční řešení by:

  1. identifikujte všechny překrývající se / obsažené geometrie pro ohraničující rámeček dlaždice
  2. vyřízněte přesnou dlaždici a ořízněte všechny geometrie, které se táhly přes okraj
  3. zjednodušit všechny geometrie, což vytváří hraniční švy, kdykoli se geometrie přímo na hraně posunula od ní

Přepnul jsem 2.) a 3.), takže nejprve zjednodušíme všechny geometrie a poté extrahujeme dlaždici, což znamená, že všechny geometrie, které skončí uvnitř, jsou vždy dokonale zarovnány se stranami. Všimněte si, že to způsobí výkonnostní zásah, protože například můžete vytvářet dlaždici, která obsahuje trochu pobřeží USA, a před vyříznutím dlaždice, kterou chcete, by bylo nutné zjednodušit celý polygon pobřeží USA, než jej vyříznout nejprve a poté zjednodušit mnohem menší geometrii. Abych to obešel, představil jsem před zjednodušením další krok:

  1. identifikujte všechny překrývající se / obsažené geometrie pro ohraničující rámeček dlaždice
  2. vystřihnout dlaždici o něco větší (v mém případě o libovolný faktor 0,1) než ta, kterou budete nakonec chtít vytvořit, abyste snížili množství zbytečného zjednodušení, které je třeba provést v dalším kroku
  3. zjednodušit všechny geometrie ve větší dlaždici
  4. vyřízněte přesně požadovanou dlaždici z větší a ořízněte všechny geometrie, které se táhly přes okraj

To znamená, že geometrie jsou stále zjednodušeny podél hranic, které leží mimo dlaždici, která bude nakonec vyříznuta, ale děláme to pro mnohem menší, než by tomu bylo jinak (například již nezjednodušujeme celý americký poly, ale jen oblast, která mírně obklopuje naši požadovanou dlaždici). Protože ke zjednodušení nedochází podél okraje dlaždice, stále to řeší problém se švy.

Alternativní řešení

Alternativní řešení, které jsem zvažoval, ale neprozkoumal, bylo právě implementace mé vlastní verze Douglas-Peuckerova zjednodušujícího algoritmu, což je to, co ST_Simplify používá interně (opět zde pomocí PostGIS), a někde napevno podmíněné, což mu brání v zjednodušení pryč body, které leží na hranici dlaždice. Stačí zkopírovat implementaci zjednodušení libgeos, na kterou se PostGIS spoléhá, ​​a přišroubovat ji někde uvnitř. Zdá se, že by to bylo náchylné k chybám a mohlo by to být špatný nápad, ale je to pravděpodobně proveditelné.


Podívejte se na video: Jak položit a vyspárovat venkovní dlažby?