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