Zelf OSM data converteren naar een Garmindevice

Hallo,

Ondanks dat ik zeer tevreden ben over de service die Lambertus ons levert heb ik zelf een script ontwikkeld die zelf de data automatich download van http://download.geofabrik.de/osm/
en converteert naar een gmapsupp.img file.
Dit script split dynamisch de data.

De run voor Europa duurt op m’n oude PC onder Linux ongeveer 18 uur.

Hierbij hoeft je zelf niet elke keer alle tiles te selecteren die missen als er je een land selecteert.

De scripts maken gebruik van PERL en de op java gebasserde tools mkgmap.jar en splitter.jar

Als er interesse is kan ik de script op een website plaatsen of ik kan ze opsturen.

De script zijn ook makkelijk per land te configuren

Ik hoor het wel

Bert Tijhuis

Nou, graag Bert!

Kende je http://www.raumbezug.eu/ag/internet/osmGarmin.htm ook al trouwens?

Ik heb ook interesse Bert.

Zou je jouw scripts ook kunnen draaien met de layout van mijn openfietsmap?
Er is nl veel vraag naar buitenlandse versies van mijn kaart.
Zie verder http://sites.google.com/site/openfietsmap/ voor de style files.
Misschien is een installer voor Mapsource ook mogelijk te genereren ipv alleen een gmapsupp?

Op de website: http://www.xs4all.nl/~wanl0049/osm2gmapsupp/
Heb ik het script gezet en hoe je het kunt aanroepen.

Let op het maakt gebruikt van bestaande al bekende technieken.

@Ligfietser, ik wil graag een keertje je persoonlijk spreken en misschien kunnen we er iets leuks van maken, (en vermoedelijk heb ik je al een keer anderhalf jaar geleden bij Garmin in Notter gesproken)

Maar voorlopig tot eind van het jaar lukt het me niet ivm afstoten van vele activiteiten,.

Groet, Bert TIjhuis

De vorige meeting van Notter was ik er bij. Ben me niet bewust dat Ligfietser er ook was?

Ik was daar niet nee, misschien was Lambertus op een ligfiets? :wink:
Zo aan het script te zien moet het mogelijk zijn een en ander aan te passen zodat je mijn fietskaart styles kan gebruiken, ik zal het tzt uittesten.

Ik heb jouw scripts getest op twee kleine landjes, Albanië en Montenegro (binnen een paar minuten klaar).
-In eerste instantie werkte de java engine niet, in een van de scripts moest ik de java settings veranderen op -Xmx1000M en toen draaide die wel.

