[OSM-dev] OSM binary format (pbf) 1.0 is in osmosis trunk.

Scott Crosby scrosby at cs.rice.edu
Sun Oct 17 04:02:04 BST 2010


On Sat, Oct 16, 2010 at 8:42 AM, Frederik Ramm <frederik at remote.org> wrote:

> Hi,
>
>
> On 10/16/2010 03:25 PM, Stefan de Konink wrote:
>
>> Also, can you give me the URL for the source code for pbf2osm to check
>>> that a few edge-cases are correctly handled?
>>>
>>
>> http://git.openstreetmap.nl/index.cgi/pbf2osm.git/
>>
>
> I'm hoping to take that, fix it up a bit (so that the resulting binary is
> not called "test" any more etc ;) and put in in the OSM SVN together with a
> set of Debian scripts that automatically build the protobuf stuff and
> produce a statically linked Debian package with little no dependencies. I
> think that should further reduce the hurdle to using it.
>

Looks pretty good. I liked the coding style. Very simple, short, and
concise. I have a few things to note.

When parsing the header:

    if (state == osmheader) {
        HeaderBlock *hmsg = header_block__unpack (NULL, bmsg->raw_size,
uncompressed);
        if (hmsg == NULL) {
            fprintf(stderr, "Error unpacking HeaderBlock message\n");
            return 1;
        }

        if (verbose) fprintf(stderr, "%s\n", hmsg->required_features[0]);

        header_block__free_unpacked (hmsg, &protobuf_c_system_allocator);

The full array of required features should be checked and your program
should error out if any required feature other than "OsmSchema-V0.6"
or "DenseNodes" appears.

When parsing timestamps:

#define printtimestamp(attribute, timestamp) \
    char tsbuf[21]; \
    deltatime2timestamp(timestamp * (pmsg->date_granularity / 1000), tsbuf);
\
    fputs_unlocked(" "attribute"=\"", stdout); \
    fputs_unlocked(tsbuf, stdout); \
    fputc_unlocked('"', stdout);

The formula is:
    (timestamp*date_granularity) / 1000

In the comments, you mention that the Nodes stuff is untested. You can build
a file that uses Nodes instead of DenseNodes by invoking osmosis with
'--write-pbf file=foo.osm.pbf usedense=false'.

Thanks, I enjoyed looking at your code and style of coding.
Scott
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openstreetmap.org/pipermail/dev/attachments/20101016/71ee2dbc/attachment.html>


More information about the dev mailing list