[osmium-tool] 48/97: Detect if objects in OSM file are ordered and if there are mulitple versions.
Sebastiaan Couwenberg
sebastic at moszumanska.debian.org
Tue Jul 21 20:15:33 UTC 2015
This is an automated email from the git hooks/post-receive script.
sebastic pushed a commit to tag v1.0.0
in repository osmium-tool.
commit ad49155a5d80b5037b0f8757bd341450038298b7
Author: Jochen Topf <jochen at topf.org>
Date: Wed Dec 17 10:50:03 2014 +0100
Detect if objects in OSM file are ordered and if there are mulitple versions.
---
doc/osmium-fileinfo.md | 7 +++++--
src/command_fileinfo.cpp | 26 ++++++++++++++++++++++++++
2 files changed, 31 insertions(+), 2 deletions(-)
diff --git a/doc/osmium-fileinfo.md b/doc/osmium-fileinfo.md
index d5a09fc..1eabfaf 100644
--- a/doc/osmium-fileinfo.md
+++ b/doc/osmium-fileinfo.md
@@ -37,8 +37,11 @@ Data
file. It is only shown if the **--extended** option was used. It
shows the actual bounding box calculated from the nodes in the file,
the first and last timestamp of all objects in the file, a SHA1
- checksum of the data in the file and the number of changesets,
- nodes, ways, and relations found in the file.
+ checksum of the data in the file, the number of changesets, nodes,
+ ways, and relations found in the file, whether the objects in the
+ file were ordered by type (nodes, then ways, then relations) and
+ id, and whether there were multiple versions of the same object in
+ the file (history files and change files can have that).
# OPTIONS
diff --git a/src/command_fileinfo.cpp b/src/command_fileinfo.cpp
index f1e1c42..5edc1df 100644
--- a/src/command_fileinfo.cpp
+++ b/src/command_fileinfo.cpp
@@ -107,6 +107,11 @@ struct InfoHandler : public osmium::handler::Handler {
osmium::Timestamp last_timestamp = osmium::start_of_time();
CryptoPP::SHA hash;
+ bool ordered = true;
+ bool multiple_versions = false;
+ osmium::item_type last_type = osmium::item_type::undefined;
+ osmium::object_id_type last_id = 0;
+
void changeset(const osmium::Changeset& changeset) {
hash.Update(changeset.data(), changeset.byte_size());
++changesets;
@@ -119,6 +124,20 @@ struct InfoHandler : public osmium::handler::Handler {
if (object.timestamp() > last_timestamp) {
last_timestamp = object.timestamp();
}
+
+ if (last_type == object.type()) {
+ if (last_id == object.id()) {
+ multiple_versions = true;
+ }
+ if (last_id > object.id()) {
+ ordered = false;
+ }
+ } else if (last_type > object.type()) {
+ ordered = false;
+ }
+
+ last_type = object.type();
+ last_id = object.id();
}
void node(const osmium::Node& node) {
@@ -187,6 +206,13 @@ bool CommandFileinfo::run() {
std::cout << " Last timestamp: " << info_handler.last_timestamp << "\n";
}
+ std::cout << " Objects ordered (by type and id): " << (info_handler.ordered ? "yes\n" : "no\n");
+
+ std::cout << " Multiple versions of same object: " << (info_handler.multiple_versions ? "yes\n" : "no\n");
+ if (info_handler.multiple_versions != header.has_multiple_object_versions()) {
+ std::cout << " WARNING! This is different from the setting in the header.\n";
+ }
+
unsigned char digest[CryptoPP::SHA::DIGESTSIZE];
info_handler.hash.Final(digest);
std::cout << " SHA: " << std::hex;
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/osmium-tool.git
More information about the Pkg-grass-devel
mailing list