-Ik heb ook mijn openfietsmap stijl getest, door aan de $GMAPOPTS --style-file=c:\Garmin\Openstreetmap\scripts\Styles toe te voegen. (Jouw script heb ik in de map c:\Garmin\Openstreetmap\scripts staan en in die map de map met de style sheets gekopieerd van http://mijndev.openstreetmap.nl/~ligfietser/openfietsmap/Scripts/))
Om de ofm.typ file erin op te nemen ook deze toegevoegd aan het eind van de gmapopts in de process script:

my $cmd = “$GMAPMAKE $GMAPOPTS --country-name=$country --country-abr=$cab --family-name="OSM $cab ${S_now}" --family-id=$nr --product=id=1 $imgfile ofm.TYP”
my $cmd = “$GMAPMAKE $GMAPOPTG --family-name="OSM $cab ${S_now}" --family-id=$nr --product=id=1 $imgfile ofm.TYP”

Het probleem bij de TYP file is echter dat de Family ID’s automatisch worden gegenereerd en die de typ file niet herkent. Mbv het programma gmaptool kon ik de Family ID van de typ file (die het scriptje heeft meegebakken in de gmapsupp.img) weer aanpassen. Gmaptool is te downloaden op http://www.anpo.republika.pl/download.html
Ik weet niet of dit automatisch dmv de scripts aangepast kan worden ipv handmatig met gmaptool?

-Nog een suggestie: je haalt automatisch de osm.bz file op, maar die in pbf formaat zijn kleiner en de laatste splitter versie zou die ook aankunnen (sneller).

Het resultaat is te bekijken in Basecamp. Wat me opvalt is dat de grenzen van die twee landen niet lekker op elkaar aansluiten, ook de wegen sluiten niet aan. Dat komt waarschijnlijk omdat het hier gaat om twee geofabrik extracts die niet meer op elkaar aansluiten:

NB ik heb in bovenstaande regio wat gemapt, hier een beschrijving:
http://sites.google.com/site/tovenaarsblog/Balkan2010/reisverslag/16 :wink:

Nog een paar opmerkingen over de scripts:
Het is niet echt duidelijk hoe je die landen en continenten invult. Ik heb overal maar # voor gezet en bij de laatste een land ingevuld:

#@COUNTRIES = qw(albania andorra austria azores belarus belgium bosnia-herzegovina bulgaria croatia cyprus czech_republic denmark estonia faroe_islands finland france germany great_britain greece hungary iceland ireland isle_of_man italy kosovo latvia liechtenstein lithuania luxembourg macedonia malta moldova monaco montenegro netherlands norway poland portugal romania serbia slovakia slovenia spain sweden switzerland turkey ukraine);
#@CONTINENT = qw(africa asia australia central-america south-america europe);
#@CONTINENT = qw(europe);
@COUNTRIES = qw(albania);

Evt een typ file meesturen en automatisch aanpassen zou wenselijk zijn.
Je zou bijv het programma gmaptool (gmt.exe) erin kunnen zetten, met de opdracht gmt.exe -w -y 1000 gmapsupp.img
De typ file in de gmapsupp krijgt dan de family id 1000. Ik heb echter geen verstand van perl scripts dus ik weet niet hoe ik dat daarin moet aanpassen.

De aangepaste scripts voor een openfietsmap (met gmt.exe en de ofm.typ) kan je downloaden op http://mijndev.openstreetmap.nl/~ligfietser/diverse/ofm2gmap_scripts.zip

Even wil ik reageren op bovenstaande berichten:

Ik heb inderdaad Lambertus met de heer Hof ontmoet in Notter (ik heb dit verward met ligfietser, sorry)

Aangaande de scripts:

Het is een opzetje geweest en ik maakte hiervan gebruik van daar om zelf voor mijn Garmin device maps te maken voor NL, DE en Europa

In 1ste instantie dacht ik van elke land (of van een bepaald aantal groepen landen) een img file te maken en deze weer te combineren met de mkgmap of gmt tool to een nieuwe gmapsupp.img file
Echter blijkt het dat niet goed aansluit bij de grenzen.

Dit zou echter kunnen liggen aan de doelbestanden van de geofabrik of aan de splitter

Vandaar dat ik de kaart van Europa heb genomen en hier heb je dit conflict natuurlijk niet, echter
de gmapsupp.img wordt steeds groter en groter en is op dit moment 3 Gbytes groot)

Het script moet hierbij ook nog worden aangepast dat je alleen maar bijvoorbeeld NoodWest Europa wilt hebben

Je hebt onderstaande regel veranderd:

In eerste instantie werkte de java engine niet, in een van de scripts moest ik de java settings veranderen op -Xmx1000M en toen draaide die wel.

Ik zal eens denken aan script eromheen waarbij de je deze customizing makkelijker kunt aanpassen (of dynamisch maken aan de hoeveelheid geheugen die in je PC zit)

Je schrijft:

Om de ofm.typ file erin op te nemen ook deze toegevoegd aan het eind van de gmapopts in de process script:
my $cmd = “$GMAPMAKE $GMAPOPTS --country-name=$country --country-abr=$cab --family-name="OSM $cab ${S_now}" --family-id=$nr --product=id=1 $imgfile ofm.TYP”
my $cmd = “$GMAPMAKE $GMAPOPTG --family-name="OSM $cab ${S_now}" --family-id=$nr --product=id=1 $imgfile ofm.TYP”

Dit is een hele goede suggestie en ik bedank je dat je dit hebt opgenomen in: http://mijndev.openstreetmap.nl/~ligfie … cripts.zip

Het family ID nummer komt uit de file: isocountry.txt file die bijgeleverd is.

Albanie: krijgt hierbij de als country: ALB en als family-id = 1008 (in de file staat 008, maar hierbij tel ik 1000 bij op) om een unieke ID te krijgen.

Je schrijft:
Het is niet echt duidelijk hoe je die landen en continenten invult. Ik heb overal maar # voor gezet en bij de laatste een land ingevuld:

