![]() |
2007-11-20
, 14:15
|
Posts: 529 |
Thanked: 46 times |
Joined on Sep 2007
|
#12
|
Ah, so there's still hope then. Good good.
We should just ask someone who's used the routing function - thoughtfix for example.
![]() |
2007-11-20
, 17:05
|
Posts: 2,102 |
Thanked: 1,309 times |
Joined on Sep 2006
|
#13
|
![]() |
2008-01-24
, 15:32
|
Posts: 43 |
Thanked: 8 times |
Joined on Jan 2007
|
#15
|
You just have to build last version with this option : -disable-binding-python --disable-gui-sdl --disable-samplemap --enable-avoid-float --enable-avoid-unaligned
![]() |
2008-01-27
, 11:17
|
Posts: 66 |
Thanked: 145 times |
Joined on Jan 2008
|
#16
|
![]() |
2008-01-27
, 21:46
|
|
Posts: 3,404 |
Thanked: 4,474 times |
Joined on Oct 2005
@ Germany
|
#17
|
![]() |
2008-01-29
, 09:08
|
Posts: 2,102 |
Thanked: 1,309 times |
Joined on Sep 2006
|
#18
|
i had a quick look at the wayfinder maps. the navit wiki article regarding via-michelin maps applies to some extent. maps consist of a number of qt files, each holding a feature layer. you can lookup the filenames as shortcodes on the teleatlas site or in the .reg files. eg: pc.qt is postcodes. each fil has a header plus a number of zlib compressed blocks. i successfully decompressed a pc block and could see the pc but have not looked any further.
![]() |
2008-01-29
, 11:26
|
Posts: 66 |
Thanked: 145 times |
Joined on Jan 2008
|
#19
|
Cool. I've not had a chance to look at this any further but please keep us updated
![]() |
2008-03-20
, 15:25
|
Posts: 66 |
Thanked: 145 times |
Joined on Jan 2008
|
#20
|
/***************************************************************** * OcDb file structures *****************************************************************/ /* OC maps consist of a number of layer qt files for different features, eg water, roads, rail etc. A single .reg file lists the relevant qt files giving low and hi visibility thresholds so there may be some duplication between files - eg wa.qt is coarse global water view while wa3.qt will be more detailed. There are also non-layer qt files such as a7 (address) and pc (postcode). .bin files not yet investigated. These structures derived from uk map set. Navicore users may download map sets may be from: http://www.navicoretech.com/Consumer/Support/Downloads/tablet/en_GB/wfnavigator */ typedef uint8_t uint24_t[3]; static const uint32_t OC_SIMPLE_MAGIC = 'O'|'C'<<8|'Q'<<16|'T'<<24; #pragma pack(push,1) /* qt files are in oc "simple" db format. 213 byte header as below. Many fields remain unknown at this point. The actual data is tile based with a quadtree index immediately following the header and of a length specified in the header. The quadtree index is followed by a tile index and then the tile blocks. */ typedef struct __OcSimpleHeader { uint32_t magic; //+0x00 'OCQT' uint16_t unknown_mapyear; //+0x04 06 ?? uint16_t unknown_mapmonth; //+0x06 01 ?? uint16_t unknown_mapday; //+0x08 03 ?? uint16_t unknown1; //+0x0a zero uint16_t unknown2; //+0x0c ?? uint16_t unknown3; //+0x0e zero uint32_t quadtablelength; //+0x10 length of quad table following header uint32_t unknown5; //+0x14 offset/length??? uint32_t coords[2]; //+0x18 coords lat,long? [0x00533189, 0x000d97a1] uint8_t unknown6; //+0x20 uint8_t unknown7; //+0x21 uint8_t unknown8; //+0x22 61-67 uint32_t unknown9; //+0x23 zero uint8_t unknown10; //+0x27 00 or 01 uint8_t unknown11; //+0x28 02 or 50 or 69 uint8_t unknown12; //+0x29 always 02 uint8_t unknown13; //+0x2a 00/03/04 struct { uint8_t unkn_idx; //block number?? uint8_t unkn_flags; //?? } unknown_table[64]; //+0x2b uint32_t featuretype; //+0xab eg: 'wa3\0' 'a7\0\0' uint8_t unknown20[18]; //+0xaf zeros uint8_t unknown21[3]; //+0xc1 ?? uint8_t unknown22[17]; //+0xc4 [6a 18 c4 77 05 00 00 00 01 00 00 00 14 fc 12 00 08] } OcSimpleHeader; //size=213 /* Quad tree nodes are indexed 0-(N-1) where N=header.quadtablelength/sizeof(OcBlockQuadEntry). The first node should cover the entire map. Subblock indexes are into the quadtree table. If the index is greater than the number of quadtree entries then it is used to index into the tile index (i-N). Zero indicates an invalid subblock. Subblock relationships to lat and lon not yet determined. */ typedef struct __OcBlockQuadEntry { uint8_t unknown[6]; //+0x00 zero uint24_t lon1; //+0x0c longitude uint24_t lon2; //+0x0f lon2 often == lon1 uint24_t lat1; //+0x06 latitude uint24_t lat2; //+0x09 lat2 often == lat1 uint16_t subblocks[4]; //+0x12 subblock indexes } OcBlockQuadEntry; //size=26 0x1a /* Following the quadtree node table is an index of tile blocks which basically just give pos and size in the file. Note offset may be 0 for null entries. */ typedef struct __OcBlockIndexEntry { uint32_t offset; //+0x00 offset from start of file uint16_t length; //+0x04 uint8_t unknown1; //+0x06 incrementing uint8_t unknown2; //+0x07 zero } OcBlockIndexEntry; //size=8 #define ASSERT_STRUCTURE_SIZE(_s,_n) \ int _check_##_size[(sizeof(_s)==_n)-1] ASSERT_STRUCTURE_SIZE(OcSimpleHeader,213); ASSERT_STRUCTURE_SIZE(OcBlockQuadEntry,26); ASSERT_STRUCTURE_SIZE(OcBlockIndexEntry,8); // a block is a zlib compressed tile typedef struct __OcDbBlock { uint16_t uncompressedLength; uint8_t zdata[1]; // 78 da .. } OcDbBlock; //first byte of a point, line or poly typedef uint8_t OcFeatureProps; // relative coords in uint16_t,uint16_t (relative to quad??) // full coords in uint24_t,uint24_t #define OC_PROP_RELATIVE_COORDS 0x80 // importance indicator, eg london 1, wigan 7 #define OC_PROP_ORDER_MASK 0x0f typedef struct __OcRelativeCoord { OcFeatureProps props; uint16_t lat, lon; } OcRelativeCoord; typedef struct __OcCoord { OcFeatureProps props; uint24_t lat, lon; } OcCoord; typedef struct __OcDbGeomTile { uint16_t polygonDataLength; //polygon data //polyline data } OcDbGeomTile; /* poi record - description has a number of tab separated fields: description, phone number */ typedef struct __OcDbPoiRecord { uint8_t poiType; //OcDbPoiType uint24_t lat; uint24_t lon; char description[1]; //null terminated string } OcDbPoiRecord; // poi types are listed in poi.reg enum __OcDbPoiType { OC_POI_PETROL_STATION = 0, OC_POI_RENT_A_CAR_FACILITY = 1, OC_POI_PARKING_GARAGE = 2, OC_POI_HOTEL_OR_MOTEL = 3, OC_POI_MUSEUM = 4, OC_POI_THEATRE = 5, OC_POI_SPORTS_CENTRE = 6, OC_POI_HOSPITAL_OR_POLYCLINIC = 7, OC_POI_POLICE_STATION = 8, OC_POI_PLACE_OF_WORSHIP = 9, OC_POI_FERRY_TERMINAL = 10, OC_POI_CAMPING_GROUND = 11, OC_POI_AIRLINE_ACCESS = 12, OC_POI_OPEN_PARKING__AREA = 13, OC_POI_SHOPPING_CENTER = 14, OC_POI_COLLEGE_OR_UNIVERSITY = 15, OC_POI_RAILWAY_STATION = 16, OC_POI_EXHIBITION_CENTER = 17, OC_POI_REST_AREA = 18, OC_POI_AIRPORT = 19, OC_POI_CONCERT_HALL = 20, OC_POI_CAR_DEALER = 21, OC_POI_COMPANY = 22, OC_POI_AMUSEMENT_PARK = 23, OC_POI_OPERA = 24, OC_POI_GOLF_COURSE = 25, OC_POI_ENTRY_POINT = 26, OC_POI_ZOO = 27, OC_POI_CAR_REPAIR_FACILITY = 28, OC_POI_CASINO = 29, OC_POI_CONVENTION_CENTRE = 31, OC_POI_COURTHOUSE = 32, OC_POI_DENTIST = 33, OC_POI_DOCTOR = 34, OC_POI_EMBASSY = 35, OC_POI_FRONTIER_CROSSING = 36, OC_POI_GOVERMENT_OFFICE = 37, OC_POI_IMPORTANT_TOURIST_ATTRACTION = 38, OC_POI_LEISURE_CENTRE = 39, OC_POI_LIBRARY = 40, OC_POI_NIGHTLIFE = 41, OC_POI_PARK_AND_RECREATION_AREA = 42, OC_POI_PHARMACY = 43, OC_POI_POST_OFFICE = 44, OC_POI_RENT_A_CAR_PARKING = 45, OC_POI_RESTAURANT = 46, OC_POI_RESTAURANT_AREA = 47, OC_POI_SHOP = 48, OC_POI_STADIUM = 49, OC_POI_TOURIST_INFORMATION_OFFICE = 50, OC_POI_MY_FAVOURITES = 94 }; typedef struct __OcDbPoiTile { uint16_t unknownLength; //zero //poi records } OcDbPoiTile; /* Maptxt tiles are just a series of coord, null-terminated string pairs (like a poi but without the type field). The string has a number of tab separated fields: place, region. */ typedef struct __OcDbMaptxtRelativeRecord { char description[1]; //null terminated string } OcDbMaptxtRelativeRecord; typedef struct __OcDbMaptxtRecord { OcCoord coord; char description[1]; //null terminated string } OcDbMaptxtRecord; typedef struct __OcDbMaptxtTile { OcDbMaptxtRecord firstrecord; //more maptxt records } OcDbMaptxtTile; #pragma pack(pop)
"Good luck.. "
Not
"Forget it"
So where do we start?
I have no gps btw..