Hej igen! I detta mejl tänker jag beskriva mina försök att lösa tidigare upptäckta problem med sträckors självkorsningar och "knäppning" av nya sträckor till befintliga gränser.
I ett föregående mejl gav Karl-Johan mig en ny idé som jag också vill utveckla vidare. Tidigare skrev jag att vektordatat brukade innehålla flertal självkorsningar på sträckorna. Jag förbättrade mina skript för att hitta och radera små "öglor" som var de vanligaste. Sedan blev läget med korta öglor bättre, men då började närliggande ytor krypa på varandra, typiskt med bara en nod som blev juuuust 0,0000001 grader till höger eller vänster till där den borde stanna. Inga av sådana problem fanns i GRASS GIS-lagrena som jag använde inför exporteringen till OSM-filer. Alla datarensningar som jag utförde i GRASS GIS rapporterade inga problem. Det förvirrade mig omåttligt tills jag märkte att GRASS GIS använde koordinater med 11 siffror efter kommatecken och sparade dem som GML-filer, varpå reducerade JOSM dem till 7 siffror [1]. Den reducerade precisionen ledde till att noder kunde flytta just lite gran men det kunde skapa nya överlappningar och självkorsningar. Det betyder att alla fina databearbetningar som GRASS GIS och andra externa verktyg kan göra kan inte hjälpa om det sista steget tappar siffror. Och att de sista turen på datarensningen skulle utföras i JOSM, annars blir allt värdelöst. Det andra problemet som pekas ut av flera personer är att nya ytor ofta brukar överlappa med t ex bilvägar eller andra ytor såsom sjöar. Överlappandet är alltid minimalt men ser irriterande ut och får aldrig något godkännande i OSM-smhället. För att hjälpa med lösningen har olika GIS-system passande verktyg, för att knäppa noder till gemensamma gränser, eller att bryta polygoner om de korsar varandra och så vidare. JOSM saknar tyvärr liknande verktyg och dessutom kan inte knäppa noder i hela datalagret, endast enstaka objekt som väldes manuellt. Man kan väl utföra datarensningen utanför JOSM? Men då behöver man ladda både baslagret och NMD-datalagret i t ex GRASS GIS så att den kunde känna till både gamla och nya objekt. Detta skulle kräva flertal dataformats konverteringar: från OSM till GRASS databas och tillbaka. De förstår inte varandras filformat. Därför bestämde jag mig inte försöka göra några nodersknäppning eller polygonbrytning i mina Python-skript — de är redan för långsamma och gynnar inte återanvändning. Det kräver ett korrekt verktyg i korrekt plats, nämligen ett slags insticksmodul för areors conflation in JOSM. För att göra hela uppdraget mer hanterbart vill jag nu dela landets yta i ännu mindre delytor. Samtidigt vill jag vara mer försiktigt med datats automatiska utjämning. Om det ska bli möjligt vill jag även försöka att skapa bättra verktyg för JOSM, istället för de nuvarande kassa Python-skripten som gör för grovt jobb utan människas kontroll. Så här är översikten. 1. Skära landets/kommunernas yta i mindre jämna kvadrater 5x5 km. Borde kvadraters sida vara 1 km? 25 km? dina förslag? 2. För varje kvadrat konvertera NMD-rastern till vektor. Släta den sedan med Chaikens filter. Använd inte eller använd sparsamt/varsamt andra typer filter. 3. Konvertera vektorn till ett OSM-lager med samma taggningschema som förut. 4. För varje kvadrat hämta ett OSM-baslager från Geofabrik. 5. Använd inte några Python-skript för att markera några konflikter osv. Gör datasammanblandningen manuellt i JOSM. 6. Använd bland annat sunt förnuft och olika JOSM-verktyg för att lösa alla konflikter. * Valideringsknappen för att upptäcka överlappande gamla/nya ytor och övriga problem. * "Contour Merge" samt "Flytta nod till sträcka" och "Slå ihop noder" — för att se till att intilliggande ytor (t ex skog och sjö) inte överlappas. * Radera-knappen - för att radera alla tvivelaktiga noder/sträckor. * "Simplify Way", "Simplify Area" — för att minska antal noder, att släta sträckor 7. Ladda upp ändringar till databasen och markera kvadraten som klar. Några fördelar som jag ser med denna approach. 1. Större kontroll under vad som kommer att laddas upp. En människa kan visuellt och manuellt kontrollera en lagom stor kvadrat under en rimligt tidsram. Däremot med hela kommuner som kan vara väldigt stora är det påfrestande. Det kan till och med ske att vissa uppladdningar inte ska klassificeras som "import" alls: om en person sett på var och ett objekt i changeseten. 2. Mindre irriterande hål och artefakter efter utjämningen. Som jag upplever det ger Chaiken-filtret avsevärt mindre självkorsningar, korsningar och dylikt. Sedan kan man tillämpa andra filter manuellt i enstaka fall till enstaka sträckor vid behov. 3. JOSM blir mindre belastad med datat. Att öppna ett område lika stort som Kirunas kommun orkar inte varje dator, men de flesta kan hantera 5×5 km. 4. Problemet med jättemultipolygoner blir mindre sannolikt. Alla sträckor blir sedan begränsade av en kvadrat 25 km². Om hela kvadratens yta är t ex skog reduceras den till fåtal multipolygoner som har deras yttre gränser vid kvadratens kant. Jo, det kan råka illa ändå. I det absolut värsta hypotetiska fallet kan det vika upp till en sträcka med 250 000 noder (antalet pixlar i sådan kvadrat). Men då drabbas bara en kvadrat av det och olika åtgärder kan göras. 5. Mindre antal konflikter per area som gör det enklare att lösa dem under rimlig tid. JOSM skulle kunna lösa dem relativt snabbt, jämfört med det fall när man öppnar ett större lager. Nackdelar och otydliga aspekter som jag ser nu. 1. Det är svårare att ha koll vem gör vad. För att undvika dubbelarbete behöver man markera tydligt vilka kvadrater redan är klara, så att andra inte försöker bearbeta dem på nytt. 2. Med kvadrater som är 5×5 km blir det cirka 18000 stycken för att täcka hela Sverige. Men det är svårt att säga om det skapar mer arbete än det skulle behövas om man försöker ta en kommun i taget: större områden leder till fler konflikter och längre bearbetningstider. 3. Man kan automatiskt uppskatta hur bra en kvadrat i baslagret är kartlagd med "landuse" taggar, och sedan undvika att titta på de kvadrater som redan har gott om skogar, åkermark eller täcks av bostadsområden. Tanken här är samma som med kommuner, men granulariteten ökar. 4. Nya effekter uppstår vid intilliggande kvadraters kanter. 291 kommuner har ju enklare gränser än 18 tusen kvadrater. Men jämför det med hur vissa människor karterar större skogsområden: de delar dem ut i ungefär rektangulära delar. När man blir trött och slutar med ritningen, blir dessa konstgjorda skogsgränser kvar i kartan tills någon vill fortsätta. Så, ingenting nytt här. 5. Man behöver fortfarande lösa konflikter t ex mellan befintliga och nya skogar samt mellan intilliggande befintliga sjöar/vägar och nya skogar och åkermark som brukar "krypa" lite över varandra och överlappas. Oavsett hur stort område sysslar man med, för att hjälpa med sådana problem på riktigt, behöver man ha tillgång till verktyg för att sammanblanda areor. Liksom, `v.clean` i GRASS GIS som har `break`, `rmarea`, `rmsa` osv. Referenser: 1. https://gis.stackexchange.com/questions/320919/can-exporting-geodata-to-osm-data-format-with-less-precision-cause-self-intersec Med vänliga hälsningar, Grigory Rechistov With best regards, Grigory Rechistov
_______________________________________________ Talk-se mailing list Talk-se@openstreetmap.org https://lists.openstreetmap.org/listinfo/talk-se