#@COUNTRIES = qw(albania andorra austria azores belarus belgium bosnia-herzegovina bulgaria croatia cyprus czech_republic denmark estonia faroe_islands finland france germany great_britain greece hungary iceland ireland isle_of_man italy kosovo latvia liechtenstein lithuania luxembourg macedonia malta moldova monaco montenegro netherlands norway poland portugal romania serbia slovakia slovenia spain sweden switzerland turkey ukraine);
#@CONTINENT = qw(africa asia australia central-america south-america europe);
#@CONTINENT = qw(europe);
@COUNTRIES = qw(albania);

Je hebt helemaal gelijk dat dit onduidelijk is.

Als je alleen een land wilt hebben (of meerdere) dan moet je dit specificeren in COUNTRIES

Ik zal het even hier proberen uit te leggen:

Als je LANDEN wilt laden voor de Region EUROPE wilt downloaden dan moet je de waarde:

$REGION = ‘europe’; specifieren, (kijk hierbij naar de structuur die gehanteerd wordt in de ‘geofabrik’
en je moet hierbij
@COUNTRIES = qw(albania montenegro); opnemen

Wil je echter ipv een land een Werelddeel download dan moet je

@CONTINENT = qw(africa); gebruiken (dit is een voorbeeld)


Het script

process_osm_geo.pl kijkt alleen maar wat er in COUNTRIES staat en vandaar dat er in het oorspronkelijke script zowel CONTINENT als COUNTRIES gespecificeerd werd.

Dit is ook een aandachtspuntje te verbetering

Ik zou prima de 'gmaptool (gmt.exe) er in opnemen maar het liefste maak ik gebruik van IDs die in de isocountry.txt staan want dan kun je deze ook in seperaat in ‘mapsource’ laden.

Vandaag of morgen duik in de materie.
Vandaag ga ik eerst nog een stukje fietsen en een route mappen in Openstreetmap, want hier doe je het voor

Groetjes
Bert

Hoi Bert,

Nog wat opmerkingen:
2) als je een regio wilt hebben zit je denk ik vast aan osmosis, die bijv van de europe.osm een uitsnede maakt.
3) ik heb ook Duitsland geprobeerd maar die liep na een tijdje vast op geheugen problemen bij de splitter of mkgmap. Kleine landjes gaan dus wel goed.
4) het is niet duidelijk waarom je 2 regels met @countries en 2 met @continent hebt. Als je eentje invult moet je die andere 3 dan wissen (0f er een # voorzetten?), want anders gaat die bijv ook europa downloaden. Ipv dit te editten in de script (kan overigens niet eens met notepad, daarvoor moet je weer notepad++ gebruiken) zou je die ook in een aparte txt file kunnen zetten waarin men een aantal opties kan invullen.
5) Duidelijk dat je een aparte ID wilt hebben, maar op een of andere manier moet die ID ook in de TYP file gezet worden en daar is gmt.exe wel handig voor.

Succes met het uitwerken!

Groetjes, Minko

Ik denk dat je, net al je hiervoor al schrijft, in get_osm_geo.pm voor $SPLITTER en $GMAPMAKE de max grootte van de geheugen pool wat naar beneden moet schroeven (of geheugen bijplaatsen). Hier werkt het perfect, kaart van Duitsland is na een half uurtje gereed.

Geheugen bijplaatsen zal niet gaan, ik heb 4Gb maar met een windows vista 32bits, die kan niet meer dan 2,5gb gebruiken. Of is hier een trucje voor?

