[PHP] OV2-bestand genereren

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
Vanuit een tabel met accomodaties met bijbehorende latitudes en longitudes probeer ik een OV2-bestand op te bouwen voor gebruik als POI in een TomTom.

Als ik een OV2-bestand genereer op http://garmin.gps-data-team.com/poi_manager_online.php krijg ik de volgende inhoud:
% î[ ~|N "Centrum Eindhoven"

Via mijn code krijg ik echter:
$ ï[ ~|N "Centrum Eindhoven"

Het is dus maar een heel klein verschil, maar hoe kan dat?
Het bestand wat ik krijg via de site, werkt op mijn TomTom, mijn bestand niet.

Op internet kan IK niks vinden verder over het genereren van een OV2-bestand. Heeft iemand hier ervaring mee?

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
ob_start();
require_once '../../includes/base.php';

//CREATE STRING
$string='';

$qry=$db->Query('SELECT * FROM content_accomodation WHERE id='.intval($_GET['id']));
while($q=mysql_fetch_assoc($qry)){
  //FILENAME
  $downloadfile=$q['name'].'.OV2';
  $string.=make_ov2_record($q['name'],$q['longitude'],$q['latitude']);
}

//WRITE TO FILE
$fp = fopen ($downloadfile, 'w+');
if ($fp) {
  fputs ($fp, $string );
  fclose ($fp);
}

header("Location: /export/poi/".$downloadfile); 
?>


Dit is de functie 'make_ov2_record':

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
<?php
//CREATE RECORD
function make_ov2_record($omschrijving, $oost, $noord) { 
  $TT = chr(0x02).
  pack("V",strlen($omschrijving)+14).'   '.
  pack("V",round($oost*100000)).' '.
  pack("V",round($noord*100000)).'  '.
  '"'.$omschrijving.'"'.
  chr(0x00).' '; 
  return $TT; 
}
?>

Acties:
  • 0 Henk 'm!

  • cspare
  • Registratie: Oktober 2006
  • Laatst online: 29-07 22:19

cspare

What the deuce?!

Ik heb wel eens OV2 bestanden uitgelezen (dus niet gemaakt) maar vermoed dat het niet veel ingewikkelder is. De documentatie die ik gebruikt heb: http://www.tomtom.com/sup...loads/ttnavsdk_manual.pdf op pagina 6 (hoofdstuk 2.4)

The one who says it cannot be done, should never interrupt the one who is doing it.


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Het is nogal zinloos om je resultaat als tekst te gaan bekijken. Probeer eens met een hex editor naar je gegenereerde bestand te kijken.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
Hier een screenshots van het goede (bovenste) en het slechte bestand:

Afbeeldingslocatie: http://img143.imageshack.us/img143/7536/hexeditorzj9.th.jpg

Ik kan hier echter weinig wijs uit. Ik zie dat de slechte dus verkeerde karakters bevat maar heb geen idee hoe ik dit op kan lossen in de php-functie.

Iemand hier meer kaas van gegeten?

Acties:
  • 0 Henk 'm!

  • Joolee
  • Registratie: Juni 2005
  • Niet online
Je bouwt het bestand op met verschillende stukjes code. Zet eens een duidelijk herkenbaar teken (in Hex duidelijk herkenbaar) ertussen zodat je kunt zien waar een item begint en eindigt. Daarmee kunt je achterhalen welk stukje van je code er verkeerd gaat.

Ik heb zo'n idee dat je de make_ov2_record functie gewoon ergens vandaan ge-copy-paste hebt en je totaal geen idee hebt wat hij nou eigenlijk doet.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

Ik vind het erg vreemd dat je geen idee hebt wat de gegenereerde bestanden nu eigenlijk inhouden. Je schrijft bepaalde getallen binair weg. Die kun je in je hex editor keurig terug lezen. Ook lijkt het me dat redelijk simpel te achterhalen is dat je allignment niet klopt (gegevens beginnen niet op de juiste plek).

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Noork
  • Registratie: Juni 2001
  • Niet online
Maakt het nog uit op wat voor encoding de server staat, utf8, isoXXXX o.i.d.?

Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
Joolee schreef op vrijdag 07 november 2008 @ 16:01:
Je bouwt het bestand op met verschillende stukjes code. Zet eens een duidelijk herkenbaar teken (in Hex duidelijk herkenbaar) ertussen zodat je kunt zien waar een item begint en eindigt. Daarmee kunt je achterhalen welk stukje van je code er verkeerd gaat.
het gaat fout bij pack("V",strlen($omschrijving)+14)
dat had ik al eerder nagekeken
Ik heb zo'n idee dat je de make_ov2_record functie gewoon ergens vandaan ge-copy-paste hebt en je totaal geen idee hebt wat hij nou eigenlijk doet.
klopt! Dus? ik heb totaal geen verstand van HEX-bestanden, aangezien dit de enige functie was die ik ook maar kon vinden voor het maken van een ov2-bestand heb ik deze inderdaad ge-copy-paste. ik wil het best uitzoeken maar kan nergens fatsoenlijke info hierover vinden. Vandaar dat mijn vraag ook was of iemand hier ervaring mee heeft.

Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

robg1984 schreef op vrijdag 07 november 2008 @ 16:34:
[...]


het gaat fout bij pack("V",strlen($omschrijving)+14)
dat had ik al eerder nagekeken


[...]


klopt! Dus? ik heb totaal geen verstand van HEX-bestanden, aangezien dit de enige functie was die ik ook maar kon vinden voor het maken van een ov2-bestand heb ik deze inderdaad ge-copy-paste. ik wil het best uitzoeken maar kan nergens fatsoenlijke info hierover vinden. Vandaar dat mijn vraag ook was of iemand hier ervaring mee heeft.
Link in de eerste reactie van dit topic. Pagina 11 of 7 (afhankelijk van of je de acrobat nummering, of die op de pagina zelf aanhoud) staat:
SIMPLE POI RECORD:
1 byte T: type (always 2)
4 bytes L: length of this record in bytes (including the T and L fields)
4 bytes X: longitude coordinate of the POI
4 bytes Y: latitude coordinate of the POI
L−13 bytes Name: zero−terminated ASCII string specifying the name of the POI
Hoeveel duidelijker wil je het krijgen?

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • robg1984
  • Registratie: December 2002
  • Laatst online: 17-09 11:18
Janoz schreef op vrijdag 07 november 2008 @ 16:38:
[...]


Link in de eerste reactie van dit topic. Pagina 11 of 7 (afhankelijk van of je de acrobat nummering, of die op de pagina zelf aanhoud) staat:

[...]

Hoeveel duidelijker wil je het krijgen?
Dat had ik gezien dat dat daar stond, ik begrijp alleen niet hoe dat hele hex-gebeuren werkte en hoop dat iemand mij hier iets meer over kon vertellen.

Acties:
  • 0 Henk 'm!

  • Tiemez
  • Registratie: December 2003
  • Laatst online: 24-10-2022
Joolee schreef op vrijdag 07 november 2008 @ 16:01:
Ik heb zo'n idee dat je de make_ov2_record functie gewoon ergens vandaan ge-copy-paste hebt en je totaal geen idee hebt wat hij nou eigenlijk doet.
dat klopt

;)

Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
robg1984 schreef op vrijdag 07 november 2008 @ 22:42:
[...]


Dat had ik gezien dat dat daar stond, ik begrijp alleen niet hoe dat hele hex-gebeuren werkte en hoop dat iemand mij hier iets meer over kon vertellen.
Dan moet je misschien eerst zelf eens onderzoek doen naar "dat hele hex-gebeuren" dan voordat je direct je vraagt dumpt? Je verwacht blijkbaar een kant-en-klare oplossing maar zo werkt t niet hier.

Ga dus eerst eens uitzoeken wat zo'n file nu precies is adhv. de documentatie die ook in dit topic staat. Als je dan specifieke vragen hebt is dat prima natuurlijk.
Pagina: 1