Merge commit '0c6dee4befebf823d839d1092bcae79afbf4f12e' into merge/libosmium-2.11.0
This commit is contained in:
commit
66cb75f4a3
32
third_party/libosmium/.travis.yml
vendored
32
third_party/libosmium/.travis.yml
vendored
@ -109,7 +109,7 @@ matrix:
|
|||||||
|
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: linux-gcc50-release
|
compiler: linux-gcc5-release
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
sources: ['ubuntu-toolchain-r-test', 'boost-latest']
|
sources: ['ubuntu-toolchain-r-test', 'boost-latest']
|
||||||
@ -117,7 +117,7 @@ matrix:
|
|||||||
env: COMPILER='g++-5' BUILD_TYPE='Release'
|
env: COMPILER='g++-5' BUILD_TYPE='Release'
|
||||||
|
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: linux-gcc50-dev
|
compiler: linux-gcc5-dev
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
sources: ['ubuntu-toolchain-r-test', 'boost-latest']
|
sources: ['ubuntu-toolchain-r-test', 'boost-latest']
|
||||||
@ -125,6 +125,23 @@ matrix:
|
|||||||
env: COMPILER='g++-5' BUILD_TYPE='Dev'
|
env: COMPILER='g++-5' BUILD_TYPE='Dev'
|
||||||
|
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: linux-gcc6-release
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources: ['ubuntu-toolchain-r-test', 'boost-latest']
|
||||||
|
packages: ['g++-6', 'libboost1.55-all-dev', 'libgdal-dev', 'libgeos++-dev', 'libproj-dev', 'libsparsehash-dev', 'spatialite-bin']
|
||||||
|
env: COMPILER='g++-6' BUILD_TYPE='Release'
|
||||||
|
|
||||||
|
- os: linux
|
||||||
|
compiler: linux-gcc6-dev
|
||||||
|
addons:
|
||||||
|
apt:
|
||||||
|
sources: ['ubuntu-toolchain-r-test', 'boost-latest']
|
||||||
|
packages: ['g++-6', 'libboost1.55-all-dev', 'libgdal-dev', 'libgeos++-dev', 'libproj-dev', 'libsparsehash-dev', 'spatialite-bin']
|
||||||
|
env: COMPILER='g++-6' BUILD_TYPE='Dev'
|
||||||
|
|
||||||
|
|
||||||
# 3/ OSX Clang Builds
|
# 3/ OSX Clang Builds
|
||||||
- os: osx
|
- os: osx
|
||||||
osx_image: xcode6.4
|
osx_image: xcode6.4
|
||||||
@ -148,6 +165,17 @@ matrix:
|
|||||||
env: COMPILER='clang++' BUILD_TYPE='Dev'
|
env: COMPILER='clang++' BUILD_TYPE='Dev'
|
||||||
|
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode8
|
||||||
|
compiler: xcode8-clang-release
|
||||||
|
env: COMPILER='clang++' BUILD_TYPE='Release'
|
||||||
|
|
||||||
|
- os: osx
|
||||||
|
osx_image: xcode8
|
||||||
|
compiler: xcode8-clang-dev
|
||||||
|
env: COMPILER='clang++' BUILD_TYPE='Dev'
|
||||||
|
|
||||||
|
|
||||||
install:
|
install:
|
||||||
- DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
|
- DEPS_DIR="${TRAVIS_BUILD_DIR}/deps"
|
||||||
- mkdir -p ${DEPS_DIR} && cd ${DEPS_DIR}
|
- mkdir -p ${DEPS_DIR} && cd ${DEPS_DIR}
|
||||||
|
48
third_party/libosmium/CHANGELOG.md
vendored
48
third_party/libosmium/CHANGELOG.md
vendored
@ -13,6 +13,51 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
|
||||||
|
## [2.11.0] - 2017-01-14
|
||||||
|
|
||||||
|
### Added
|
||||||
|
|
||||||
|
- New index::RelationsMap(Stash|Index) classes implementing an index for
|
||||||
|
looking up parent relation IDs given a member relation ID.
|
||||||
|
- Add `get_noexcept()` method to all index maps. For cases where ids are
|
||||||
|
often not in the index using this can speed up a program considerably.
|
||||||
|
- New non-const WayNodeList::operator[].
|
||||||
|
- Default constructed "invalid" Coordinates.
|
||||||
|
- Tile constructor from web mercator coordinates and some helper
|
||||||
|
functions for tile arithmetic.
|
||||||
|
- Tag matcher matching keys using a regex.
|
||||||
|
- New `envelope()` functions on `NodeRefList`, `Way`, and `Area` returning a
|
||||||
|
`Box` object with the geometric envelope of the object.
|
||||||
|
- Add `amenity_list` example.
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Replaced the implementation for the web mercator projection using the usual
|
||||||
|
tan-formula with a polynomial approximation which is much faster and good
|
||||||
|
enough for OSM data which only has ~1cm resolution anyway. See
|
||||||
|
https://github.com/osmcode/mercator-projection for all the details and
|
||||||
|
benchmarks. You can disable this by defining the macro
|
||||||
|
`OSMIUM_USE_SLOW_MERCATOR_PROJECTION` before including any of the Osmium
|
||||||
|
headers.
|
||||||
|
- Removed the outdated `Makefile`. Always use CMake directly to build.
|
||||||
|
- Refactoring of `osmium::apply()` removing the resursive templates for faster
|
||||||
|
compile times and allowing rvalue handlers.
|
||||||
|
- Lots of code and test cleanups and more documentation.
|
||||||
|
|
||||||
|
### Fixed
|
||||||
|
|
||||||
|
- Handle endianess on FreeBSD properly.
|
||||||
|
- Fixed doxygen config for reproducible builds.
|
||||||
|
|
||||||
|
|
||||||
|
## [2.10.3] - 2016-11-20
|
||||||
|
|
||||||
|
### Changed
|
||||||
|
|
||||||
|
- Round out ObjectPointerCollection implementation and test it.
|
||||||
|
- Updated embedded protozero to 1.4.5.
|
||||||
|
|
||||||
|
|
||||||
## [2.10.2] - 2016-11-16
|
## [2.10.2] - 2016-11-16
|
||||||
|
|
||||||
### Changed
|
### Changed
|
||||||
@ -480,7 +525,8 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|||||||
Doxygen (up to version 1.8.8). This version contains a workaround to fix
|
Doxygen (up to version 1.8.8). This version contains a workaround to fix
|
||||||
this.
|
this.
|
||||||
|
|
||||||
[unreleased]: https://github.com/osmcode/libosmium/compare/v2.10.2...HEAD
|
[unreleased]: https://github.com/osmcode/libosmium/compare/v2.10.3...HEAD
|
||||||
|
[2.10.3]: https://github.com/osmcode/libosmium/compare/v2.10.2...v2.10.3
|
||||||
[2.10.2]: https://github.com/osmcode/libosmium/compare/v2.10.1...v2.10.2
|
[2.10.2]: https://github.com/osmcode/libosmium/compare/v2.10.1...v2.10.2
|
||||||
[2.10.1]: https://github.com/osmcode/libosmium/compare/v2.10.0...v2.10.1
|
[2.10.1]: https://github.com/osmcode/libosmium/compare/v2.10.0...v2.10.1
|
||||||
[2.10.0]: https://github.com/osmcode/libosmium/compare/v2.9.0...v2.10.0
|
[2.10.0]: https://github.com/osmcode/libosmium/compare/v2.9.0...v2.10.0
|
||||||
|
4
third_party/libosmium/CMakeLists.txt
vendored
4
third_party/libosmium/CMakeLists.txt
vendored
@ -24,8 +24,8 @@ set(CMAKE_CONFIGURATION_TYPES "Debug;Release;RelWithDebInfo;MinSizeRel;Dev;Cover
|
|||||||
project(libosmium)
|
project(libosmium)
|
||||||
|
|
||||||
set(LIBOSMIUM_VERSION_MAJOR 2)
|
set(LIBOSMIUM_VERSION_MAJOR 2)
|
||||||
set(LIBOSMIUM_VERSION_MINOR 10)
|
set(LIBOSMIUM_VERSION_MINOR 11)
|
||||||
set(LIBOSMIUM_VERSION_PATCH 2)
|
set(LIBOSMIUM_VERSION_PATCH 0)
|
||||||
|
|
||||||
set(LIBOSMIUM_VERSION
|
set(LIBOSMIUM_VERSION
|
||||||
"${LIBOSMIUM_VERSION_MAJOR}.${LIBOSMIUM_VERSION_MINOR}.${LIBOSMIUM_VERSION_PATCH}")
|
"${LIBOSMIUM_VERSION_MAJOR}.${LIBOSMIUM_VERSION_MINOR}.${LIBOSMIUM_VERSION_PATCH}")
|
||||||
|
2
third_party/libosmium/CONTRIBUTING.md
vendored
2
third_party/libosmium/CONTRIBUTING.md
vendored
@ -8,5 +8,5 @@ Some rules for contributing to this project:
|
|||||||
|
|
||||||
* We'd love for you to send pull requests for fixes you have made or new features
|
* We'd love for you to send pull requests for fixes you have made or new features
|
||||||
you have added. Please read the [notes for developers](NOTES_FOR_DEVELOPERS.md)
|
you have added. Please read the [notes for developers](NOTES_FOR_DEVELOPERS.md)
|
||||||
beforehand which contain some coding guidelines.
|
beforehand which contains some coding guidelines.
|
||||||
|
|
||||||
|
25
third_party/libosmium/Makefile
vendored
25
third_party/libosmium/Makefile
vendored
@ -1,25 +0,0 @@
|
|||||||
|
|
||||||
all:
|
|
||||||
mkdir -p build && cd build && cmake .. && $(MAKE)
|
|
||||||
|
|
||||||
doc:
|
|
||||||
mkdir -p build && cd build && cmake .. && $(MAKE) doc
|
|
||||||
|
|
||||||
clean:
|
|
||||||
if test -d build; then cd build && $(MAKE) clean; fi
|
|
||||||
|
|
||||||
distclean:
|
|
||||||
rm -fr build
|
|
||||||
|
|
||||||
#deb:
|
|
||||||
# debuild -I -us -uc
|
|
||||||
#
|
|
||||||
#deb-clean:
|
|
||||||
# debuild clean
|
|
||||||
|
|
||||||
indent:
|
|
||||||
astyle --style=java --indent-namespaces --indent-switches --pad-header --lineend=linux --suffix=none --recursive include/\*.hpp examples/\*.cpp test/\*.cpp
|
|
||||||
# astyle --style=java --indent-namespaces --indent-switches --pad-header --unpad-paren --align-pointer=type --lineend=linux --suffix=none --recursive include/\*.hpp examples/\*.cpp test/\*.cpp
|
|
||||||
|
|
||||||
.PHONY: clean distclean deb deb-clean doc indent
|
|
||||||
|
|
18
third_party/libosmium/NOTES_FOR_DEVELOPERS.md
vendored
18
third_party/libosmium/NOTES_FOR_DEVELOPERS.md
vendored
@ -72,9 +72,7 @@ different.
|
|||||||
* The ellipsis in variadic template never has a space to the left of it and
|
* The ellipsis in variadic template never has a space to the left of it and
|
||||||
always has a space to the right: `template <typename... TArgs>` etc.
|
always has a space to the right: `template <typename... TArgs>` etc.
|
||||||
|
|
||||||
Keep to the indentation and other styles used in the code. Use `make indent`
|
Keep to the indentation and other styles used in the code.
|
||||||
in the toplevel directory to fix indentation and styling. It calls `astyle`
|
|
||||||
with the right parameters. This program is in the `astyle` Debian package.
|
|
||||||
|
|
||||||
|
|
||||||
## C++11
|
## C++11
|
||||||
@ -85,14 +83,6 @@ compilers don't support them yet. This list might change as we get more data
|
|||||||
about which compilers support which feature and what operating system versions
|
about which compilers support which feature and what operating system versions
|
||||||
or distributions have which versions of these compilers installed.
|
or distributions have which versions of these compilers installed.
|
||||||
|
|
||||||
GCC 4.6 - too old, not supported (Ubuntu 12.04 LTS)
|
|
||||||
GCC 4.7.2 - can probably not be supported (Debian wheezy)
|
|
||||||
GCC 4.7.3 - probably works
|
|
||||||
GCC 4.8 - works and is supported from here on
|
|
||||||
clang 3.0 - too old, not supported (Debian wheezy, Ubuntu 12.04 LTS)
|
|
||||||
clang 3.2 - probably works
|
|
||||||
clang 3.5 - works and is supported from here on
|
|
||||||
|
|
||||||
Use `include/osmium/util/compatibility.hpp` if there are compatibility problems
|
Use `include/osmium/util/compatibility.hpp` if there are compatibility problems
|
||||||
between compilers due to different C++11 support.
|
between compilers due to different C++11 support.
|
||||||
|
|
||||||
@ -137,7 +127,7 @@ default cmake config. Run `ctest` to run them. Many more tests are needed.
|
|||||||
|
|
||||||
All namespaces, classes, functions, attributes, etc. should be documented.
|
All namespaces, classes, functions, attributes, etc. should be documented.
|
||||||
|
|
||||||
Osmium uses the Doxygen (www.doxygen.org) source code documentation system.
|
Osmium uses the [Doxygen](http://www.doxygen.org) source code documentation
|
||||||
If it is installed, the CMake configuration will add a new build target, so
|
system. If it is installed, the CMake configuration will add a new build
|
||||||
you can build it with `make doc`.
|
target, so you can build it with `make doc`.
|
||||||
|
|
||||||
|
46
third_party/libosmium/README.md
vendored
46
third_party/libosmium/README.md
vendored
@ -4,15 +4,14 @@ http://osmcode.org/libosmium
|
|||||||
|
|
||||||
A fast and flexible C++ library for working with OpenStreetMap data.
|
A fast and flexible C++ library for working with OpenStreetMap data.
|
||||||
|
|
||||||
|
Libosmium works on Linux, Mac OSX and Windows.
|
||||||
|
|
||||||
[](https://travis-ci.org/osmcode/libosmium)
|
[](https://travis-ci.org/osmcode/libosmium)
|
||||||
[](https://ci.appveyor.com/project/Mapbox/libosmium)
|
[](https://ci.appveyor.com/project/Mapbox/libosmium)
|
||||||
|
|
||||||
Libosmium is developed on Linux, but also works on OSX and Windows (with some
|
Please see the [Libosmium manual](http://osmcode.org/libosmium/manual.html)
|
||||||
limitations).
|
for more details than this README can provide.
|
||||||
|
|
||||||
There are a few applications that use the Osmium library in the examples
|
|
||||||
directory. See the [osmium-contrib](http://github.com/osmcode/osmium-contrib)
|
|
||||||
repository for more example code.
|
|
||||||
|
|
||||||
## Prerequisites
|
## Prerequisites
|
||||||
|
|
||||||
@ -24,8 +23,9 @@ Different parts of Libosmium (and the applications built on top of it) need
|
|||||||
different libraries. You DO NOT NEED to install all of them, just install those
|
different libraries. You DO NOT NEED to install all of them, just install those
|
||||||
you need for your programs.
|
you need for your programs.
|
||||||
|
|
||||||
For details see the
|
For details see the [list of
|
||||||
[list of dependencies](https://github.com/osmcode/libosmium/wiki/Libosmium-dependencies).
|
dependencies](http://osmcode.org/libosmium/manual.html#dependencies) in the
|
||||||
|
manual.
|
||||||
|
|
||||||
The following external (header-only) libraries are included in the libosmium
|
The following external (header-only) libraries are included in the libosmium
|
||||||
repository:
|
repository:
|
||||||
@ -33,10 +33,6 @@ repository:
|
|||||||
* [protozero](https://github.com/mapbox/protozero)
|
* [protozero](https://github.com/mapbox/protozero)
|
||||||
* [utfcpp](http://utfcpp.sourceforge.net/)
|
* [utfcpp](http://utfcpp.sourceforge.net/)
|
||||||
|
|
||||||
If you want (some of) those libraries to be installed along with libosmium
|
|
||||||
itself when calling `make install`, you have to use the CMake options
|
|
||||||
`INSTALL_GDALCPP`, `INSTALL_PROTOZERO`, and/or `INSTALL_UTFCPP`.
|
|
||||||
|
|
||||||
|
|
||||||
## Directories
|
## Directories
|
||||||
|
|
||||||
@ -44,7 +40,7 @@ itself when calling `make install`, you have to use the CMake options
|
|||||||
|
|
||||||
* cmake: CMake configuration scripts.
|
* cmake: CMake configuration scripts.
|
||||||
|
|
||||||
* doc: Config for documentation.
|
* doc: Config for API reference documentation.
|
||||||
|
|
||||||
* examples: Osmium example applications.
|
* examples: Osmium example applications.
|
||||||
|
|
||||||
@ -69,37 +65,23 @@ cmake:
|
|||||||
|
|
||||||
This will build the examples and tests. Call `ctest` to run the tests.
|
This will build the examples and tests. Call `ctest` to run the tests.
|
||||||
|
|
||||||
For more see the
|
For more detals see the
|
||||||
[Libosmium Wiki](https://github.com/osmcode/libosmium/wiki/Building-Libosmium).
|
[Building Libosmium](http://osmcode.org/libosmium/manual.html#building-libosmium)
|
||||||
|
chapter in the manual.
|
||||||
|
|
||||||
|
|
||||||
## Testing
|
## Testing
|
||||||
|
|
||||||
See the
|
See the
|
||||||
[Libosmium Wiki](https://github.com/osmcode/libosmium/wiki/Testing-Libosmium)
|
[Libosmium Manual](http://osmcode.org/libosmium/manual.html#running-tests)
|
||||||
for instructions.
|
for instructions.
|
||||||
|
|
||||||
|
|
||||||
## Osmium on 32bit Machines
|
|
||||||
|
|
||||||
Osmium works well on 64 bit machines, but on 32 bit machines there are some
|
|
||||||
problems. Be aware that not everything will work on 32 bit architectures.
|
|
||||||
This is mostly due to the 64 bit needed for node IDs. Also Osmium hasn't been
|
|
||||||
tested well on 32 bit systems. Here are some issues you might run into:
|
|
||||||
|
|
||||||
* Google Sparsehash does not work on 32 bit machines in our use case.
|
|
||||||
* The `mmap` system call is called with a `size_t` argument, so it can't
|
|
||||||
give you more than 4GByte of memory on 32 bit systems. This might be a
|
|
||||||
problem.
|
|
||||||
|
|
||||||
Please report any issues you have and we might be able to solve them.
|
|
||||||
|
|
||||||
|
|
||||||
## Switching from the old Osmium
|
## Switching from the old Osmium
|
||||||
|
|
||||||
If you have been using the old version of Osmium at
|
If you have been using the old version of Osmium at
|
||||||
https://github.com/joto/osmium you might want to read about the
|
https://github.com/joto/osmium you might want to read about the [changes
|
||||||
[changes needed](https://github.com/osmcode/libosmium/wiki/Changes-from-old-versions-of-Osmium).
|
needed](http://osmcode.org/libosmium/manual.html#changes-from-old-versions-of-osmium).
|
||||||
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
6
third_party/libosmium/doc/Doxyfile.in
vendored
6
third_party/libosmium/doc/Doxyfile.in
vendored
@ -152,7 +152,7 @@ FULL_PATH_NAMES = YES
|
|||||||
# will be relative from the directory where doxygen is started.
|
# will be relative from the directory where doxygen is started.
|
||||||
# This tag requires that the tag FULL_PATH_NAMES is set to YES.
|
# This tag requires that the tag FULL_PATH_NAMES is set to YES.
|
||||||
|
|
||||||
STRIP_FROM_PATH = @PROJECT_SOURCE_DIR@/include
|
STRIP_FROM_PATH = @PROJECT_SOURCE_DIR@
|
||||||
|
|
||||||
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
|
# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
|
||||||
# path mentioned in the documentation of a class, which tells the reader which
|
# path mentioned in the documentation of a class, which tells the reader which
|
||||||
@ -755,7 +755,7 @@ WARN_LOGFILE =
|
|||||||
# Note: If this tag is empty the current directory is searched.
|
# Note: If this tag is empty the current directory is searched.
|
||||||
|
|
||||||
INPUT = @PROJECT_SOURCE_DIR@/include/osmium \
|
INPUT = @PROJECT_SOURCE_DIR@/include/osmium \
|
||||||
@PROJECT_SOURCE_DIR@/doc/doc.txt
|
@PROJECT_SOURCE_DIR@/doc/doc.md
|
||||||
|
|
||||||
# This tag can be used to specify the character encoding of the source files
|
# This tag can be used to specify the character encoding of the source files
|
||||||
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses
|
||||||
@ -891,7 +891,7 @@ FILTER_SOURCE_PATTERNS =
|
|||||||
# (index.html). This can be useful if you have a project on for instance GitHub
|
# (index.html). This can be useful if you have a project on for instance GitHub
|
||||||
# and want to reuse the introduction page also for the doxygen output.
|
# and want to reuse the introduction page also for the doxygen output.
|
||||||
|
|
||||||
USE_MDFILE_AS_MAINPAGE =
|
USE_MDFILE_AS_MAINPAGE = @PROJECT_SOURCE_DIR@/doc/doc.md
|
||||||
|
|
||||||
#---------------------------------------------------------------------------
|
#---------------------------------------------------------------------------
|
||||||
# Configuration options related to source browsing
|
# Configuration options related to source browsing
|
||||||
|
21
third_party/libosmium/doc/doc.md
vendored
Normal file
21
third_party/libosmium/doc/doc.md
vendored
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
|
||||||
|
Osmium is a fast and flexible C++ library for working with OpenStreetMap
|
||||||
|
data.
|
||||||
|
|
||||||
|
This is the API documentation that was automatically created from the
|
||||||
|
source code. For more information about the Osmium Library see
|
||||||
|
http://osmcode.org/libosmium .
|
||||||
|
|
||||||
|
Osmium is free software and available under the Boost Software License.
|
||||||
|
The source code is available at https://github.com/osmcode/libosmium .
|
||||||
|
|
||||||
|
Osmium is a header-only library. You do not need to compile and link it,
|
||||||
|
just include the headers you need.
|
||||||
|
|
||||||
|
Everything in namespaces called "detail" is for internal Osmium use only,
|
||||||
|
do not depend on it in your code. Do not include any include files in
|
||||||
|
directories named "detail" directly. Include files in directories called
|
||||||
|
"experimental" and everything in namespaces called "experimental" is
|
||||||
|
unsupported and may change at any time regardless of the status of the rest
|
||||||
|
of the library.
|
||||||
|
|
26
third_party/libosmium/doc/doc.txt
vendored
26
third_party/libosmium/doc/doc.txt
vendored
@ -1,26 +0,0 @@
|
|||||||
|
|
||||||
/**
|
|
||||||
* @mainpage
|
|
||||||
*
|
|
||||||
* Osmium is a fast and flexible C++ library for working with OpenStreetMap
|
|
||||||
* data.
|
|
||||||
*
|
|
||||||
* This is the API documentation that was automatically created from the
|
|
||||||
* source code. For more information about the Osmium Library see
|
|
||||||
* http://osmcode.org/libosmium .
|
|
||||||
*
|
|
||||||
* Osmium is free software and available under the Boost Software License.
|
|
||||||
* The source code is available at https://github.com/osmcode/libosmium .
|
|
||||||
*
|
|
||||||
* Osmium is a header-only library. You do not need to compile and link it,
|
|
||||||
* just include the headers you need.
|
|
||||||
*
|
|
||||||
* Everything in namespaces called "detail" is for internal Osmium use only,
|
|
||||||
* do not depend on it in your code. Do not include any include files in
|
|
||||||
* directories named "detail" directly. Include files in directories called
|
|
||||||
* "experimental" and everything in namespaces called "experimental" is
|
|
||||||
* unsupported and may change at any time regardless of the status of the rest
|
|
||||||
* of the library.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
@ -9,6 +9,7 @@
|
|||||||
message(STATUS "Configuring examples")
|
message(STATUS "Configuring examples")
|
||||||
|
|
||||||
set(EXAMPLES
|
set(EXAMPLES
|
||||||
|
amenity_list
|
||||||
area_test
|
area_test
|
||||||
change_tags
|
change_tags
|
||||||
convert
|
convert
|
||||||
|
7
third_party/libosmium/examples/README.md
vendored
7
third_party/libosmium/examples/README.md
vendored
@ -3,10 +3,10 @@
|
|||||||
|
|
||||||
The programs in this directory are intended as examples for developers. They
|
The programs in this directory are intended as examples for developers. They
|
||||||
contain extensive comments explaining what's going on. Note that the examples
|
contain extensive comments explaining what's going on. Note that the examples
|
||||||
only cover a small part of what Osmium can do, you should also read the
|
only cover a small part of what Osmium can do, you should also read the manuals
|
||||||
documentation and API documentation.
|
and API documentation.
|
||||||
|
|
||||||
All programs can be run without arguments and they will tell you how to run
|
All programs can be run without arguments and they will tell you how to use
|
||||||
them.
|
them.
|
||||||
|
|
||||||
## Very simple examples
|
## Very simple examples
|
||||||
@ -18,6 +18,7 @@ them.
|
|||||||
|
|
||||||
## Still reasonably simple examples
|
## Still reasonably simple examples
|
||||||
|
|
||||||
|
* `osmium_amenity_list`
|
||||||
* `osmium_read_with_progress`
|
* `osmium_read_with_progress`
|
||||||
* `osmium_filter_discussions`
|
* `osmium_filter_discussions`
|
||||||
* `osmium_convert`
|
* `osmium_convert`
|
||||||
|
167
third_party/libosmium/examples/osmium_amenity_list.cpp
vendored
Normal file
167
third_party/libosmium/examples/osmium_amenity_list.cpp
vendored
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
/*
|
||||||
|
|
||||||
|
EXAMPLE osmium_amenity_list
|
||||||
|
|
||||||
|
Create a list of all amenities in the OSM input data. The type of amenity
|
||||||
|
(tag value) and, if available, the name is printed. For nodes, the location
|
||||||
|
is printed, for areas the center location.
|
||||||
|
|
||||||
|
DEMONSTRATES USE OF:
|
||||||
|
* file input
|
||||||
|
* location indexes and the NodeLocationsForWays handler
|
||||||
|
* the MultipolygonCollector and Assembler to assemble areas (multipolygons)
|
||||||
|
* your own handler that works with areas (multipolygons)
|
||||||
|
* accessing tags
|
||||||
|
* osmium::geom::Coordinates
|
||||||
|
|
||||||
|
SIMPLER EXAMPLES you might want to understand first:
|
||||||
|
* osmium_read
|
||||||
|
* osmium_count
|
||||||
|
* osmium_debug
|
||||||
|
|
||||||
|
LICENSE
|
||||||
|
The code in this example file is released into the Public Domain.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <cstdio> // for std::printf
|
||||||
|
#include <cstdlib> // for std::exit
|
||||||
|
#include <iostream> // for std::cerr
|
||||||
|
#include <string> // for std::string
|
||||||
|
|
||||||
|
// For memory based sparse index
|
||||||
|
#include <osmium/index/map/sparse_mem_array.hpp>
|
||||||
|
|
||||||
|
// For the NodeLocationForWays handler
|
||||||
|
#include <osmium/handler/node_locations_for_ways.hpp>
|
||||||
|
using index_type = osmium::index::map::SparseMemArray<osmium::unsigned_object_id_type, osmium::Location>;
|
||||||
|
using location_handler_type = osmium::handler::NodeLocationsForWays<index_type>;
|
||||||
|
|
||||||
|
// For assembling multipolygons
|
||||||
|
#include <osmium/area/assembler.hpp>
|
||||||
|
#include <osmium/area/multipolygon_collector.hpp>
|
||||||
|
|
||||||
|
// Allow any format of input files (XML, PBF, ...)
|
||||||
|
#include <osmium/io/any_input.hpp>
|
||||||
|
|
||||||
|
// For osmium::apply()
|
||||||
|
#include <osmium/visitor.hpp>
|
||||||
|
|
||||||
|
// For osmium::geom::Coordinates
|
||||||
|
#include <osmium/geom/coordinates.hpp>
|
||||||
|
|
||||||
|
class AmenityHandler : public osmium::handler::Handler {
|
||||||
|
|
||||||
|
// Print info about one amenity to stdout.
|
||||||
|
void print_amenity(const char* type, const char* name, const osmium::geom::Coordinates& c) {
|
||||||
|
std::printf("%8.4f,%8.4f %-15s %s\n", c.x, c.y, type, name ? name : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Calculate the center point of a NodeRefList.
|
||||||
|
osmium::geom::Coordinates calc_center(const osmium::NodeRefList& nr_list) {
|
||||||
|
// Coordinates simply store an X and Y coordinate pair as doubles.
|
||||||
|
// (Unlike osmium::Location which stores them more efficiently as
|
||||||
|
// 32 bit integers.) Use Coordinates when you want to do calculations
|
||||||
|
// or store projected coordinates.
|
||||||
|
osmium::geom::Coordinates c{0.0, 0.0};
|
||||||
|
|
||||||
|
for (const auto& nr : nr_list) {
|
||||||
|
c.x += nr.lon();
|
||||||
|
c.y += nr.lat();
|
||||||
|
}
|
||||||
|
|
||||||
|
c.x /= nr_list.size();
|
||||||
|
c.y /= nr_list.size();
|
||||||
|
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
void node(const osmium::Node& node) {
|
||||||
|
// Getting a tag value can be expensive, because a list of tags has
|
||||||
|
// to be gone through and each tag has to be checked. So we store the
|
||||||
|
// result and reuse it.
|
||||||
|
const char* amenity = node.tags()["amenity"];
|
||||||
|
if (amenity) {
|
||||||
|
print_amenity(amenity, node.tags()["name"], node.location());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void area(const osmium::Area& area) {
|
||||||
|
const char* amenity = area.tags()["amenity"];
|
||||||
|
if (amenity) {
|
||||||
|
// Use the center of the first outer ring. Because we set
|
||||||
|
// create_empty_areas = false in the assembler config, we can
|
||||||
|
// be sure there will always be at least one outer ring.
|
||||||
|
const auto center = calc_center(*area.cbegin<osmium::OuterRing>());
|
||||||
|
|
||||||
|
print_amenity(amenity, area.tags()["name"], center);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}; // class AmenityHandler
|
||||||
|
|
||||||
|
int main(int argc, char* argv[]) {
|
||||||
|
if (argc != 2) {
|
||||||
|
std::cerr << "Usage: " << argv[0] << " OSMFILE\n";
|
||||||
|
std::exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// The input file name
|
||||||
|
const std::string input_file_name{argv[1]};
|
||||||
|
|
||||||
|
// Configuration for the multipolygon assembler. We disable the option to
|
||||||
|
// create empty areas when invalid multipolygons are encountered. This
|
||||||
|
// means areas created have a valid geometry and invalid multipolygons
|
||||||
|
// are simply ignored.
|
||||||
|
osmium::area::Assembler::config_type assembler_config;
|
||||||
|
assembler_config.create_empty_areas = false;
|
||||||
|
|
||||||
|
// Initialize the MultipolygonCollector. Its job is to collect all
|
||||||
|
// relations and member ways needed for each area. It then calls an
|
||||||
|
// instance of the osmium::area::Assembler class (with the given config)
|
||||||
|
// to actually assemble one area.
|
||||||
|
osmium::area::MultipolygonCollector<osmium::area::Assembler> collector{assembler_config};
|
||||||
|
|
||||||
|
// We read the input file twice. In the first pass, only relations are
|
||||||
|
// read and fed into the multipolygon collector. The read_meta::no option
|
||||||
|
// disables reading of meta data (such as version numbers, timestamps, etc.)
|
||||||
|
// which are not needed in this case. Disabling this can speed up your
|
||||||
|
// program.
|
||||||
|
std::cerr << "Pass 1...\n";
|
||||||
|
osmium::io::Reader reader1{input_file_name, osmium::osm_entity_bits::relation, osmium::io::read_meta::no};
|
||||||
|
collector.read_relations(reader1);
|
||||||
|
reader1.close();
|
||||||
|
std::cerr << "Pass 1 done\n";
|
||||||
|
|
||||||
|
// The index storing all node locations.
|
||||||
|
index_type index;
|
||||||
|
|
||||||
|
// The handler that stores all node locations in the index and adds them
|
||||||
|
// to the ways.
|
||||||
|
location_handler_type location_handler{index};
|
||||||
|
|
||||||
|
// If a location is not available in the index, we ignore it. It might
|
||||||
|
// not be needed (if it is not part of a multipolygon relation), so why
|
||||||
|
// create an error?
|
||||||
|
location_handler.ignore_errors();
|
||||||
|
|
||||||
|
// Create our handler.
|
||||||
|
AmenityHandler data_handler;
|
||||||
|
|
||||||
|
// On the second pass we read all objects and run them first through the
|
||||||
|
// node location handler and then the multipolygon collector. The collector
|
||||||
|
// will put the areas it has created into the "buffer" which are then
|
||||||
|
// fed through our handler.
|
||||||
|
std::cerr << "Pass 2...\n";
|
||||||
|
osmium::io::Reader reader2{input_file_name, osmium::io::read_meta::no};
|
||||||
|
|
||||||
|
osmium::apply(reader2, location_handler, data_handler, collector.handler([&data_handler](const osmium::memory::Buffer& area_buffer) {
|
||||||
|
osmium::apply(area_buffer, data_handler);
|
||||||
|
}));
|
||||||
|
|
||||||
|
reader2.close();
|
||||||
|
std::cerr << "Pass 2 done\n";
|
||||||
|
}
|
||||||
|
|
@ -18,6 +18,7 @@
|
|||||||
* osmium_read
|
* osmium_read
|
||||||
* osmium_count
|
* osmium_count
|
||||||
* osmium_debug
|
* osmium_debug
|
||||||
|
* osmium_amenity_list
|
||||||
|
|
||||||
LICENSE
|
LICENSE
|
||||||
The code in this example file is released into the Public Domain.
|
The code in this example file is released into the Public Domain.
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -69,6 +69,7 @@ namespace osmium {
|
|||||||
* class given as template argument.
|
* class given as template argument.
|
||||||
*
|
*
|
||||||
* @tparam TAssembler Multipolygon Assembler class.
|
* @tparam TAssembler Multipolygon Assembler class.
|
||||||
|
* @pre The Ids of all objects must be unique in the input data.
|
||||||
*/
|
*/
|
||||||
template <typename TAssembler>
|
template <typename TAssembler>
|
||||||
class MultipolygonCollector : public osmium::relations::Collector<MultipolygonCollector<TAssembler>, false, true, false> {
|
class MultipolygonCollector : public osmium::relations::Collector<MultipolygonCollector<TAssembler>, false, true, false> {
|
||||||
@ -87,7 +88,7 @@ namespace osmium {
|
|||||||
|
|
||||||
void flush_output_buffer() {
|
void flush_output_buffer() {
|
||||||
if (this->callback()) {
|
if (this->callback()) {
|
||||||
osmium::memory::Buffer buffer(initial_output_buffer_size);
|
osmium::memory::Buffer buffer{initial_output_buffer_size};
|
||||||
using std::swap;
|
using std::swap;
|
||||||
swap(buffer, m_output_buffer);
|
swap(buffer, m_output_buffer);
|
||||||
this->callback()(std::move(buffer));
|
this->callback()(std::move(buffer));
|
||||||
@ -195,7 +196,7 @@ namespace osmium {
|
|||||||
}
|
}
|
||||||
|
|
||||||
osmium::memory::Buffer read() {
|
osmium::memory::Buffer read() {
|
||||||
osmium::memory::Buffer buffer(initial_output_buffer_size, osmium::memory::Buffer::auto_grow::yes);
|
osmium::memory::Buffer buffer{initial_output_buffer_size, osmium::memory::Buffer::auto_grow::yes};
|
||||||
|
|
||||||
using std::swap;
|
using std::swap;
|
||||||
swap(buffer, m_output_buffer);
|
swap(buffer, m_output_buffer);
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -84,8 +84,8 @@ namespace osmium {
|
|||||||
|
|
||||||
template <typename TSource, typename... THandlers>
|
template <typename TSource, typename... THandlers>
|
||||||
inline void apply_diff(TSource& source, THandlers&... handlers) {
|
inline void apply_diff(TSource& source, THandlers&... handlers) {
|
||||||
apply_diff(osmium::io::InputIterator<TSource, osmium::OSMObject> {source},
|
apply_diff(osmium::io::InputIterator<TSource, osmium::OSMObject>{source},
|
||||||
osmium::io::InputIterator<TSource, osmium::OSMObject> {},
|
osmium::io::InputIterator<TSource, osmium::OSMObject>{},
|
||||||
handlers...);
|
handlers...);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -104,7 +104,8 @@ auto _name_##_dispatch(THandler& handler, const osmium::_type_& object, long) ->
|
|||||||
}
|
}
|
||||||
|
|
||||||
template <typename THandler>
|
template <typename THandler>
|
||||||
void flush_dispatch(THandler&, long) {}
|
void flush_dispatch(THandler&, long) {
|
||||||
|
}
|
||||||
|
|
||||||
template <typename THandler>
|
template <typename THandler>
|
||||||
class HandlerWrapper : public HandlerWrapperBase {
|
class HandlerWrapper : public HandlerWrapperBase {
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
2
third_party/libosmium/include/osmium/fwd.hpp
vendored
2
third_party/libosmium/include/osmium/fwd.hpp
vendored
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -33,7 +33,9 @@ DEALINGS IN THE SOFTWARE.
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <cmath>
|
||||||
#include <iosfwd>
|
#include <iosfwd>
|
||||||
|
#include <limits>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#include <osmium/osm/location.hpp>
|
#include <osmium/osm/location.hpp>
|
||||||
@ -48,18 +50,71 @@ namespace osmium {
|
|||||||
double x;
|
double x;
|
||||||
double y;
|
double y;
|
||||||
|
|
||||||
explicit Coordinates(double cx, double cy) noexcept : x(cx), y(cy) {
|
/**
|
||||||
|
* Default constructor creates invalid coordinates.
|
||||||
|
*/
|
||||||
|
Coordinates() noexcept :
|
||||||
|
x(std::numeric_limits<double>::quiet_NaN()),
|
||||||
|
y(std::numeric_limits<double>::quiet_NaN()) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Coordinates(const osmium::Location& location) : x(location.lon()), y(location.lat()) {
|
/**
|
||||||
|
* Create Coordinates from doubles. If any of them is NaN, the
|
||||||
|
* coordinates are invalid.
|
||||||
|
*/
|
||||||
|
explicit Coordinates(double cx, double cy) noexcept :
|
||||||
|
x(cx),
|
||||||
|
y(cy) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create Coordinates from a Location. Will throw
|
||||||
|
* osmium::invalid_location if the location is not valid.
|
||||||
|
*/
|
||||||
|
Coordinates(const osmium::Location& location) :
|
||||||
|
x(location.lon()),
|
||||||
|
y(location.lat()) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Coordinates are invalid if they have been default constructed.
|
||||||
|
*/
|
||||||
|
bool valid() const noexcept {
|
||||||
|
return !std::isnan(x) && !std::isnan(y);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert coordinates to text and append to given string. If the
|
||||||
|
* coordinate is invalid, the fixed string "invalid" will be
|
||||||
|
* added to the string.
|
||||||
|
*
|
||||||
|
* @param s String to append the coordinates to.
|
||||||
|
* @param infix Character to print between the two coordinates.
|
||||||
|
* @param precision Number of digits after the decimal point the
|
||||||
|
* coordinate will be rounded to.
|
||||||
|
*/
|
||||||
void append_to_string(std::string& s, const char infix, int precision) const {
|
void append_to_string(std::string& s, const char infix, int precision) const {
|
||||||
|
if (valid()) {
|
||||||
osmium::util::double2string(s, x, precision);
|
osmium::util::double2string(s, x, precision);
|
||||||
s += infix;
|
s += infix;
|
||||||
osmium::util::double2string(s, y, precision);
|
osmium::util::double2string(s, y, precision);
|
||||||
|
} else {
|
||||||
|
s.append("invalid");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert coordinates to text and append to given string. If the
|
||||||
|
* coordinate is invalid, the fixed string "invalid" will be
|
||||||
|
* added to the string between the prefix and suffix characters.
|
||||||
|
*
|
||||||
|
* @param s String to append the coordinates to.
|
||||||
|
* @param prefix Character to print before the first coordinate.
|
||||||
|
* @param infix Character to print between the two coordinates.
|
||||||
|
* @param suffix Character to print after the second coordinate.
|
||||||
|
* @param precision Number of digits after the decimal point the
|
||||||
|
* coordinate will be rounded to.
|
||||||
|
*/
|
||||||
void append_to_string(std::string& s, const char prefix, const char infix, const char suffix, int precision) const {
|
void append_to_string(std::string& s, const char prefix, const char infix, const char suffix, int precision) const {
|
||||||
s += prefix;
|
s += prefix;
|
||||||
append_to_string(s, infix, precision);
|
append_to_string(s, infix, precision);
|
||||||
@ -69,11 +124,18 @@ namespace osmium {
|
|||||||
}; // struct coordinates
|
}; // struct coordinates
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Compare whether two Coordinates are identical. Might not give the
|
* Check whether two Coordinates are equal. Invalid coordinates are
|
||||||
* right result if the coordinates have been the result of some
|
* equal to other invalid coordinates but not equal to any valid
|
||||||
|
* coordinates.
|
||||||
|
*
|
||||||
|
* Because this is comparing floating point values, it might not give
|
||||||
|
* the right result if the coordinates have been the result of some
|
||||||
* calculation that introduced rounding errors.
|
* calculation that introduced rounding errors.
|
||||||
*/
|
*/
|
||||||
inline bool operator==(const Coordinates& lhs, const Coordinates& rhs) noexcept {
|
inline bool operator==(const Coordinates& lhs, const Coordinates& rhs) noexcept {
|
||||||
|
if (!lhs.valid() && !rhs.valid()) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
#pragma GCC diagnostic push
|
#pragma GCC diagnostic push
|
||||||
#pragma GCC diagnostic ignored "-Wfloat-equal"
|
#pragma GCC diagnostic ignored "-Wfloat-equal"
|
||||||
return lhs.x == rhs.x && lhs.y == rhs.y;
|
return lhs.x == rhs.x && lhs.y == rhs.y;
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -60,6 +60,8 @@ namespace osmium {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate distance in meters between two sets of coordinates.
|
* Calculate distance in meters between two sets of coordinates.
|
||||||
|
*
|
||||||
|
* @pre @code c1.valid() && c2.valid() @endcode
|
||||||
*/
|
*/
|
||||||
inline double distance(const osmium::geom::Coordinates& c1, const osmium::geom::Coordinates& c2) {
|
inline double distance(const osmium::geom::Coordinates& c1, const osmium::geom::Coordinates& c2) {
|
||||||
double lonh = sin(deg_to_rad(c1.x - c2.x) * 0.5);
|
double lonh = sin(deg_to_rad(c1.x - c2.x) * 0.5);
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -53,10 +53,49 @@ namespace osmium {
|
|||||||
return earth_radius_for_epsg3857 * deg_to_rad(lon);
|
return earth_radius_for_epsg3857 * deg_to_rad(lon);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline double lat_to_y(double lat) { // not constexpr because math functions aren't
|
inline double lat_to_y_with_tan(double lat) { // not constexpr because math functions aren't
|
||||||
return earth_radius_for_epsg3857 * std::log(std::tan(osmium::geom::PI/4 + deg_to_rad(lat)/2));
|
return earth_radius_for_epsg3857 * std::log(std::tan(osmium::geom::PI/4 + deg_to_rad(lat)/2));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef OSMIUM_USE_SLOW_MERCATOR_PROJECTION
|
||||||
|
inline double lat_to_y(double lat) {
|
||||||
|
return lat_to_y_with_tan(lat);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
|
||||||
|
// This is a much faster implementation than the canonical
|
||||||
|
// implementation using the tan() function. For details
|
||||||
|
// see https://github.com/osmcode/mercator-projection .
|
||||||
|
inline double lat_to_y(double lat) { // not constexpr because math functions aren't
|
||||||
|
if (lat < -78.0 || lat > 78.0) {
|
||||||
|
return lat_to_y_with_tan(lat);
|
||||||
|
}
|
||||||
|
|
||||||
|
return earth_radius_for_epsg3857 *
|
||||||
|
((((((((((-3.1112583378460085319e-23 * lat +
|
||||||
|
2.0465852743943268009e-19) * lat +
|
||||||
|
6.4905282018672673884e-18) * lat +
|
||||||
|
-1.9685447939983315591e-14) * lat +
|
||||||
|
-2.2022588158115104182e-13) * lat +
|
||||||
|
5.1617537365509453239e-10) * lat +
|
||||||
|
2.5380136069803016519e-9) * lat +
|
||||||
|
-5.1448323697228488745e-6) * lat +
|
||||||
|
-9.4888671473357768301e-6) * lat +
|
||||||
|
1.7453292518154191887e-2) * lat)
|
||||||
|
/
|
||||||
|
((((((((((-1.9741136066814230637e-22 * lat +
|
||||||
|
-1.258514031244679556e-20) * lat +
|
||||||
|
4.8141483273572351796e-17) * lat +
|
||||||
|
8.6876090870176172185e-16) * lat +
|
||||||
|
-2.3298743439377541768e-12) * lat +
|
||||||
|
-1.9300094785736130185e-11) * lat +
|
||||||
|
4.3251609106864178231e-8) * lat +
|
||||||
|
1.7301944508516974048e-7) * lat +
|
||||||
|
-3.4554675198786337842e-4) * lat +
|
||||||
|
-5.4367203601085991108e-4) * lat + 1.0);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
constexpr inline double x_to_lon(double x) {
|
constexpr inline double x_to_lon(double x) {
|
||||||
return rad_to_deg(x) / earth_radius_for_epsg3857;
|
return rad_to_deg(x) / earth_radius_for_epsg3857;
|
||||||
}
|
}
|
||||||
@ -73,10 +112,20 @@ namespace osmium {
|
|||||||
*/
|
*/
|
||||||
constexpr double MERCATOR_MAX_LAT = 85.0511288;
|
constexpr double MERCATOR_MAX_LAT = 85.0511288;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert the coordinates from WGS84 lon/lat to web mercator.
|
||||||
|
*
|
||||||
|
* @pre @code c.valid() @endcode
|
||||||
|
*/
|
||||||
inline Coordinates lonlat_to_mercator(const Coordinates& c) {
|
inline Coordinates lonlat_to_mercator(const Coordinates& c) {
|
||||||
return Coordinates(detail::lon_to_x(c.x), detail::lat_to_y(c.y));
|
return Coordinates(detail::lon_to_x(c.x), detail::lat_to_y(c.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Convert the coordinates from web mercator to WGS84 lon/lat.
|
||||||
|
*
|
||||||
|
* @pre @code c.valid() @endcode
|
||||||
|
*/
|
||||||
inline Coordinates mercator_to_lonlat(const Coordinates& c) {
|
inline Coordinates mercator_to_lonlat(const Coordinates& c) {
|
||||||
return Coordinates(detail::x_to_lon(c.x), detail::y_to_lat(c.y));
|
return Coordinates(detail::x_to_lon(c.x), detail::y_to_lat(c.y));
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -47,14 +47,52 @@ namespace osmium {
|
|||||||
namespace detail {
|
namespace detail {
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
inline T restrict_to_range(T value, T min, T max) {
|
inline constexpr const T& clamp(const T& value, const T& min, const T& max) {
|
||||||
if (value < min) return min;
|
return value < min ? min : (max < value ? max : value);
|
||||||
if (value > max) return max;
|
|
||||||
return value;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace detail
|
} // namespace detail
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the number of tiles (in each direction) for the given zoom
|
||||||
|
* level.
|
||||||
|
*/
|
||||||
|
inline constexpr uint32_t num_tiles_in_zoom(uint32_t zoom) noexcept {
|
||||||
|
return 1u << zoom;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the width or hight of a tile in web mercator coordinates for
|
||||||
|
* the given zoom level.
|
||||||
|
*/
|
||||||
|
inline constexpr double tile_extent_in_zoom(uint32_t zoom) noexcept {
|
||||||
|
return detail::max_coordinate_epsg3857 * 2 / num_tiles_in_zoom(zoom);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the tile x number from an x coordinate in web mercator
|
||||||
|
* projection in the given zoom level. Tiles are numbered from left
|
||||||
|
* to right.
|
||||||
|
*/
|
||||||
|
inline constexpr uint32_t mercx_to_tilex(uint32_t zoom, double x) noexcept {
|
||||||
|
return static_cast<uint32_t>(detail::clamp<int32_t>(
|
||||||
|
static_cast<int32_t>((x + detail::max_coordinate_epsg3857) / tile_extent_in_zoom(zoom)),
|
||||||
|
0, num_tiles_in_zoom(zoom) -1
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get the tile y number from an y coordinate in web mercator
|
||||||
|
* projection in the given zoom level. Tiles are numbered from top
|
||||||
|
* to bottom.
|
||||||
|
*/
|
||||||
|
inline constexpr uint32_t mercy_to_tiley(uint32_t zoom, double y) noexcept {
|
||||||
|
return static_cast<uint32_t>(detail::clamp<int32_t>(
|
||||||
|
static_cast<int32_t>((detail::max_coordinate_epsg3857 - y) / tile_extent_in_zoom(zoom)),
|
||||||
|
0, num_tiles_in_zoom(zoom) -1
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A tile in the usual Mercator projection.
|
* A tile in the usual Mercator projection.
|
||||||
*/
|
*/
|
||||||
@ -77,10 +115,13 @@ namespace osmium {
|
|||||||
*
|
*
|
||||||
* @pre @code zoom <= 30 && x < 2^zoom && y < 2^zoom @endcode
|
* @pre @code zoom <= 30 && x < 2^zoom && y < 2^zoom @endcode
|
||||||
*/
|
*/
|
||||||
explicit Tile(uint32_t zoom, uint32_t tx, uint32_t ty) noexcept : x(tx), y(ty), z(zoom) {
|
explicit Tile(uint32_t zoom, uint32_t tx, uint32_t ty) noexcept :
|
||||||
|
x(tx),
|
||||||
|
y(ty),
|
||||||
|
z(zoom) {
|
||||||
assert(zoom <= 30u);
|
assert(zoom <= 30u);
|
||||||
assert(x < (1u << zoom));
|
assert(x < num_tiles_in_zoom(zoom));
|
||||||
assert(y < (1u << zoom));
|
assert(y < num_tiles_in_zoom(zoom));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -95,11 +136,24 @@ namespace osmium {
|
|||||||
z(zoom) {
|
z(zoom) {
|
||||||
assert(zoom <= 30u);
|
assert(zoom <= 30u);
|
||||||
assert(location.valid());
|
assert(location.valid());
|
||||||
const osmium::geom::Coordinates c = lonlat_to_mercator(location);
|
const auto coordinates = lonlat_to_mercator(location);
|
||||||
const int32_t n = 1 << zoom;
|
x = mercx_to_tilex(zoom, coordinates.x);
|
||||||
const double scale = detail::max_coordinate_epsg3857 * 2 / n;
|
y = mercy_to_tiley(zoom, coordinates.y);
|
||||||
x = uint32_t(detail::restrict_to_range<int32_t>(int32_t((c.x + detail::max_coordinate_epsg3857) / scale), 0, n-1));
|
}
|
||||||
y = uint32_t(detail::restrict_to_range<int32_t>(int32_t((detail::max_coordinate_epsg3857 - c.y) / scale), 0, n-1));
|
|
||||||
|
/**
|
||||||
|
* Create a tile with the given zoom level that contains the given
|
||||||
|
* coordinates in Mercator projection.
|
||||||
|
*
|
||||||
|
* The values are not checked for validity.
|
||||||
|
*
|
||||||
|
* @pre @code coordinates.valid() && zoom <= 30 @endcode
|
||||||
|
*/
|
||||||
|
explicit Tile(uint32_t zoom, const osmium::geom::Coordinates& coordinates) :
|
||||||
|
z(zoom) {
|
||||||
|
assert(zoom <= 30u);
|
||||||
|
x = mercx_to_tilex(zoom, coordinates.x);
|
||||||
|
y = mercy_to_tiley(zoom, coordinates.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -111,7 +165,7 @@ namespace osmium {
|
|||||||
if (z > 30) {
|
if (z > 30) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
const uint32_t max = 1 << z;
|
const auto max = num_tiles_in_zoom(z);
|
||||||
return x < max && y < max;
|
return x < max && y < max;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ namespace osmium {
|
|||||||
struct call_flush {
|
struct call_flush {
|
||||||
void operator()(THandlers& handlers) {
|
void operator()(THandlers& handlers) {
|
||||||
std::get<N>(handlers).flush();
|
std::get<N>(handlers).flush();
|
||||||
call_flush<N+1, SIZE, THandlers>()(handlers);
|
call_flush<N + 1, SIZE, THandlers>()(handlers);
|
||||||
}
|
}
|
||||||
}; // struct call_flush
|
}; // struct call_flush
|
||||||
|
|
||||||
@ -107,7 +107,7 @@ namespace osmium {
|
|||||||
call_relation<0, sizeof...(THandler), handlers_type>()(m_handlers, relation);
|
call_relation<0, sizeof...(THandler), handlers_type>()(m_handlers, relation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void changeset( osmium::Changeset& changeset) {
|
void changeset(osmium::Changeset& changeset) {
|
||||||
call_changeset<0, sizeof...(THandler), handlers_type>()(m_handlers, changeset);
|
call_changeset<0, sizeof...(THandler), handlers_type>()(m_handlers, changeset);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -67,8 +67,10 @@ namespace osmium {
|
|||||||
* Handler that can be used to check that an OSM file is ordered
|
* Handler that can be used to check that an OSM file is ordered
|
||||||
* correctly. Ordered in this case refers to the usual order in OSM
|
* correctly. Ordered in this case refers to the usual order in OSM
|
||||||
* files: First nodes in the order of their IDs, then ways in the order
|
* files: First nodes in the order of their IDs, then ways in the order
|
||||||
* of their IDs, then relations in the order or their IDs. IDs have to
|
* of their IDs, then relations in the order or their IDs.
|
||||||
* be unique for each type.
|
*
|
||||||
|
* IDs have to be unique for each type. This check will fail for
|
||||||
|
* history files.
|
||||||
*
|
*
|
||||||
* To use this add a CheckOrder member variable to your handler and
|
* To use this add a CheckOrder member variable to your handler and
|
||||||
* call the node(), way(), and relation() methods from your node(),
|
* call the node(), way(), and relation() methods from your node(),
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -83,9 +83,9 @@ namespace osmium {
|
|||||||
|
|
||||||
osmium::unsigned_object_id_type m_last_id{0};
|
osmium::unsigned_object_id_type m_last_id{0};
|
||||||
|
|
||||||
bool m_ignore_errors {false};
|
bool m_ignore_errors{false};
|
||||||
|
|
||||||
bool m_must_sort {false};
|
bool m_must_sort{false};
|
||||||
|
|
||||||
// It is okay to have this static dummy instance, even when using several threads,
|
// It is okay to have this static dummy instance, even when using several threads,
|
||||||
// because it is read-only.
|
// because it is read-only.
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -103,22 +103,27 @@ namespace osmium {
|
|||||||
return m_size == 0;
|
return m_size == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
const T* data() const {
|
const_pointer data() const {
|
||||||
return m_mapping.begin();
|
return m_mapping.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
T* data() {
|
pointer data() {
|
||||||
return m_mapping.begin();
|
return m_mapping.begin();
|
||||||
}
|
}
|
||||||
|
|
||||||
T& operator[](size_t n) {
|
const_reference operator[](size_t n) const {
|
||||||
assert(n < m_size);
|
assert(n < m_size);
|
||||||
return data()[n];
|
return data()[n];
|
||||||
}
|
}
|
||||||
|
|
||||||
T at(size_t n) const {
|
reference operator[](size_t n) {
|
||||||
|
assert(n < m_size);
|
||||||
|
return data()[n];
|
||||||
|
}
|
||||||
|
|
||||||
|
value_type at(size_t n) const {
|
||||||
if (n >= m_size) {
|
if (n >= m_size) {
|
||||||
throw std::out_of_range("out of range");
|
throw std::out_of_range{"out of range"};
|
||||||
}
|
}
|
||||||
return data()[n];
|
return data()[n];
|
||||||
}
|
}
|
||||||
@ -128,21 +133,21 @@ namespace osmium {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void shrink_to_fit() {
|
void shrink_to_fit() {
|
||||||
while (m_size > 0 && data()[m_size - 1] == osmium::index::empty_value<T>()) {
|
while (m_size > 0 && data()[m_size - 1] == osmium::index::empty_value<value_type>()) {
|
||||||
--m_size;
|
--m_size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void push_back(const T& value) {
|
void push_back(const_reference value) {
|
||||||
resize(m_size+1);
|
resize(m_size + 1);
|
||||||
data()[m_size-1] = value;
|
data()[m_size - 1] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
void reserve(size_t new_capacity) {
|
void reserve(size_t new_capacity) {
|
||||||
if (new_capacity > capacity()) {
|
if (new_capacity > capacity()) {
|
||||||
const size_t old_capacity = capacity();
|
const size_t old_capacity = capacity();
|
||||||
m_mapping.resize(new_capacity);
|
m_mapping.resize(new_capacity);
|
||||||
std::fill(data() + old_capacity, data() + new_capacity, osmium::index::empty_value<T>());
|
std::fill(data() + old_capacity, data() + new_capacity, osmium::index::empty_value<value_type>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -81,16 +81,22 @@ namespace osmium {
|
|||||||
m_vector[id] = value;
|
m_vector[id] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TValue get(const TId id) const final {
|
TValue get(const TId id) const final {
|
||||||
try {
|
if (id >= m_vector.size()) {
|
||||||
const TValue& value = m_vector.at(id);
|
throw osmium::not_found{id};
|
||||||
|
}
|
||||||
|
const TValue value = m_vector[id];
|
||||||
if (value == osmium::index::empty_value<TValue>()) {
|
if (value == osmium::index::empty_value<TValue>()) {
|
||||||
throw osmium::not_found{id};
|
throw osmium::not_found{id};
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
} catch (const std::out_of_range&) {
|
|
||||||
throw osmium::not_found{id};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TValue get_noexcept(const TId id) const noexcept final {
|
||||||
|
if (id >= m_vector.size()) {
|
||||||
|
return osmium::index::empty_value<TValue>();
|
||||||
|
}
|
||||||
|
return m_vector[id];
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t size() const final {
|
size_t size() const final {
|
||||||
@ -155,6 +161,16 @@ namespace osmium {
|
|||||||
|
|
||||||
vector_type m_vector;
|
vector_type m_vector;
|
||||||
|
|
||||||
|
typename vector_type::const_iterator find_id(const TId id) const noexcept {
|
||||||
|
const element_type element {
|
||||||
|
id,
|
||||||
|
osmium::index::empty_value<TValue>()
|
||||||
|
};
|
||||||
|
return std::lower_bound(m_vector.begin(), m_vector.end(), element, [](const element_type& a, const element_type& b) {
|
||||||
|
return a.first < b.first;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
VectorBasedSparseMap() :
|
VectorBasedSparseMap() :
|
||||||
@ -171,19 +187,22 @@ namespace osmium {
|
|||||||
m_vector.push_back(element_type(id, value));
|
m_vector.push_back(element_type(id, value));
|
||||||
}
|
}
|
||||||
|
|
||||||
const TValue get(const TId id) const final {
|
TValue get(const TId id) const final {
|
||||||
const element_type element {
|
const auto result = find_id(id);
|
||||||
id,
|
|
||||||
osmium::index::empty_value<TValue>()
|
|
||||||
};
|
|
||||||
const auto result = std::lower_bound(m_vector.begin(), m_vector.end(), element, [](const element_type& a, const element_type& b) {
|
|
||||||
return a.first < b.first;
|
|
||||||
});
|
|
||||||
if (result == m_vector.end() || result->first != id) {
|
if (result == m_vector.end() || result->first != id) {
|
||||||
throw osmium::not_found{id};
|
throw osmium::not_found{id};
|
||||||
} else {
|
}
|
||||||
|
|
||||||
return result->second;
|
return result->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TValue get_noexcept(const TId id) const noexcept final {
|
||||||
|
const auto result = find_id(id);
|
||||||
|
if (result == m_vector.end() || result->first != id) {
|
||||||
|
return osmium::index::empty_value<TValue>();
|
||||||
|
}
|
||||||
|
|
||||||
|
return result->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
size_t size() const final {
|
size_t size() const final {
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -126,8 +126,25 @@ namespace osmium {
|
|||||||
/// Set the field with id to value.
|
/// Set the field with id to value.
|
||||||
virtual void set(const TId id, const TValue value) = 0;
|
virtual void set(const TId id, const TValue value) = 0;
|
||||||
|
|
||||||
/// Retrieve value by id. Does not check for overflow or empty fields.
|
/**
|
||||||
virtual const TValue get(const TId id) const = 0;
|
* Retrieve value by id.
|
||||||
|
*
|
||||||
|
* @param id The id to look for.
|
||||||
|
* @returns Value.
|
||||||
|
* @throws osmium::not_found if the id could not be found.
|
||||||
|
*/
|
||||||
|
virtual TValue get(const TId id) const = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Retrieve value by id.
|
||||||
|
*
|
||||||
|
* @param id The id to look for.
|
||||||
|
* @returns Value or, if not found, the empty value as defined
|
||||||
|
* by osmium::index::empty_value<TValue>() which is
|
||||||
|
* usually the default constructed value of type
|
||||||
|
* TValue.
|
||||||
|
*/
|
||||||
|
virtual TValue get_noexcept(const TId id) const noexcept = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get the approximate number of items in the storage. The storage
|
* Get the approximate number of items in the storage. The storage
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -62,10 +62,14 @@ namespace osmium {
|
|||||||
// intentionally left blank
|
// intentionally left blank
|
||||||
}
|
}
|
||||||
|
|
||||||
const TValue get(const TId id) const final {
|
TValue get(const TId id) const final {
|
||||||
throw osmium::not_found{id};
|
throw osmium::not_found{id};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TValue get_noexcept(const TId /*id*/) const noexcept final {
|
||||||
|
return osmium::index::empty_value<TValue>();
|
||||||
|
}
|
||||||
|
|
||||||
size_t size() const final {
|
size_t size() const final {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -76,14 +76,22 @@ namespace osmium {
|
|||||||
m_elements[id] = value;
|
m_elements[id] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TValue get(const TId id) const final {
|
TValue get(const TId id) const final {
|
||||||
auto it = m_elements.find(id);
|
const auto it = m_elements.find(id);
|
||||||
if (it == m_elements.end()) {
|
if (it == m_elements.end()) {
|
||||||
throw osmium::not_found{id};
|
throw osmium::not_found{id};
|
||||||
}
|
}
|
||||||
return it->second;
|
return it->second;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TValue get_noexcept(const TId id) const noexcept final {
|
||||||
|
const auto it = m_elements.find(id);
|
||||||
|
if (it == m_elements.end()) {
|
||||||
|
return osmium::index::empty_value<TValue>();
|
||||||
|
}
|
||||||
|
return it->second;
|
||||||
|
}
|
||||||
|
|
||||||
size_t size() const noexcept final {
|
size_t size() const noexcept final {
|
||||||
return m_elements.size();
|
return m_elements.size();
|
||||||
}
|
}
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
@ -97,13 +97,21 @@ namespace osmium {
|
|||||||
m_elements[id] = value;
|
m_elements[id] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
const TValue get(const TId id) const final {
|
TValue get(const TId id) const final {
|
||||||
if (id >= m_elements.size()) {
|
if (id >= m_elements.size()) {
|
||||||
throw osmium::not_found{id};
|
throw osmium::not_found{id};
|
||||||
}
|
}
|
||||||
if (m_elements[id] == osmium::index::empty_value<TValue>()) {
|
const TValue value = m_elements[id];
|
||||||
|
if (value == osmium::index::empty_value<TValue>()) {
|
||||||
throw osmium::not_found{id};
|
throw osmium::not_found{id};
|
||||||
}
|
}
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
TValue get_noexcept(const TId id) const noexcept final {
|
||||||
|
if (id >= m_elements.size()) {
|
||||||
|
return osmium::index::empty_value<TValue>();
|
||||||
|
}
|
||||||
return m_elements[id];
|
return m_elements[id];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
292
third_party/libosmium/include/osmium/index/relations_map.hpp
vendored
Normal file
292
third_party/libosmium/include/osmium/index/relations_map.hpp
vendored
Normal file
@ -0,0 +1,292 @@
|
|||||||
|
#ifndef OSMIUM_INDEX_RELATIONS_MAP_HPP
|
||||||
|
#define OSMIUM_INDEX_RELATIONS_MAP_HPP
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person or organization
|
||||||
|
obtaining a copy of the software and accompanying documentation covered by
|
||||||
|
this license (the "Software") to use, reproduce, display, distribute,
|
||||||
|
execute, and transmit the Software, and to prepare derivative works of the
|
||||||
|
Software, and to permit third-parties to whom the Software is furnished to
|
||||||
|
do so, all subject to the following:
|
||||||
|
|
||||||
|
The copyright notices in the Software and this entire statement, including
|
||||||
|
the above license grant, this restriction and the following disclaimer,
|
||||||
|
must be included in all copies of the Software, in whole or in part, and
|
||||||
|
all derivative works of the Software, unless such copies or derivative
|
||||||
|
works are solely in the form of machine-executable object code generated by
|
||||||
|
a source language processor.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT
|
||||||
|
SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE
|
||||||
|
FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE,
|
||||||
|
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
|
||||||
|
DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <cassert>
|
||||||
|
#include <cstdint>
|
||||||
|
#include <tuple>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
#include <osmium/osm/relation.hpp>
|
||||||
|
#include <osmium/osm/types.hpp>
|
||||||
|
|
||||||
|
namespace osmium {
|
||||||
|
|
||||||
|
namespace index {
|
||||||
|
|
||||||
|
namespace detail {
|
||||||
|
|
||||||
|
template <typename TKey, typename TKeyInternal, typename TValue, typename TValueInternal>
|
||||||
|
class flat_map {
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
using key_type = TKey;
|
||||||
|
using value_type = TValue;
|
||||||
|
|
||||||
|
private:
|
||||||
|
|
||||||
|
struct kv_pair {
|
||||||
|
TKeyInternal key;
|
||||||
|
TValueInternal value;
|
||||||
|
|
||||||
|
explicit kv_pair(key_type key_id) :
|
||||||
|
key(static_cast<TKeyInternal>(key_id)),
|
||||||
|
value() {
|
||||||
|
}
|
||||||
|
|
||||||
|
kv_pair(key_type key_id, value_type value_id) :
|
||||||
|
key(static_cast<TKeyInternal>(key_id)),
|
||||||
|
value(static_cast<TValueInternal>(value_id)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator<(const kv_pair& other) const noexcept {
|
||||||
|
return std::tie(key, value) < std::tie(other.key, other.value);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool operator==(const kv_pair& other) const noexcept {
|
||||||
|
return std::tie(key, value) == std::tie(other.key, other.value);
|
||||||
|
}
|
||||||
|
}; // struct kv_pair
|
||||||
|
|
||||||
|
std::vector<kv_pair> m_map;
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
using const_iterator = typename std::vector<kv_pair>::const_iterator;
|
||||||
|
|
||||||
|
void set(key_type key, value_type value) {
|
||||||
|
m_map.emplace_back(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void sort_unique() {
|
||||||
|
std::sort(m_map.begin(), m_map.end());
|
||||||
|
const auto last = std::unique(m_map.begin(), m_map.end());
|
||||||
|
m_map.erase(last, m_map.end());
|
||||||
|
}
|
||||||
|
|
||||||
|
std::pair<const_iterator, const_iterator> get(key_type key) const noexcept {
|
||||||
|
return std::equal_range(m_map.begin(), m_map.end(), kv_pair{key}, [](const kv_pair& lhs, const kv_pair& rhs) {
|
||||||
|
return lhs.key < rhs.key;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
bool empty() const noexcept {
|
||||||
|
return m_map.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t size() const noexcept {
|
||||||
|
return m_map.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
}; // class flat_map
|
||||||
|
|
||||||
|
} // namespace detail
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Index for looking up parent relation IDs given a member relation ID.
|
||||||
|
* You can not instantiate such an index yourself, instead you need to
|
||||||
|
* instantiate a RelationsMapStash, fill it and then create an index from
|
||||||
|
* it:
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* RelationsMapStash stash;
|
||||||
|
* ...
|
||||||
|
* for_each_relation(const osmium::Relation& relation) {
|
||||||
|
* stash.add_members(relation);
|
||||||
|
* }
|
||||||
|
* ...
|
||||||
|
* const auto index = stash.build_index();
|
||||||
|
* ...
|
||||||
|
* osmium::unsigned_object_id_type member_id = ...;
|
||||||
|
* index.for_each_parent(member_id, [](osmium::unsigned_object_id_type id) {
|
||||||
|
* ...
|
||||||
|
* });
|
||||||
|
* ...
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
class RelationsMapIndex {
|
||||||
|
|
||||||
|
friend class RelationsMapStash;
|
||||||
|
|
||||||
|
using map_type = detail::flat_map<osmium::unsigned_object_id_type, uint32_t,
|
||||||
|
osmium::unsigned_object_id_type, uint32_t>;
|
||||||
|
|
||||||
|
map_type m_map;
|
||||||
|
|
||||||
|
RelationsMapIndex(map_type&& map) :
|
||||||
|
m_map(std::move(map)) {
|
||||||
|
}
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
RelationsMapIndex() = delete;
|
||||||
|
|
||||||
|
RelationsMapIndex(const RelationsMapIndex&) = delete;
|
||||||
|
RelationsMapIndex& operator=(const RelationsMapIndex&) = delete;
|
||||||
|
|
||||||
|
RelationsMapIndex(RelationsMapIndex&&) = default;
|
||||||
|
RelationsMapIndex& operator=(RelationsMapIndex&&) = default;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Find the given relation id in the index and call the given function
|
||||||
|
* with all parent relation ids.
|
||||||
|
*
|
||||||
|
* @code
|
||||||
|
* osmium::unsigned_object_id_type member_id = 17;
|
||||||
|
* index.for_each_parent(member_id, [](osmium::unsigned_object_id_type id) {
|
||||||
|
* ...
|
||||||
|
* });
|
||||||
|
* @endcode
|
||||||
|
*
|
||||||
|
* Complexity: Logarithmic in the number of elements in the index.
|
||||||
|
* (Lookup uses binary search.)
|
||||||
|
*/
|
||||||
|
template <typename Func>
|
||||||
|
void for_each_parent(osmium::unsigned_object_id_type member_id, Func&& func) const {
|
||||||
|
const auto parents = m_map.get(member_id);
|
||||||
|
for (auto it = parents.first; it != parents.second; ++it) {
|
||||||
|
std::forward<Func>(func)(it->value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is this index empty?
|
||||||
|
*
|
||||||
|
* Complexity: Constant.
|
||||||
|
*/
|
||||||
|
bool empty() const noexcept {
|
||||||
|
return m_map.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* How many entries are in this index?
|
||||||
|
*
|
||||||
|
* Complexity: Constant.
|
||||||
|
*/
|
||||||
|
size_t size() const noexcept {
|
||||||
|
return m_map.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
}; // RelationsMapIndex
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The RelationsMapStash is used to build up the data needed to create
|
||||||
|
* an index of member relation ID to parent relation ID. See the
|
||||||
|
* RelationsMapIndex class for more.
|
||||||
|
*/
|
||||||
|
class RelationsMapStash {
|
||||||
|
|
||||||
|
using map_type = detail::flat_map<osmium::unsigned_object_id_type, uint32_t,
|
||||||
|
osmium::unsigned_object_id_type, uint32_t>;
|
||||||
|
|
||||||
|
map_type m_map;
|
||||||
|
|
||||||
|
#ifndef NDEBUG
|
||||||
|
bool m_valid = true;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
public:
|
||||||
|
|
||||||
|
RelationsMapStash() = default;
|
||||||
|
|
||||||
|
RelationsMapStash(const RelationsMapStash&) = delete;
|
||||||
|
RelationsMapStash& operator=(const RelationsMapStash&) = delete;
|
||||||
|
|
||||||
|
RelationsMapStash(RelationsMapStash&&) = default;
|
||||||
|
RelationsMapStash& operator=(RelationsMapStash&&) = default;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add mapping from member to parent relation in the stash.
|
||||||
|
*/
|
||||||
|
void add(osmium::unsigned_object_id_type member_id, osmium::unsigned_object_id_type relation_id) {
|
||||||
|
assert(m_valid && "You can't use the RelationsMap any more after calling build_index()");
|
||||||
|
m_map.set(member_id, relation_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Add mapping from all members to given parent relation in the stash.
|
||||||
|
*/
|
||||||
|
void add_members(const osmium::Relation& relation) {
|
||||||
|
assert(m_valid && "You can't use the RelationsMap any more after calling build_index()");
|
||||||
|
for (const auto& member : relation.members()) {
|
||||||
|
if (member.type() == osmium::item_type::relation) {
|
||||||
|
m_map.set(member.positive_ref(), relation.positive_id());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Is this stash empty?
|
||||||
|
*
|
||||||
|
* Complexity: Constant.
|
||||||
|
*/
|
||||||
|
bool empty() const noexcept {
|
||||||
|
assert(m_valid && "You can't use the RelationsMap any more after calling build_index()");
|
||||||
|
return m_map.empty();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* How many entries are in this stash?
|
||||||
|
*
|
||||||
|
* Complexity: Constant.
|
||||||
|
*/
|
||||||
|
size_t size() const noexcept {
|
||||||
|
assert(m_valid && "You can't use the RelationsMap any more after calling build_index()");
|
||||||
|
return m_map.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Build an index with the contents of this stash and return it.
|
||||||
|
*
|
||||||
|
* After you get the index you can not use the stash any more!
|
||||||
|
*/
|
||||||
|
RelationsMapIndex build_index() {
|
||||||
|
assert(m_valid && "You can't use the RelationsMap any more after calling build_index()");
|
||||||
|
m_map.sort_unique();
|
||||||
|
#ifndef NDEBUG
|
||||||
|
m_valid = false;
|
||||||
|
#endif
|
||||||
|
return RelationsMapIndex{std::move(m_map)};
|
||||||
|
}
|
||||||
|
|
||||||
|
}; // class RelationsMapStash
|
||||||
|
|
||||||
|
} // namespace index
|
||||||
|
|
||||||
|
} // namespace osmium
|
||||||
|
|
||||||
|
#endif // OSMIUM_INDEX_RELATIONS_MAP_HPP
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
This file is part of Osmium (http://osmcode.org/libosmium).
|
This file is part of Osmium (http://osmcode.org/libosmium).
|
||||||
|
|
||||||
Copyright 2013-2016 Jochen Topf <jochen@topf.org> and others (see README).
|
Copyright 2013-2017 Jochen Topf <jochen@topf.org> and others (see README).
|
||||||
|
|
||||||
Boost Software License - Version 1.0 - August 17th, 2003
|
Boost Software License - Version 1.0 - August 17th, 2003
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user