Wat ook nog wenselijk is, is dat je de tijdelijke mapfiles laat staan zodat je ze in mapsource kunt installeren. Dat zou je kunnen automatiseren mbv de ----nsis parameter plus de nsis installer (http://nsis.sourceforge.net/Download)

Je hebt voor Splitter niet giga veel geheugen nodig. Breng het aantal areas via de optie --max-areas=[n] naar beneden en het geheugengebruik daalt mee.

Hallo,
Op dit moment heb ik het stuk software klaar.
Het is te vinden op:

http://www.xs4all.nl/~wanl0049/OGW2G/

Het creeeren van de bestanden gaat nu menu gestuurd en bovenstaande opties die ligfietser gevraagd heeft zijn geintegreerd

veel plezier ermee

Het script is al wat gebruiksvriendelijker geworden, ziet er goed uit. Nog wat opmerkingen ter verbetering:

Er wordt telkens gevraagd om een continent of country in te vullen, zowel om te downloaden als te processen. Dat is niet erg duidelijk, moet ik zowel country als continent invullen, of is het een van beide. Kan dat niet in één regel?

De ofm.typ gaat niet werken, want die werkt niet samen met de mkgmap stijl. Ik heb ook een “mapnik.typ” die wel compatibel is:
http://mijndev.openstreetmap.nl/~ligfietser/diverse/ Als je een typ file wilt embedden in de kaart moet de fam id ook corresponderen anders gaat ook dat niet lukken. Als ik nu de typ file selecteer lijkt die ergens verloren te gaan in het proces, want in de gmapsupp vind ik 'm niet terug.

In de result map vind ik de img tiles niet terug, die zitten weer in een img map. Als je die dan ook in de result map zet kan je met osmmap.nsi een mapsource installer genereren om de kaart in mapsource te installeren.

Hallo,
Je schrijft:

Er wordt telkens gevraagd om een continent of country in te vullen, zowel om te downloaden als te processen.

Je kunt tegelijkertijd meerdere landen downloaden en ook tegelijkertijd een continent (werkt bij het download process in 1 run).
Ik zal er aan denken om meerdere selecties te kunnen doen in 1 run. (Dan is de optie region ook overbodig)

Ik kan me voorstellen dat je in 1 run meerdere landen/continenten wilt downloaden. En dan seperaat met een 2de sessie het gaat processen

De ofm.typ gaat niet werken, want die werkt niet samen met de mkgmap stijl. Ik heb ook een “mapnik.typ” die wel compatibel is:
http://mijndev.openstreetmap.nl/~ligfietser/diverse/ Als je een typ file wilt embedden in de kaart moet de fam id ook corresponderen anders gaat ook dat niet lukken. Als ik nu de typ file selecteer lijkt die ergens verloren te gaan in het proces, want in de gmapsupp vind ik 'm niet terug.

Je kunt de fam_id in het change optie wijzigen, maar dan moet je wel het fam_id van de typ file weten.

en waarom werkt het met met de ofm.typ niet (werkt dit alleen maar met gmt)?

In de result map vind ik de img tiles niet terug, die zitten weer in een img map. Als je die dan ook in de result map zet kan je met osmmap.nsi een mapsource installer genereren om de kaart in mapsource te installeren.

Dit laatste is eenvoudig te realiseren.

Kortom de verbeteringen komen eraan.
Andere suggesties zijn ook welkom, en ik kan zelf ook niet alles testen vanwege de lange doorlooptijden.

groet,

Waarom zou je tegelijkertijd een continent en meerdere landen willen downloaden? Ik zou de default continent leeghouden ipv europe.

De ofm.typ werkt alleen met custom stijl bestanden die niet in de mkgmap.jar zitten. Bovendien zijn de parameters van mkgmap anders dan de standaard. Ik zie toevallig dat die ofm een fam id heeft van 10011, niet handig want dan komt die in conflict met mijn kaarten. Het is beter die te wijzigen ahv de kaart die je bewerkt (dat kan dus met gmt). De mapnik.typ heeft trouwens de fam ID van Lambertus kaarten dus moeten ook gewijzigd worden.
Verder moet choise choice zijn neem ik aan?

Hallo,

Eerder schreef je:

Nog een suggestie: je haalt automatisch de osm.bz file op, maar die in pbf formaat zijn kleiner en de laatste splitter versie zou die ook aankunnen (sneller).

Helaas, helaas, ik heb het met de laatste splitter.jar geprobeerd maar deze kent hem niet

Waarom zou je tegelijkertijd een continent en meerdere landen willen downloaden? Ik zou de default continent leeghouden ipv europe.
Dit ga ik aanpassen en als het bij het processen niets is ingevuld dan neem ik de waarde die opgegeven is bij het downloaden (nog even geduld)

De ofm.typ werkt alleen met custom stijl bestanden die niet in de mkgmap.jar zitten. Bovendien zijn de parameters van mkgmap anders dan de standaard. Ik zie toevallig dat die ofm een fam id heeft van 10011, niet handig want dan komt die in conflict met mijn kaarten. Het is en als er bij het proces niets staat dan

Ik heb een heel eenvoudig scriptje gevonden waarbij de de family-id en product-id kunt wijzigen van de TYP file. (is dit wat)

Kortom to be continued

Hoi Bert,
De splitter die werkt met de pbf files is geen officiële download, je kan 'm vinden op
http://files.mkgmap.org.uk/download/6/splitter-r161.zip
Klinkt goed dat scriptje om de Fam id in de typ file te kunnen wijzigen. Je kan het testen op de mapnik.typ.
Laat de ofm.typ maar even eruit totdat alles is uitgewerkt.