Viewing 13 posts - 1 through 13 (of 13 total)
  • Author
    Posts
  • #44572
    bm.ffb
    Participant

    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
    Bernard

    #44626
    bm.ffb
    Participant

    Hallo 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&#8221; xmlns=”http://mapsforge.org/renderTheme&#8221; xsi:schemaLocation=”http://mapsforge.org/renderTheme https://raw.githubusercontent.com/mapsforge/mapsforge/master/resources/renderTheme.xsd&#8221; 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
    Bernard

    1 user thanked author for this post.
    #44939
    bm.ffb
    Participant

    Hallo 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
    Bernard

    #44950
    Avatar photoChristianK
    Keymaster

    I 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

    #44954
    bm.ffb
    Participant

    Hallo Christian,
    besten Dank für die Infos. Ich werde mir das mal in Ruhe anschauen.
    Grüße
    Bernard

    #45597
    bm.ffb
    Participant

    Hallo 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
    Bermard

    #45604
    Avatar photoChristianK
    Keymaster

    Das perl Script braucht als source eine osm Datei, keine o5m.

    #45606
    bm.ffb
    Participant

    Genial! Das war es. Es funktioniert nun bestens.
    Da habe ich wohl nicht richtig gelesen!
    Danke und Grüße
    Bernard

    1 user thanked author for this post.
    #45666
    bm.ffb
    Participant

    Jetzt 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.

    #45996
    bm.ffb
    Participant

    Hallo 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?

    #46339
    bm.ffb
    Participant

    An 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
    Bernard

    1 user thanked author for this post.
    #46382
    Avatar photoTobias
    Keymaster

    Hallo Bernard,
    schön, dass du deine Erkenntnisse so gut dokumentierst und teilst, da haben sicher andere auch noch was davon!
    Viele Grüße,
    Tobias

    Developer of Elevate mapstyle

    1 user thanked author for this post.
    #46802
    bm.ffb
    Participant

    Inzwischen 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

Viewing 13 posts - 1 through 13 (of 13 total)
  • You must be logged in to reply to this topic.