Verschlagwortet: Mapsforge Kartenerstellung
- AutorBeiträge
- August 28, 2021 um 12:32 Uhr #44572bm.ffbTeilnehmer
Hallo OpenAndroMaps Team,
Ich finde eure Karten seit Jahren super und nutze sie ständig.
Aber jetzt hat mich der Ehrgeiz gepackt und ich würde gerne für Teilbereiche eigene Karten erstellen.
Ich beschäftige mich schon länger mit der Erstellung von OSM-basierten Karten für Garmin-GPS Geräte und habe dazu ein eigenes kleines Tool veröffentlicht (https://www.maiwolf.de/gps/).
Nun würde ich gerne auch ähnliche Karten für die Locus App am Android Smartphone erstellen. Dazu habe ich mich mit der mapsforge library beschäftigt. Ich kann inzwischen Karten im .map Format erstellen. Dafür würde ich gerne meine eigenen Kartenthemen (outdoor, desert: https://www.maiwolf.de/locus/) verwenden.
Dementsprechend habe ch für meine ersten TEST-Karten das Tag-transform und das Tag-mapping von euch ausprobiert. Ich kann eine TEST-Karte erstellen (sogar topographisch dank phyghtmap Köhenlinien), deren Theme ich in Locus aber nicht verändern kann (mein eigenes Kartenthema wird nicht angeboten). In der Kartenübersicht wird die TEST-Karte auch mit einem anderen Symbol dargestellt.
Hier mal mein einfaches Skript für die Kartenerstellung (erst osmosis tag-transform, dann im 2. Schritt der map-writer (Version 0.6.1)):D:\_KARTENBAU\_TOOLS\osmosis\bin\osmosis ^ --rb D:\_KARTENBAU\_DATA\TEST.pbf ^ --tag-transform file=D:\_KARTENBAU\tagtransform.xml ^ --write-xml file=D:\_KARTENBAU\TEST_transformed.osm 2>>log_mapcreator.txt D:\_KARTENBAU\_TOOLS\osmosis\bin\osmosis ^ --rx file=D:\_KARTENBAU\TEST_transformed.osm ^ --mw file=D:\_KARTENBAU\test.map ^ type=hd ^ tag-conf-file=D:\_KARTENBAU\tagmapping.xml 2>>log_mapcreator.txt
Ist das die falsche mapsforge Version für „V4“ Karten? Fehlt noch ein Schritt? Wie hängt das alles mit dem Kartenthema zusammen?
Grüße
BernardSeptember 1, 2021 um 11:25 Uhr #44626bm.ffbTeilnehmerHallo OpenAndroMaps Team,
ich habe inzwischen den Fehler selber gefunden. Es war die falsche Kombination der Versionen von Osmosis, map-writer (mapsforge) und Rendertheme. Jetzt klappt es prima, allerdings dauert es an einem normalen Laptop etwas (Bayern-Karte braucht 2,5 Stunden an einem i7, 16GB RAM Gerät).
Hier die verwendeten Versionen:
– osmosis Version 0.48.3
– mapsforge-map-writer-0.16.0-jar-with-dependencies
– Python 2.7 mit phyghtmap 1.72
– und im Kartenthema:
<rendertheme xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“ xmlns=“http://mapsforge.org/renderTheme“ xsi:schemaLocation=“http://mapsforge.org/renderTheme https://raw.githubusercontent.com/mapsforge/mapsforge/master/resources/renderTheme.xsd“ version=“5″ map-background=“#FAFAFA“ map-background-outside=“#EEEEEE“>Wen es interessiert, hier mal mein Batchskript, mit dem ich rechteckige und Polygon-basierte Karten erzeugen kann. Ich verwende dazu eine etwas abgewandelte Version des OpenAndroMaps Tagmapping und Transform.
@echo off color 0E :: Kartendaten ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ set mapname=Bayern set boundary=11.1,47.6,11.8,48.0 set boundary2=%boundary:,=:% set poly=D:\_KARTENBAU\_DATA\bayern.poly set datafile=D:\_KARTENBAU\_DATA\bayern.osm.pbf :: Standard Werte +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ set mapproject=D:\_KARTENBAU\%mapname%\%mapname% set projectpath=D:\_KARTENBAU\%mapname%\ set mappath=D:\_KARTEN\ set mapcreatorpath=D:\_KARTENBAU\MapCreator\ set toolpath=D:\_KARTENBAU\_TOOLS\ set datapath=D:\_KARTENBAU\_DATA\ set pythonpath=C:\Python27\ set javaMem=4000 set ele_step=20 set ele_medium_large=500,100 set step=1 mkdir D:\_KARTENBAU\%mapname% cd %projectpath% :: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ echo. echo Die Kartenerstellung wird in folgende Abschnitte (=Schritte) unterteilt: echo. echo 1. Ausschneiden der OSM-Daten (nach Koordination-Rechteck oder nach Polygon Grenzen) echo 2. Laden der Hoehendaten (nach Koordination-Rechteck oder nach Polygon Grenzen) echo 3. Kombinieren der OSM- und Hoehendaten echo 4. Osmosis Tag-Transform echo 5. Rendern der Karte mit mapsforge echo. echo Die Karte wird mit folgenden Parametern angelegt: echo. echo Kartenname: %mapname% echo Polygon Datei: %poly% echo Bereich: %boundary% echo OSM-Daten Datei: %datafile% echo ------------------------------------------------------------------------------- echo !!! Wenn NICHT mit Schritt -1- gestart werden soll, dann hier den entsprechenden Startpunkt (Schritt) als Zahl eingeben. !!! echo. set /p step=Direkt zu Schritt: set stepid=:Schritt%step% echo Start um: %date:~0% - %time:~0% echo Start um: %date:~0% - %time:~0% >> mapcreator_log.txt echo. echo. >> mapcreator_log.txt echo Erstellung der Karte - %mapname% - (Beginn bei Schritt %step%) echo Erstellung der Karte - %mapname% - (Beginn bei Schritt %step%) >> mapcreator_log.txt echo. echo. >> mapcreator_log.txt goto %stepid% :: OSM Daten ausschneiden +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ :Schritt1 echo. echo === Schritt 1: OSM Daten werden mit OSMCONVERT ausgeschnitten . . . echo === Schritt 1: OSM Daten werden mit OSMCONVERT ausgeschnitten . . . >> mapcreator_log.txt REM (wird für Rechteck-Karten genutzt) -b=%boundary% ^ call %toolpath%\osmconvert\osmconvert ^ --hash-memory=%javaMem% ^ --drop-author ^ --drop-version ^ --drop-broken-refs ^ --complete-multipolygons ^ --complete-boundaries ^ %datafile% ^ -B=%poly% ^ -o=%mapproject%_osmdaten.pbf >> mapcreator_log.txt 2>> mapcreator_errorlog.txt :: Hoehendaten laden ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ :Schritt2 echo === Schritt 2: Hoehen-Daten werden mit Phyghtmap geladen . . . echo === Schritt 2: Hoehen-Daten werden mit Phyghtmap geladen . . . >> mapcreator_log.txt C: cd %pythonpath% REM (wird für Rechteck-Karten genutzt) --area=%boundary2% ^ call phyghtmap ^ --polygon=%poly% ^ --step=%ele_step% ^ --osm-version=0.6 ^ --jobs=2 ^ --line-cat=%ele_medium_large% ^ --source=view3 ^ --no-zero-contour ^ --start-node-id=10000000000 ^ --start-way-id=10000000000 ^ --max-nodes-per-tile=0 ^ --hgtdir=%hgtpath% ^ --o5m ^ --output-prefix=%mapproject%_hoehendaten >> mapcreator_log.txt 2>> mapcreator_errorlog.txt D: cd %projectpath% timeout 3 > NUL ren %mapname%_hoehendaten*.o5m %mapname%_hoehendaten.o5m >> mapcreator_log.txt 2>> mapcreator_errorlog.txt :: OSM Daten und Hoehendaten zusammenfuehren ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ :Schritt3 echo === Schritt 3: OSM-Daten und Hoehen-Daten werden zusammengefuehrt . . . echo === Schritt 3: OSM-Daten und Hoehen-Daten werden zusammengefuehrt . . . >> mapcreator_log.txt call %toolpath%\osmconvert\osmconvert ^ --hash-memory=%javaMem% ^ --drop-version ^ %mapproject%_hoehendaten.o5m ^ %mapproject%_osmdaten.pbf ^ -o=%mapproject%.pbf >> mapcreator_log.txt 2>> mapcreator_errorlog.txt :: Osmosis Tag-Transform ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ :Schritt4 echo === Schritt 4: Osmosis Tag-Transform . . . echo === Schritt 4: Osmosis Tag-Transform . . . >> mapcreator_log.txt call %toolpath%\osmosis\bin\osmosis ^ --read-pbf file=%mapproject%.pbf ^ --tag-transform file=%mapcreatorpath%tagtransform.xml ^ --write-pbf file=%mapproject%_transformed.pbf 2>>mapcreator_errorlog.txt :: Osmosis Mapsforge Map-Writer +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ :Schritt5 echo === Schritt 5: Osmosis Mapsforge Map-Writer rendert Karte . . . echo === Schritt 5: Osmosis Mapsforge Map-Writer rendert Karte . . . >> mapcreator_log.txt call %toolpath%\osmosis\bin\osmosis ^ --read-pbf file=%mapproject%_transformed.pbf ^ --mw file=%mapproject%.map ^ type=hd ^ tag-conf-file=%mapcreatorpath%tagmapping.xml ^ simplification-factor=3.0 ^ preferred-languages=de,en ^ comment="(c) Map: MeineKarte; Map data: OpenStreetMap; Contour data: U.S. Geological Survey and J. de Ferranti" 2>>mapcreator_errorlog.txt :: Meldung am Ende +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ color A0 echo. echo. >> mapcreator_log.txt echo Die Karte wurde erfolgreich erstellt echo Die Karte wurde erfolgreich erstellt >> mapcreator_log.txt echo Fertig um: %date:~0% - %time:~0% echo Fertig um: %date:~0% - %time:~0% >> mapcreator_log.txt echo. pause
Vorteil:
Ich kann zeitnah mit aktuellen OSM-Daten zu einem von mir gewählten Bereich eine Karte erstellen. Dabei kann man gerade über das Tagmapping die in der Karte angezeigten Daten nach seinen Bedürfnissen anpassen.
Nachteil:
Ich habe noch nicht verstanden, wie man die Gipfel- und Orts-Dominanzen einbaut. Dadurch erscheinen bei mir z.B. allle Gipfel gleich gewichtet. Wahrscheinlich müssen dafür per Skript die OSM-Daten vor dem Tagtransform angepasst werden.
Da wäre ich sehr an dem Skript interessiert. Gibt es das?
Ich möchte euch definitiv keine Konkurrenz machen! Eure Karten bleiben die besten Karten!
Aber machmal wäre es nett, von einem kleinen Bereich ein eigene Karte zu bauen.
Grüße
Bernard1 Teilnehmer(n) gefällt dieser Beitrag
September 30, 2021 um 09:40 Uhr #44939bm.ffbTeilnehmerHallo OpenAndroMaps Team,
auch ich war länger im Urlaub (mit dem Rad durch die Pyrnäen, natürlich mit OpenAndroMaps Karten) und will mich nun erneut mit der Kartenerstellung befassen.
Deshalb bin ich immer noch sehr interessiert zu erfahren, wie man Gipfel- und Orts-Dominanzen in eine Karte einbaut. Ich nehme an, dass dazu die OSM-Daten angepasst werden. Die Liste der entsprechenden Peak-Daten habe ich inzwischen gefunden, aber ich weiß noch nicht, wie ich damit die OSM-Daten anpassen/ergänzen kann.
Über eine kleine Hilfestellung würde ich mich sehr freuen.
Grüße
BernardOktober 1, 2021 um 09:13 Uhr #44950ChristianKAdministratorI prozess the peaks/saddles right from the planet file
Download the Data :
wget --no-check-certificate https://geo.dianacht.de/topo/topographic_isolation_viefinderpanoramas.txt wget --no-check-certificate https://geo.dianacht.de/topo/saddledirection_viefinderpanoramas.100.txt
Filter data from planet file osmfilter m:\osm_data\planet\planet.o5m --keep-nodes="natural=peak =volcano =saddle =notch =col mountain_pass=yes" --drop-ways --drop-relations --ignore-dependencies --hash-memory=3000 -o=planet_peaks_saddles.osm
Write a modified dataset (Perl without any lib, its just plain, fast Perl)
Finaly you have to extraxt the area for for your map and merge it to the osm-data so that the peak/saddle dataset overwrites the original OSM IDs.#!/usr/bin/perl # use strict; my @csv_node_list; # 2d array my @line_arr; #array for ONE line from csv file my @csv_node_list_arr; my @peak_arr; #Sorted array from maxbe csv [0]=ID [3]=distance => adr:hausenumber [4]= dist => peak_dist my @saddle_arr; #Sorted saddle array with directions of saddles [0]=ID [3]=direction => direction my $csv_peak_file = "topographic_isolation_viefinderpanoramas.txt"; my $csv_saddle_file = "saddledirection_viefinderpanoramas.100.txt"; my $planet_filtered_file = "planet_peaks_saddles.osm"; my $fileout = "peaks_saddles_processed_base.osm"; my $id_csv = ""; my $id_xml = ""; my $dist_maxbe = 0; my $dist_group = ""; my $direction = ""; my $line = ""; my $lon = ""; my $lat = ""; my $dummy_id = ""; my $cnt_peak = 0; my $cnt_saddle = 0; my $version = 0; my $header_string = ""; #read peak_dist list from maxbe, add grouped dist and make array print "reading maxbe peak csv\n"; open ( fhcsv, "<" , $csv_peak_file ) or die $!; while ($line = <fhcsv>) { if ( substr ($line, 0, 1) ne "#") { chomp($line); my @line_arr = split (/;/,$line); $dist_maxbe = @line_arr[3]; if ($dist_maxbe < 1200) { $dist_group = "pd_5"; } elsif (($dist_maxbe >= 1200) and ($dist_maxbe < 5000)) { $dist_group = "pd_4"; } elsif (($dist_maxbe >= 5000) and ($dist_maxbe < 9000)) { $dist_group = "pd_3"; } elsif (($dist_maxbe >= 9000) and ($dist_maxbe < 25000)) { $dist_group = "pd_2"; } elsif (($dist_maxbe >= 25000) and ($dist_maxbe < 100000000)) { $dist_group = "pd_1"; } @line_arr[4] = $dist_group; #write array push @csv_node_list_arr, \@line_arr; # print "$id_csv \n"; } } close(fhin); print "sorting array\n"; my @peak_arr = sort { $a->[0] <=> $b->[0] } @csv_node_list_arr; #read saddle directions list from maxbe, print "reading maxbe saddle directions csv\n"; @csv_node_list_arr = (); @line_arr = (); open ( fhcsv, "<" , $csv_saddle_file ) or die $!; while ($line = <fhcsv>) { if ( substr ($line, 0, 1) ne "#") { chomp($line); my @line_arr = split (/;/,$line); push @csv_node_list_arr, \@line_arr; } } close(fhin); print "sorting array\n"; my @saddle_arr = sort { $a->[0] <=> $b->[0] } @csv_node_list_arr; # testausgabe print "writing sorted peaks array\n"; open(fhout, ">","peaks_sorted.csv") or die $!; for my $row (@peak_arr) { print fhout join(",", @{$row}), "\n"; } close(fhout); print "writing sorted saddle array\n"; open(fhout, ">","saddle_sorted.csv") or die $!; for my $row (@saddle_arr) { print fhout join(",", @{$row}), "\n"; } close(fhout); #open filtered peaks and saddles from planet file, check against @csv_node_list and write result_peaks_saddles.osm print "writing osm\n"; # open input file open(XML, "<",$planet_filtered_file) or die $!; open(fhout, ">",$fileout) or die $!; my $t; my $id_peak; my $id_saddle; # index arrays for faster search my @peakListIndex = (); foreach $t (@peak_arr) { my ($id_peak) = @{$t}; push( @peakListIndex, $id_peak ); } my @saddleListIndex = (); foreach $t (@saddle_arr) { my ($id_saddle) = @{$t}; push( @saddleListIndex, $id_saddle ); } my %PosPeak; $PosPeak{ $peakListIndex[$_] } = $_ for 0 .. $#peakListIndex; my %PosSaddle; $PosSaddle{ $saddleListIndex[$_] } = $_ for 0 .. $#saddleListIndex; # parse data while(my $line = <XML>) { # node data if($line =~ /^\s*\<node/) { my ($id) = ($line =~ /^\s*\<node id=[\'\"](\d+)[\'\"]/); # version++ #my ($version) = ($line =~ /^\s*\<node.*version=[\'\"](\d+)[\'\"]/); #$header_string = "version=\" . $version . \""; print fhout $line; # search in @peak_arr for data #my $index = first { $peakListIndex[$_] eq $id } 0 .. $#peakListIndex; my $index = $PosPeak{$id}; if (defined $index) { my $peak_row = @peak_arr[$index]; my ($id_csv, $lon, $lat, $dist_maxbe, $dist_group) = @{$peak_row}; $cnt_peak++; #print "Peak " . $cnt_peak . " \r"; #print "Peak $cnt_peak\t$id\t$id_csv\r"; # print fhout "\t\t<tag k=\"dummy_id_peak\" v=\"$id_csv\" \/>\n"; print fhout "\t\t<tag k=\"peak_dist\" v=\"$dist_group\" \/>\n"; # print fhout "\t\t<tag k=\"addr:housenumber\" v=\"$dist_maxbe\" \/>\n"; #splice( @peak_arr, $index, 1 ); #splice( @peakListIndex, $index, 1 ); #goto SHORTIT; } # search in @saddle_arr for data #my $index = first { $saddleListIndex[$_] eq $id } 0 .. $#saddleListIndex; my $index = $PosSaddle{$id}; if (defined $index) { my $saddle_row = @saddle_arr[$index]; my ($id_csv, $lon, $lat, $direction) = @{$saddle_row}; $cnt_saddle++; #print "Saddle " . $cnt_saddle . " \r"; #print "Saddle $cnt_saddle\t$id\t$id_csv\r"; print fhout "\t\t<tag k=\"dummy_id_saddle\" v=\"$id_csv\" \/>\n"; print fhout "\t\t<tag k=\"dir_saddle\" v=\"ds_$direction\" \/>\n"; #splice( @saddle_arr, $index, 1 ); #splice( @saddleListIndex, $index, 1 ); } SHORTIT: print "Peak: " . $cnt_peak . " Saddle: " . $cnt_saddle . " \r"; } else { print fhout $line; } } # print fhout "</osm>\n"; close(fhout); print "Found $cnt_peak Peaks and $cnt_saddle Saddles\n"; # ausgabe restliche ids print "writing sorted peaks array\n"; open(fhout, ">","peaks_remaining.csv") or die $!; for my $row (@peak_arr) { print fhout join(",", @{$row}), "\n"; } close(fhout); print "writing sorted saddle array\n"; open(fhout, ">","saddle_remaining.csv") or die $!; for my $row (@saddle_arr) { print fhout join(",", @{$row}), "\n"; } close(fhout);
Have fun
Oktober 1, 2021 um 09:29 Uhr #44954bm.ffbTeilnehmerHallo Christian,
besten Dank für die Infos. Ich werde mir das mal in Ruhe anschauen.
Grüße
BernardNovember 9, 2021 um 13:37 Uhr #45597bm.ffbTeilnehmerHallo Christian,
die Kartenerstellung läuft inzwischen problemlos (und damit konnte ich meinen Vorschlag zu Parkplätzen – siehe Beitrag im Bereich Renderthemes – gut testen). Ich hänge aber noch bei dem Einbau der Peak-Prominenz. Ich verstehe die Schritte soweit. Das von dir gezeigte Perl-Skript läuft, aber die Statistik sagt immer, dass kein „Peak and Saddle“ gefunden wurde.
Hier mein Vorgehen:
1. Ich lade mit Wget die „Isolation“ Daten (funktioniert)
2. Ich filter die peaks und saddles (z. B. aus Bayern ergibt das 8389 nodes) und es entsteht eine „peaks_saddles.o5m“ Datei
3. Ich prozessiere die Daten mit dem Perl-Skript (die Dateinamen sind entsprechend angepasst) und es entsteht eine „peaks_saddles_processed.osm“ Datei. In der Ausgabe steht:reading maxbe peak csv sorting array reading maxbe saddle directions csv sorting array writing sorted peaks array writing sorted saddle array writing osm Found 0 Peaks and 0 Saddles writing remaining peaks array writing remaining saddle array
Wenn ich mit nun mit osmconvert die Statistik der Datei „peaks_saddles_processed.osm“ anschaue, dann erhalte ich:
osmconvert Warning: invalid .o5m string reference: 6->417640 osmconvert Warning: unknown .o5m dataset id: 0x00 osmconvert Warning: unknown .o5m dataset id: 0x8f osmconvert Warning: unknown .o5m dataset id: 0x65 osmconvert Warning: unexpected end of input file: D:\_KARTENBAU\PEAKS\peaks_saddles_processed.osm timestamp min: 2020-10-16T11:01:28Z timestamp max: 2021-05-16T17:01:27Z lon min: 11.8867038 lon max: 13.3011918 lat min: 47.6726326 lat max: 47.6726331 nodes: 2 ways: 0 relations: 0 node id min: 14390072 node id max: 21634385 keyval pairs max: 8 keyval pairs max object: node 21634385
Für mich klingt das, als ob das Perl-Skript nicht die richtige Ausgabe schreibt. Es kann ja nicht sein, dass für ganz Bayern nur 2 Nodes gefunden werden, für die peak/saddle Daten verändert werden können.
Ich kann die Daten zwar mergen (mit den bayern.osm.pbf Daten) und mit mapsforge eine Karte erstellen, aber die enthält nun – wie erwartet – keine Peak-Prominenz.
Was mache ich falsch?Grüße
BermardNovember 9, 2021 um 14:10 Uhr #45604ChristianKAdministratorDas perl Script braucht als source eine osm Datei, keine o5m.
November 9, 2021 um 15:00 Uhr #45606bm.ffbTeilnehmerGenial! Das war es. Es funktioniert nun bestens.
Da habe ich wohl nicht richtig gelesen!
Danke und Grüße
Bernard1 Teilnehmer(n) gefällt dieser Beitrag
November 12, 2021 um 18:31 Uhr #45666bm.ffbTeilnehmerJetzt habe ich doch einmal Fragen hinsichtlich:
1. dem „popcat“ Tag. Er ist ja hilfreich, um die Anzeige der Orte nach ihrer Einwohnerzahl zu beeinflussen. Wie macht ihr das? Eigenes Perl Skript?
Ich habe es mit einer Ergänzung im tag-transform versucht und es scheint zu funktionieren. Ich das ein geeigneter Weg?<translation> <name>population to popcat</name> <description>translate population count to popcat tag</description> <match mode="and"> <tag k="place" match_id="p" v="(.*)"/> <match mode="or"> <tag k="population" match_id="p0" v="(^\d\d\d)"/> <tag k="population" match_id="p1" v="(^[1-4]\d\d\d)"/> <tag k="population" match_id="p2" v="(^[5-9]\d\d\d)"/> <tag k="population" match_id="p3" v="(^[1]\d\d\d\d)"/> <tag k="population" match_id="p4" v="(^[2]\d\d\d\d)"/> <tag k="population" match_id="p5" v="(^[3-4]\d\d\d\d)"/> <tag k="population" match_id="p6" v="(^[5-9]\d\d\d\d)"/> <tag k="population" match_id="p7" v="(^[1]\d\d\d\d\d)"/> <tag k="population" match_id="p8" v="(^[2-4]\d\d\d\d\d)"/> <tag k="population" match_id="p9" v="(^[5-9]\d\d\d\d\d)"/> <tag k="population" match_id="p10" v="(^\d\d\d\d\d\d\d)"/> </match> </match> <output> <copy-unmatched/> <tag k="place" from_match="p" v="{1}"/> <tag k="popcat" from_match="p0" v="pc_1"/> <tag k="popcat" from_match="p1" v="pc_1000"/> <tag k="popcat" from_match="p2" v="pc_5000"/> <tag k="popcat" from_match="p3" v="pc_10000"/> <tag k="popcat" from_match="p4" v="pc_20000"/> <tag k="popcat" from_match="p5" v="pc_30000"/> <tag k="popcat" from_match="p6" v="pc_50000"/> <tag k="popcat" from_match="p7" v="pc_100000"/> <tag k="popcat" from_match="p8" v="pc_200000"/> <tag k="popcat" from_match="p9" v="pc_500000"/> <tag k="popcat" from_match="p10" v="pc_1000000"/> </output> </translation>
2. dem „bBoxWeight“ Tag. Er wird in den OpenAndroMaps für viele Landschaftsmerkmal verwendet (water, wood, glacier …). Wie generiert ihr das? Und wie bekommt ihr das auf eine node getaggt (denn eine Flächen-Klasse kann nur von einem geschlossenen Weg/Multipolgon bestimmt werden, im Theme wird dann aber auf ein node eingeschränkt)?
In meinem Kartenbauskript wird im ersten Schritt der gewünschte Kartenausschnitt aus einer OSM-Datendatei (z. B. Bayern als .osm.pbf Datei von der Geofabrik) mit „osmconvert“ ausgeschnitten. Dabei verwende ich die Option „–add-bboxweight-tags“. Damit bekomme ich am Ende auch die bBoxWeight Tags in den Datenfile, aber nur für ways und relations.
Dezember 1, 2021 um 23:24 Uhr #45996bm.ffbTeilnehmerHallo Christian,
inzwischen habe ich, glaube ich, selber eine Lösung gefunden. Ich habe weitere Schritte in den Kartenbau-Prozess eingebaut. Mit osmconvert und der Option „–all-to-nodes“ erzeuge ich nodes für alle Polygone. Diese filtere ich anschließend mit osmfilter und der Option „–keep=“ und ausgewählten Tags (z. B. natural=glacier) heraus. Diese gefilterten nodes (die alle ein bboxweight Tag tragen) merge ich dann mit den Höhendaten, den „peaks and saddles“ und den „transformed“ OSM Daten. Das Ergebnis ist dann der Ausgang für den mapsforge mapfile-writer.
So weit, so gut. Nun kann ich damit problemlos vollwertige Karten von Land-Regionen erstellen.
ABER:
Regionen, die Meer und Küstenlinien enthalten bleiben aber leer. Es wird kein Meer gezeichnet und Landgrenzen kann man nur über die Höhenlinien und andere Wege und Flächen erkennen.
Ich weiß, dass ich dazu wohl die Land/Sea-Polygone am Anfang mit einarbeiten muss. Ich weiß auch, wo ich diese finde (https://osmdata.openstreetmap.de/data/land-polygons.html). Aber das .shp (shapefile) Format macht mir Schwierigkeiten.
Wie hast du für die OpenAndroMaps den Prozess aufgesetzt? Oder geht das nicht vernünftig auf einem Windows Rechner? Viele Tools finde ich nur für Mac oder Linux.
Oder gibt es die Landpolygone für z. B. Europa irgendwo fertige .osm Dateien zum download?Dezember 17, 2021 um 15:39 Uhr #46339bm.ffbTeilnehmerAn Alle,
ich habe mein Kartenbau-Skript fertig gestellt. Es ist ein Batch-Skript und läuft auf jedem Windows Rechner (sofern die notwendige Hilfssoftware installiert ist). Alle Details und Links findet ihr auf meiner Webseite. Dort habe ich versucht, den Prozess einer Kartenerstellung zu dokumentieren.
Ich habe die damit erstellten Karten OpenOutdoorMap genannt. Eine Testkarte gibt es auch zum Download.
OpenOutdoorMap – Erstellung eigener Mapsforge Karten
Über Anregungen, Ideen, Fehler …. würde ich mich freuen.
Grüße
Bernard1 Teilnehmer(n) gefällt dieser Beitrag
Dezember 18, 2021 um 20:14 Uhr #46382TobiasAdministratorHallo Bernard,
schön, dass du deine Erkenntnisse so gut dokumentierst und teilst, da haben sicher andere auch noch was davon!
Viele Grüße,
TobiasDeveloper of Elevate mapstyle
1 Teilnehmer(n) gefällt dieser Beitrag
Januar 12, 2022 um 18:04 Uhr #46802bm.ffbTeilnehmerInzwischen ist mir aufgefallen, dass meine „tollen“ Karten natürlich keine Rad- und Wanderrouten enthalten. Ich vermute, dass das auch nur über ein PreProcessing geht. Verwendet ihr dafür ein eigenes Skript?
Ich weiß, wie ich die entsprechenden Routen als relations filtern kann, aber für einen vernünftige Darstellung und vor allem Beschriftung der Routen müsste mal wohl die Tags der relations auf die Tags der way-members kopieren und da komme ich nicht weiter. Mit einem reinen tag-transform würde ich zwar eine farbliche Liniendarstellung schaffen, aber nur ohne Beschriftung.
Könntet ihr mir bitte mal euer Skript schicken?
Viele Grüße
Bernard - AutorBeiträge
- Sie müssen angemeldet sein, um zu diesem Thema eine Antwort verfassen zu können.