Warning, /education/marble/tools/osm-addresses/pbf/osmformat.proto is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2010 Scott A. Crosby. <scott@sacrosby.com> 0003 0004 SPDX-License-Identifier: GPL-3.0-or-later 0005 */ 0006 0007 option optimize_for = LITE_RUNTIME; 0008 option java_package = "crosby.binary"; 0009 package OSMPBF; 0010 0011 /* OSM Binary file format 0012 0013 This is the master schema file of the OSM binary file format. This 0014 file is designed to support limited random-access and future 0015 extendability. 0016 0017 A binary OSM file consists of a sequence of FileBlocks (please see 0018 fileformat.proto). The first fileblock contains a serialized instance 0019 of HeaderBlock, followed by a sequence of PrimitiveBlock blocks that 0020 contain the primitives. 0021 0022 Each primitiveblock is designed to be independently parsable. It 0023 contains a string table storing all strings in that block (keys and 0024 values in tags, roles in relations, usernames, etc.) as well as 0025 metadata containing the precision of coordinates or timestamps in that 0026 block. 0027 0028 A primitiveblock contains a sequence of primitive groups, each 0029 containing primitives of the same type (nodes, densenodes, ways, 0030 relations). Coordinates are stored in signed 64-bit integers. Lat&lon 0031 are measured in units <granularity> nanodegrees. The default of 0032 granularity of 100 nanodegrees corresponds to about 1cm on the ground, 0033 and a full lat or lon fits into 32 bits. 0034 0035 Converting an integer to a lattitude or longitude uses the formula: 0036 $OUT = IN * granularity / 10**9$. Many encoding schemes use delta 0037 coding when representing nodes and relations. 0038 0039 */ 0040 0041 ////////////////////////////////////////////////////////////////////////// 0042 ////////////////////////////////////////////////////////////////////////// 0043 0044 /* Contains the file header. */ 0045 0046 message HeaderBlock { 0047 optional HeaderBBox bbox = 1; 0048 /* Additional tags to aid in parsing this dataset */ 0049 repeated string required_features = 4; 0050 repeated string optional_features = 5; 0051 0052 optional string writingprogram = 16; 0053 optional string source = 17; // From the bbox field. 0054 0055 /* Tags that allow continuing an Osmosis replication */ 0056 0057 // replication timestamp, expressed in seconds since the epoch, 0058 // otherwise the same value as in the "timestamp=..." field 0059 // in the state.txt file used by Osmosis 0060 optional int64 osmosis_replication_timestamp = 32; 0061 0062 // replication sequence number (sequenceNumber in state.txt) 0063 optional int64 osmosis_replication_sequence_number = 33; 0064 0065 // replication base URL (from Osmosis' configuration.txt file) 0066 optional string osmosis_replication_base_url = 34; 0067 } 0068 0069 0070 /** The bounding box field in the OSM header. BBOX, as used in the OSM 0071 header. Units are always in nanodegrees -- they do not obey 0072 granularity rules. */ 0073 0074 message HeaderBBox { 0075 required sint64 left = 1; 0076 required sint64 right = 2; 0077 required sint64 top = 3; 0078 required sint64 bottom = 4; 0079 } 0080 0081 0082 /////////////////////////////////////////////////////////////////////// 0083 /////////////////////////////////////////////////////////////////////// 0084 0085 0086 message PrimitiveBlock { 0087 required StringTable stringtable = 1; 0088 repeated PrimitiveGroup primitivegroup = 2; 0089 0090 // Granularity, units of nanodegrees, used to store coordinates in this block 0091 optional int32 granularity = 17 [default=100]; 0092 // Offset value between the output coordinates and the granularity grid in units of nanodegrees. 0093 optional int64 lat_offset = 19 [default=0]; 0094 optional int64 lon_offset = 20 [default=0]; 0095 0096 // Granularity of dates, normally represented in units of milliseconds since the 1970 epoch. 0097 optional int32 date_granularity = 18 [default=1000]; 0098 0099 0100 // Proposed extension: 0101 //optional BBox bbox = XX; 0102 } 0103 0104 // Group of OSMPrimitives. All primitives in a group must be the same type. 0105 message PrimitiveGroup { 0106 repeated Node nodes = 1; 0107 optional DenseNodes dense = 2; 0108 repeated Way ways = 3; 0109 repeated Relation relations = 4; 0110 repeated ChangeSet changesets = 5; 0111 } 0112 0113 0114 /** String table, contains the common strings in each block. 0115 0116 Note that we reserve index '0' as a delimiter, so the entry at that 0117 index in the table is ALWAYS blank and unused. 0118 0119 */ 0120 message StringTable { 0121 repeated bytes s = 1; 0122 } 0123 0124 /* Optional metadata that may be included into each primitive. */ 0125 message Info { 0126 optional int32 version = 1 [default = -1]; 0127 optional int64 timestamp = 2; 0128 optional int64 changeset = 3; 0129 optional int32 uid = 4; 0130 optional uint32 user_sid = 5; // String IDs 0131 0132 // The visible flag is used to store history information. It indicates that 0133 // the current object version has been created by a delete operation on the 0134 // OSM API. 0135 // When a writer sets this flag, it MUST add a required_features tag with 0136 // value "HistoricalInformation" to the HeaderBlock. 0137 // If this flag is not available for some object it MUST be assumed to be 0138 // true if the file has the required_features tag "HistoricalInformation" 0139 // set. 0140 optional bool visible = 6; 0141 } 0142 0143 /** Optional metadata that may be included into each primitive. Special dense format used in DenseNodes. */ 0144 message DenseInfo { 0145 repeated int32 version = 1 [packed = true]; 0146 repeated sint64 timestamp = 2 [packed = true]; // DELTA coded 0147 repeated sint64 changeset = 3 [packed = true]; // DELTA coded 0148 repeated sint32 uid = 4 [packed = true]; // DELTA coded 0149 repeated sint32 user_sid = 5 [packed = true]; // String IDs for usernames. DELTA coded 0150 0151 // The visible flag is used to store history information. It indicates that 0152 // the current object version has been created by a delete operation on the 0153 // OSM API. 0154 // When a writer sets this flag, it MUST add a required_features tag with 0155 // value "HistoricalInformation" to the HeaderBlock. 0156 // If this flag is not available for some object it MUST be assumed to be 0157 // true if the file has the required_features tag "HistoricalInformation" 0158 // set. 0159 repeated bool visible = 6 [packed = true]; 0160 } 0161 0162 0163 // THIS IS STUB DESIGN FOR CHANGESETS. NOT USED RIGHT NOW. 0164 // TODO: REMOVE THIS? 0165 message ChangeSet { 0166 required int64 id = 1; 0167 // 0168 // // Parallel arrays. 0169 // repeated uint32 keys = 2 [packed = true]; // String IDs. 0170 // repeated uint32 vals = 3 [packed = true]; // String IDs. 0171 // 0172 // optional Info info = 4; 0173 0174 // optional int64 created_at = 8; 0175 // optional int64 closetime_delta = 9; 0176 // optional bool open = 10; 0177 // optional HeaderBBox bbox = 11; 0178 } 0179 0180 0181 message Node { 0182 required sint64 id = 1; 0183 // Parallel arrays. 0184 repeated uint32 keys = 2 [packed = true]; // String IDs. 0185 repeated uint32 vals = 3 [packed = true]; // String IDs. 0186 0187 optional Info info = 4; // May be omitted in omitmeta 0188 0189 required sint64 lat = 8; 0190 required sint64 lon = 9; 0191 } 0192 0193 /* Used to densly represent a sequence of nodes that do not have any tags. 0194 0195 We represent these nodes columnwise as five columns: ID's, lats, and 0196 lons, all delta coded. When metadata is not omitted, 0197 0198 We encode keys & vals for all nodes as a single array of integers 0199 containing key-stringid and val-stringid, using a stringid of 0 as a 0200 delimiter between nodes. 0201 0202 ( (<keyid> <valid>)* '0' )* 0203 */ 0204 0205 message DenseNodes { 0206 repeated sint64 id = 1 [packed = true]; // DELTA coded 0207 0208 //repeated Info info = 4; 0209 optional DenseInfo denseinfo = 5; 0210 0211 repeated sint64 lat = 8 [packed = true]; // DELTA coded 0212 repeated sint64 lon = 9 [packed = true]; // DELTA coded 0213 0214 // Special packing of keys and vals into one array. May be empty if all nodes in this block are tagless. 0215 repeated int32 keys_vals = 10 [packed = true]; 0216 } 0217 0218 0219 message Way { 0220 required int64 id = 1; 0221 // Parallel arrays. 0222 repeated uint32 keys = 2 [packed = true]; 0223 repeated uint32 vals = 3 [packed = true]; 0224 0225 optional Info info = 4; 0226 0227 repeated sint64 refs = 8 [packed = true]; // DELTA coded 0228 } 0229 0230 message Relation { 0231 enum MemberType { 0232 NODE = 0; 0233 WAY = 1; 0234 RELATION = 2; 0235 } 0236 required int64 id = 1; 0237 0238 // Parallel arrays. 0239 repeated uint32 keys = 2 [packed = true]; 0240 repeated uint32 vals = 3 [packed = true]; 0241 0242 optional Info info = 4; 0243 0244 // Parallel arrays 0245 repeated int32 roles_sid = 8 [packed = true]; 0246 repeated sint64 memids = 9 [packed = true]; // DELTA encoded 0247 repeated MemberType types = 10 [packed = true]; 0248 } 0249