Compare commits
10 commits
master
...
stats_proc
Author | SHA1 | Date | |
---|---|---|---|
|
37daca644a | ||
|
8665291dc4 | ||
|
c1b3f3000d | ||
|
4273a08e52 | ||
|
249cb3e2ca | ||
|
7ebc714b82 | ||
|
cdeb10e3c5 | ||
|
c0c6962780 | ||
|
508f580395 | ||
|
8b1ddd8766 |
3989 changed files with 247472 additions and 626085 deletions
|
@ -1,94 +0,0 @@
|
|||
Language: Cpp
|
||||
AccessModifierOffset: -2
|
||||
AlignAfterOpenBracket: Align
|
||||
AlignArrayOfStructures: None
|
||||
AlignConsecutiveAssignments: None
|
||||
AlignConsecutiveDeclarations: None
|
||||
AlignConsecutiveMacros: Consecutive
|
||||
AlignEscapedNewlines: Right
|
||||
AlignOperands: Align
|
||||
AlignTrailingComments: true
|
||||
AllowAllArgumentsOnNextLine: false
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
AllowShortBlocksOnASingleLine: Empty
|
||||
AllowShortCaseLabelsOnASingleLine: false
|
||||
AllowShortEnumsOnASingleLine: true
|
||||
AllowShortFunctionsOnASingleLine: Inline
|
||||
AllowShortIfStatementsOnASingleLine: Never
|
||||
AllowShortLambdasOnASingleLine: Inline
|
||||
# AlwaysBreakAfterReturnType:
|
||||
AlwaysBreakBeforeMultilineStrings: false
|
||||
AlwaysBreakTemplateDeclarations: Yes
|
||||
BinPackArguments: false
|
||||
BitFieldColonSpacing: After
|
||||
BreakBeforeBraces: Custom
|
||||
BraceWrapping:
|
||||
AfterCaseLabel: false
|
||||
AfterClass: true
|
||||
AfterControlStatement: Always
|
||||
AfterEnum: false # see AllowShortEnumsOnASingleLine
|
||||
AfterFunction: true # see AllowShortFunctionsOnASingleLine
|
||||
AfterNamespace: false
|
||||
AfterStruct: true
|
||||
AfterExternBlock: false
|
||||
BeforeCatch: true
|
||||
BeforeElse: true
|
||||
BeforeLambdaBody: false
|
||||
BeforeWhile: false
|
||||
SplitEmptyFunction: false
|
||||
SplitEmptyRecord: false
|
||||
SplitEmptyNamespace: false
|
||||
BreakBeforeBinaryOperators: None
|
||||
BreakBeforeConceptDeclarations: false
|
||||
BreakBeforeTernaryOperators: true
|
||||
BreakConstructorInitializers: BeforeComma
|
||||
BreakInheritanceList: AfterComma
|
||||
BreakStringLiterals: true
|
||||
ColumnLimit: 120
|
||||
CompactNamespaces: false
|
||||
ContinuationIndentWidth: 2
|
||||
Cpp11BracedListStyle: true
|
||||
DeriveLineEnding: true
|
||||
EmptyLineAfterAccessModifier: Leave
|
||||
EmptyLineBeforeAccessModifier: LogicalBlock
|
||||
FixNamespaceComments: true
|
||||
IncludeBlocks: Preserve
|
||||
IndentCaseBlocks: false
|
||||
IndentCaseLabels: true
|
||||
IndentExternBlock: NoIndent
|
||||
IndentPPDirectives: None
|
||||
IndentRequires: true
|
||||
IndentWidth: 4
|
||||
IndentWrappedFunctionNames: true
|
||||
KeepEmptyLinesAtTheStartOfBlocks: false
|
||||
LambdaBodyIndentation: Signature
|
||||
MaxEmptyLinesToKeep: 1
|
||||
NamespaceIndentation: None
|
||||
# PackConstructorInitializers: CurrentLine # only clang-format > 14
|
||||
PointerAlignment: Left
|
||||
#QualifierAlignment: Left # only clang-format > 14
|
||||
ReferenceAlignment: Left
|
||||
ReflowComments: true
|
||||
SortIncludes: Never
|
||||
SpaceAfterLogicalNot: false
|
||||
SpaceAfterTemplateKeyword: false
|
||||
SpaceBeforeInheritanceColon: true
|
||||
Standard: c++14
|
||||
BinPackParameters: false
|
||||
BreakBeforeInheritanceComma: false
|
||||
IncludeCategories:
|
||||
# Headers in <> without extension.
|
||||
- Regex: '<([A-Za-z0-9\Q/-_\E])+>'
|
||||
Priority: 1
|
||||
# Headers in <> from specific external libraries.
|
||||
- Regex: '<(boost)\/'
|
||||
Priority: 2
|
||||
# Headers in <> from specific external libraries.
|
||||
- Regex: '<(mapnik)\/'
|
||||
Priority: 3
|
||||
# Headers in <> with extension.
|
||||
- Regex: '<([A-Za-z0-9.\Q/-_\E])+>'
|
||||
Priority: 4
|
||||
# Headers in "" with extension.
|
||||
- Regex: '"([A-Za-z0-9.\Q/-_\E])+"'
|
||||
Priority: 5
|
2
.gitattributes
vendored
2
.gitattributes
vendored
|
@ -1,2 +0,0 @@
|
|||
*.svg text eol=lf
|
||||
scons/** linguist-vendored
|
85
.github/actions/run_tests/action.yml
vendored
85
.github/actions/run_tests/action.yml
vendored
|
@ -1,85 +0,0 @@
|
|||
name: Run tests with coverage
|
||||
description: Runs all mapnik tests with coverage
|
||||
inputs:
|
||||
cmake-preset:
|
||||
description: The used CMake preset
|
||||
required: true
|
||||
|
||||
runs:
|
||||
using: composite
|
||||
steps:
|
||||
- name: Set PROJ_LIB
|
||||
shell: bash
|
||||
run: |
|
||||
cmake --preset ${{ inputs.cmake-preset }} -N -L | grep -o "PROJ_LIB=.*" >> ${GITHUB_ENV}
|
||||
|
||||
- name: Set TEST_WRAPPER (Windows)
|
||||
if: runner.os == 'Windows'
|
||||
shell: bash
|
||||
run: |-
|
||||
echo "TEST_WRAPPER=OpenCppCoverage \
|
||||
--cover_children \
|
||||
--export_type binary \
|
||||
--modules '*.input' \
|
||||
--modules '*libmapnik*' \
|
||||
--modules 'mapnik*.exe' \
|
||||
--quiet \
|
||||
--sources '${{ github.workspace }}' \
|
||||
--" >> ${GITHUB_ENV}
|
||||
|
||||
- name: Test
|
||||
shell: bash
|
||||
env:
|
||||
UPDATE: 1
|
||||
run: |
|
||||
${TEST_WRAPPER:-} ctest --preset ${{ inputs.cmake-preset }}
|
||||
|
||||
- name: Test visuals
|
||||
continue-on-error: true
|
||||
working-directory: build/out
|
||||
shell: bash
|
||||
run: |
|
||||
${TEST_WRAPPER:-} ./mapnik-test-visual -j ${CTEST_PARALLEL_LEVEL} --output-dir visual-test-result
|
||||
|
||||
- name: Pack visual test results
|
||||
working-directory: build/out
|
||||
shell: bash
|
||||
run: |
|
||||
tar -vzcf visual-test-results.tar.gz visual-test-result
|
||||
|
||||
- name: Upload visual test results
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ inputs.cmake-preset }}-visual-tests-${{ github.sha }}
|
||||
path: build/out/visual-test-results.tar.gz
|
||||
|
||||
- name: Run Benchmarks (Linux & macOS)
|
||||
working-directory: build/out
|
||||
if: runner.os != 'Windows'
|
||||
shell: bash
|
||||
run: |
|
||||
./run_benchmarks
|
||||
|
||||
- name: Collect coverage (Linux & macOS)
|
||||
working-directory: build
|
||||
if: runner.os != 'Windows'
|
||||
shell: bash
|
||||
run: |
|
||||
if [ "${RUNNER_OS}" == "macOS" ]; then
|
||||
LCOV_EXTRA_OPTIONS="--ignore-errors count,gcov,inconsistent,range,unused --keep-going"
|
||||
fi
|
||||
lcov ${LCOV_EXTRA_OPTIONS:-} --directory . --capture --output-file coverage.info
|
||||
lcov ${LCOV_EXTRA_OPTIONS:-} --remove coverage.info '/usr/*' '*/vcpkg_installed/*' '/.cache/*' '*/test/*' --output-file coverage.info
|
||||
lcov ${LCOV_EXTRA_OPTIONS:-} --list coverage.info
|
||||
|
||||
- name: Upload coverage to Codecov (Linux & macOS)
|
||||
if: runner.os != 'Windows'
|
||||
uses: codecov/codecov-action@v4
|
||||
with:
|
||||
files: build/coverage.info
|
||||
|
||||
- name: Upload coverage to Codecov (Windows)
|
||||
if: runner.os == 'Windows'
|
||||
uses: codecov/codecov-action@v4
|
||||
with:
|
||||
files: ctest.cov,build/out/mapnik-test-visual.cov
|
136
.github/workflows/build_and_test.yml
vendored
136
.github/workflows/build_and_test.yml
vendored
|
@ -1,136 +0,0 @@
|
|||
name: Build and Test
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "*"
|
||||
pull_request:
|
||||
branches-ignore:
|
||||
- "no-ci-*"
|
||||
|
||||
env:
|
||||
VCPKG_BINARY_SOURCES: clear;x-gha,readwrite
|
||||
VCPKG_RELEASE: 2024.06.15
|
||||
|
||||
jobs:
|
||||
checkSource:
|
||||
name: Check Source Code
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: "3.10"
|
||||
- uses: pre-commit/action@v3.0.1
|
||||
|
||||
buildAndTest:
|
||||
name: >-
|
||||
Build & Test
|
||||
(${{ matrix.os }})
|
||||
(C++ ${{ matrix.cxx-standard }})
|
||||
${{ startsWith(matrix.os, 'macos-') && (matrix.os == 'macos-14' && '(ARM64)' || '(AMD64)') || '' }}
|
||||
needs: checkSource
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
os:
|
||||
- macos-14
|
||||
- ubuntu-22.04
|
||||
- windows-2022
|
||||
cxx-standard:
|
||||
- 17
|
||||
|
||||
steps:
|
||||
- name: Checkout Mapnik
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: recursive
|
||||
|
||||
- name: Checkout vcpkg
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
path: vcpkg
|
||||
ref: ${{ env.VCPKG_RELEASE }}
|
||||
repository: microsoft/vcpkg
|
||||
|
||||
- name: Export GitHub Actions cache environment variables
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
core.exportVariable('ACTIONS_CACHE_URL', process.env.ACTIONS_CACHE_URL || '');
|
||||
core.exportVariable('ACTIONS_RUNTIME_TOKEN', process.env.ACTIONS_RUNTIME_TOKEN || '');
|
||||
|
||||
- name: Install required system packages
|
||||
shell: bash
|
||||
run: |
|
||||
if [ "${RUNNER_OS}" == "Linux" ]; then
|
||||
sudo apt-get update
|
||||
sudo apt-get -y install \
|
||||
autoconf \
|
||||
autoconf-archive \
|
||||
automake \
|
||||
gperf \
|
||||
lcov \
|
||||
libxxf86vm-dev \
|
||||
ninja-build \
|
||||
postgresql-client
|
||||
elif [ "${RUNNER_OS}" == "macOS" ]; then
|
||||
brew install \
|
||||
autoconf \
|
||||
autoconf-archive \
|
||||
automake \
|
||||
lcov \
|
||||
libtool \
|
||||
ninja \
|
||||
vcpkg
|
||||
elif [ "${RUNNER_OS}" == "Windows" ]; then
|
||||
choco install \
|
||||
ninja \
|
||||
OpenCppCoverage
|
||||
echo "C:\Program Files\OpenCppCoverage" >> ${GITHUB_PATH}
|
||||
fi
|
||||
|
||||
- name: Enable Developer Command Prompt (Windows)
|
||||
uses: ilammy/msvc-dev-cmd@v1
|
||||
if: runner.os == 'Windows'
|
||||
|
||||
- name: Set CMAKE_BUILD_PARALLEL_LEVEL, CTEST_PARALLEL_LEVEL & PRESET
|
||||
shell: bash
|
||||
run: |
|
||||
PRESET=$(echo "${RUNNER_OS}" | perl -ne "print lc")-ci
|
||||
if [ "${RUNNER_OS}" == "Linux" ]; then
|
||||
echo "CMAKE_BUILD_PARALLEL_LEVEL=$(nproc)" >> ${GITHUB_ENV}
|
||||
echo "CTEST_PARALLEL_LEVEL=$(nproc)" >> ${GITHUB_ENV}
|
||||
elif [ "${RUNNER_OS}" == "macOS" ]; then
|
||||
echo "CMAKE_BUILD_PARALLEL_LEVEL=$(sysctl -n hw.logicalcpu)" >> ${GITHUB_ENV}
|
||||
echo "CTEST_PARALLEL_LEVEL=$(sysctl -n hw.logicalcpu)" >> ${GITHUB_ENV}
|
||||
PRESET=${PRESET}-${{ matrix.os == 'macos-14' && 'arm64' || 'x64' }}
|
||||
elif [ "${RUNNER_OS}" == "Windows" ]; then
|
||||
echo "CMAKE_BUILD_PARALLEL_LEVEL=$(pwsh -Command '(Get-CimInstance -ClassName Win32_ComputerSystem).NumberOfLogicalProcessors')" >> ${GITHUB_ENV}
|
||||
echo "CTEST_PARALLEL_LEVEL=$(pwsh -Command '(Get-CimInstance -ClassName Win32_ComputerSystem).NumberOfLogicalProcessors')" >> ${GITHUB_ENV}
|
||||
fi
|
||||
echo "PRESET=${PRESET}" >> ${GITHUB_ENV}
|
||||
|
||||
- name: Configure CMake
|
||||
shell: bash
|
||||
run: |
|
||||
cmake \
|
||||
-DBUILD_SHARED_LIBS:BOOL=ON \
|
||||
-DCMAKE_CXX_STANDARD:STRING=${{ matrix.cxx-standard }} \
|
||||
-DUSE_MEMORY_MAPPED_FILE:BOOL=ON \
|
||||
-LA \
|
||||
--preset ${PRESET}
|
||||
|
||||
- name: Build
|
||||
shell: bash
|
||||
run: |
|
||||
cmake \
|
||||
--build \
|
||||
--preset ${PRESET}
|
||||
|
||||
- name: Run Tests
|
||||
uses: ./.github/actions/run_tests
|
||||
with:
|
||||
cmake-preset: ${{ env.PRESET }}
|
55
.github/workflows/release_linux.yml
vendored
55
.github/workflows/release_linux.yml
vendored
|
@ -1,55 +0,0 @@
|
|||
name: Release Linux
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- "*"
|
||||
pull_request:
|
||||
branches-ignore:
|
||||
- "no-ci-*"
|
||||
env:
|
||||
PRESET: linux-ci-release
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: "ubuntu-22.04"
|
||||
steps:
|
||||
|
||||
- name: checkout mapnik
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
submodules: "recursive"
|
||||
|
||||
- name: "Install required system packages"
|
||||
shell: bash
|
||||
run: |
|
||||
sudo apt update
|
||||
sudo apt install -y ninja-build\
|
||||
libicu-dev \
|
||||
libfreetype6-dev \
|
||||
libharfbuzz-dev \
|
||||
libxml2-dev \
|
||||
libjpeg-dev \
|
||||
libtiff-dev \
|
||||
libwebp-dev \
|
||||
libcairo2-dev \
|
||||
libproj-dev \
|
||||
libgdal-dev \
|
||||
libboost-filesystem-dev \
|
||||
libboost-program-options-dev \
|
||||
libboost-regex-dev
|
||||
|
||||
- name: Configure CMake
|
||||
run: cmake -LA --preset ${{ env.PRESET }}
|
||||
|
||||
- name: Build
|
||||
run: cmake --build --preset ${{ env.PRESET }}
|
||||
|
||||
- name: Package
|
||||
run: cmake --build --preset ${{ env.PRESET }} --target package
|
||||
|
||||
- name: Upload mapnik debian package
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{ env.PRESET }}-deb
|
||||
path: build/mapnik-*.deb
|
31
.gitignore
vendored
31
.gitignore
vendored
|
@ -1,19 +1,11 @@
|
|||
.DS_Store
|
||||
.vscode
|
||||
.cache
|
||||
*.gcov
|
||||
*.gcda
|
||||
*.gcno
|
||||
*~
|
||||
*.o
|
||||
*.pyc
|
||||
*.os
|
||||
*.so
|
||||
*.so.*
|
||||
*.a
|
||||
*.swp
|
||||
*.dylib
|
||||
mapnik-gyp
|
||||
plugins/input/*.input
|
||||
plugins/input/templates/*.input
|
||||
demo/c++/rundemo
|
||||
|
@ -21,9 +13,6 @@ bindings/python/mapnik/paths.py
|
|||
config.cache
|
||||
config.log
|
||||
config.py
|
||||
mapnik-settings.env
|
||||
mason_packages/
|
||||
.mason/
|
||||
.sconf_temp/
|
||||
.sconsign.dblite
|
||||
demo/viewer/viewer.ini
|
||||
|
@ -31,14 +20,21 @@ tests/cpp_tests/font_registration_test
|
|||
tests/python_tests/raster_colorizer_test.png
|
||||
tests/python_tests/raster_colorizer_test_save.xml
|
||||
utils/mapnik-config/mapnik-config
|
||||
utils/mapnik-config/mapnik2.pc
|
||||
utils/shapeindex/shapeindex
|
||||
utils/mapnik-index/mapnik-index
|
||||
utils/ogrindex/ogrindex
|
||||
utils/pgsql2sqlite/pgsql2sqlite
|
||||
utils/svg2png/svg2png
|
||||
utils/mapnik-render/mapnik-render
|
||||
demo/python/demo*
|
||||
demo/python/map.xml
|
||||
tests/cpp_tests/svg_renderer_tests/background_color_test
|
||||
tests/cpp_tests/svg_renderer_tests/combined_test
|
||||
tests/cpp_tests/svg_renderer_tests/compilation_test
|
||||
tests/cpp_tests/svg_renderer_tests/file_output_test
|
||||
tests/cpp_tests/svg_renderer_tests/file_output_test_case.svg
|
||||
tests/cpp_tests/svg_renderer_tests/path_element_test
|
||||
tests/cpp_tests/svg_renderer_tests/path_element_test_case_1.svg
|
||||
tests/cpp_tests/svg_renderer_tests/root_element_test
|
||||
tests/data/sqlite/*index
|
||||
demo/c++/cairo-demo.pdf
|
||||
demo/c++/cairo-demo.png
|
||||
|
@ -55,11 +51,4 @@ demo/viewer/release/
|
|||
demo/viewer/ui_about.h
|
||||
demo/viewer/ui_info.h
|
||||
demo/viewer/ui_layer_info.h
|
||||
test/standalone/*-bin
|
||||
test/unit/run
|
||||
test/visual/run
|
||||
# cmake
|
||||
build
|
||||
.vs
|
||||
|
||||
CMakeUserPresets.json
|
||||
tests/cpp_tests/*-bin
|
||||
|
|
23
.gitmodules
vendored
23
.gitmodules
vendored
|
@ -1,23 +0,0 @@
|
|||
[submodule "test/data"]
|
||||
path = test/data
|
||||
url = https://github.com/mapnik/test-data.git
|
||||
branch = master
|
||||
[submodule "test/data-visual"]
|
||||
path = test/data-visual
|
||||
url = https://github.com/mapnik/test-data-visual.git
|
||||
branch = master
|
||||
[submodule "deps/mapbox/variant"]
|
||||
path = deps/mapbox/variant
|
||||
url = https://github.com/mapbox/variant.git
|
||||
branch = master
|
||||
[submodule "deps/mapbox/geometry"]
|
||||
path = deps/mapbox/geometry
|
||||
url = https://github.com/mapbox/geometry.hpp.git
|
||||
branch = master
|
||||
[submodule "deps/mapbox/protozero"]
|
||||
path = deps/mapbox/protozero
|
||||
url = https://github.com/mapbox/protozero.git
|
||||
branch = master
|
||||
[submodule "deps/mapbox/polylabel"]
|
||||
path = deps/mapbox/polylabel
|
||||
url = https://github.com/mapbox/polylabel.git
|
|
@ -1,16 +0,0 @@
|
|||
# See https://pre-commit.com for more information
|
||||
# See https://pre-commit.com/hooks.html for more hooks
|
||||
repos:
|
||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||
rev: v4.6.0
|
||||
hooks:
|
||||
- id: trailing-whitespace
|
||||
files: ^.*\.cmake|CMakeLists\.txt$
|
||||
- id: end-of-file-fixer
|
||||
files: ^.*\.cmake|CMakeLists\.txt$
|
||||
|
||||
- repo: https://github.com/pre-commit/mirrors-clang-format
|
||||
rev: v18.1.3
|
||||
hooks:
|
||||
- id: clang-format
|
||||
types_or: [c++, c]
|
21
.travis.yml
Normal file
21
.travis.yml
Normal file
|
@ -0,0 +1,21 @@
|
|||
language: cpp
|
||||
|
||||
compiler: clang
|
||||
|
||||
before_install:
|
||||
- echo 'yes' | sudo add-apt-repository ppa:mapnik/boost
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install -qq libboost-dev libboost-filesystem-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-system-dev libboost-thread-dev python-nose libicu-dev libpng-dev libjpeg-dev libtiff-dev libz-dev libfreetype6-dev libxml2-dev libproj-dev
|
||||
|
||||
script:
|
||||
- ./configure DEMO=False BINDINGS='python' CPP_TESTS=False CAIRO=False INPUT_PLUGINS='' OPTIMIZATION=1 JOBS=2 FAST=True && make
|
||||
|
||||
branches:
|
||||
only:
|
||||
- master
|
||||
|
||||
notifications:
|
||||
irc:
|
||||
channels:
|
||||
- "irc.freenode.org#mapnik"
|
||||
use_notice: true
|
23
AUTHORS.md
23
AUTHORS.md
|
@ -6,55 +6,39 @@ Mapnik is written by Artem Pavlenko with contributions from:
|
|||
* AJ Ashton
|
||||
* Matt Amos
|
||||
* Lucio Asnaghi
|
||||
* Alexandre Bonnasseau
|
||||
* Justin Bronn
|
||||
* Joel Brown
|
||||
* Christopher Brown
|
||||
* Jon Burgess
|
||||
* Stephan Bösch-Plepelits
|
||||
* Manel Clos
|
||||
* Toby Collet
|
||||
* Robert Coup
|
||||
* Berteun Damman
|
||||
* Petr Dlouhy
|
||||
* Jiri Drbalek
|
||||
* Craig de Stigter
|
||||
* Jean-Francois Doyon
|
||||
* David Eastcott
|
||||
* Seth Fitzsimmons
|
||||
* Sean Gillies
|
||||
* Krzysztof Godlewski
|
||||
* Beau Gunderson
|
||||
* John Hague
|
||||
* Dominic Hargreaves
|
||||
* Axel Haustant
|
||||
* Aubrey Holland
|
||||
* Jordan Hollinger
|
||||
* Tom Hughes
|
||||
* Konstantin Käfer
|
||||
* Mak Kolybabi
|
||||
* Peter Körner
|
||||
* Hermann Kraus
|
||||
* Stella Laurenzo
|
||||
* XinGang Li
|
||||
* lightmare
|
||||
* David Leaver
|
||||
* Carlos López
|
||||
* Dennis Luxen
|
||||
* Tom MacWright
|
||||
* Sara Metz
|
||||
* Michal Migurski
|
||||
* Andrii Mishkovskyi
|
||||
* Ben Moores
|
||||
* Mike Morris
|
||||
* Dražen Odobašić
|
||||
* Cameron Patrick
|
||||
* Clint Pells
|
||||
* Igor Podolskiy
|
||||
* Reid Priedhorsky
|
||||
* Brian Quinion
|
||||
* Even Rouault
|
||||
* Marcin Rudowski
|
||||
* Sandro Santilli
|
||||
* Christopher Schmidt
|
||||
* Andreas Schneider
|
||||
* Vincent Schut
|
||||
|
@ -65,13 +49,9 @@ Mapnik is written by Artem Pavlenko with contributions from:
|
|||
* Vince Spader
|
||||
* Philipp Spitzer
|
||||
* Dane Springmeyer
|
||||
* Craig de Stigter
|
||||
* Dave Stubbs
|
||||
* River Tarnell
|
||||
* Cezary Tarnowski
|
||||
* Blake Thompson
|
||||
* Oliver Tonnhofer
|
||||
* Jochen Topf
|
||||
* Alberto Valverde
|
||||
* Martijn van Oosterhout
|
||||
* Andreas Volz
|
||||
|
@ -80,4 +60,3 @@ Mapnik is written by Artem Pavlenko with contributions from:
|
|||
* Rich Wareham
|
||||
* Nick Whitelegg
|
||||
* Leslie Wu
|
||||
* Roman Galacz
|
||||
|
|
1141
CHANGELOG.md
1141
CHANGELOG.md
File diff suppressed because it is too large
Load diff
34
CITATION.cff
34
CITATION.cff
|
@ -1,34 +0,0 @@
|
|||
# This CITATION.cff file was generated with cffinit.
|
||||
# Visit https://bit.ly/cffinit to generate yours today!
|
||||
|
||||
cff-version: 1.2.0
|
||||
title: mapnik
|
||||
message: >-
|
||||
If you use this software, please cite it using the
|
||||
metadata from this file.
|
||||
type: software
|
||||
authors:
|
||||
- given-names: Artem
|
||||
family-names: Pavlenko
|
||||
identifiers:
|
||||
- type: url
|
||||
value: 'https://github.com/mapnik/mapnik'
|
||||
description: GitHub Repository
|
||||
- type: swh
|
||||
value: >-
|
||||
swh:1:dir:3f5758e17e9d54016ca694268da68cf6856fab58
|
||||
description: Software Archive
|
||||
repository-code: 'https://github.com/mapnik/mapnik'
|
||||
url: 'https://mapnik.org/'
|
||||
abstract: >-
|
||||
Mapnik is an open source toolkit for developing
|
||||
mapping applications. At the core is a C++ shared
|
||||
library providing algorithms and patterns for
|
||||
spatial data access and visualization.
|
||||
keywords:
|
||||
- mapping
|
||||
- gis
|
||||
- cartography
|
||||
- beautiful-maps
|
||||
- rendering
|
||||
license: LGPL-2.1
|
472
CMakeLists.txt
472
CMakeLists.txt
|
@ -1,472 +0,0 @@
|
|||
cmake_minimum_required(VERSION 3.15)
|
||||
# 3.15 is required since the Boost::XXXX targets was first added. https://cmake.org/cmake/help/latest/module/FindBoost.html#imported-targets
|
||||
# 3.14 is required since SQLite3 Module was first added. https://cmake.org/cmake/help/latest/module/FindSQLite3.html#findsqlite3
|
||||
|
||||
include(cmake/GetVersion.cmake)
|
||||
get_mapnik_version()
|
||||
|
||||
project(mapnik
|
||||
VERSION ${MAPNIK_MAJOR_VERSION}.${MAPNIK_MINOR_VERSION}.${MAPNIK_PATCH_VERSION}
|
||||
HOMEPAGE_URL "https://mapnik.org/"
|
||||
DESCRIPTION "Mapnik is an open source toolkit for developing mapping applications"
|
||||
LANGUAGES CXX
|
||||
)
|
||||
message(STATUS "mapnik version: ${PROJECT_VERSION}")
|
||||
|
||||
# https://cliutils.gitlab.io/modern-cmake/chapters/features/ides.html
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
set(CMAKE_FIND_PACKAGE_TARGETS_GLOBAL ON) # with newer cmake versions put all find_package in global scope
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
|
||||
include(FeatureSummary)
|
||||
include(MapnikOption)
|
||||
include(MapnikMinimumVersions)
|
||||
include(MapnikFindPackage)
|
||||
include(MapnikInstall)
|
||||
|
||||
include(CTest)
|
||||
add_feature_info(BUILD_TESTING BUILD_TESTING "Adds tests")
|
||||
|
||||
mapnik_option(INSTALL_DEPENDENCIES "if ON, all dependencies (eg. required dlls) will be copied into CMAKE_INSTALL_PREFIX/MAPNIK_BIN_DIR." ON)
|
||||
mapnik_option(BUILD_SHARED_LIBS "build mapnik dynamic(ON) or static(OFF)" ON)
|
||||
mapnik_option(BUILD_SHARED_PLUGINS "build dynamic plugins" ${BUILD_SHARED_LIBS}) # use BUILD_SHARED_LIBS as default option
|
||||
mapnik_option(BUILD_SHARED_CRT "(only windows with msvc) use msvc shared crt" ON)
|
||||
if(WIN32 AND BUILD_SHARED_PLUGINS AND NOT BUILD_SHARED_LIBS)
|
||||
message(FATAL_ERROR "static libmapnik and dynamic plugins won't work correctly")
|
||||
endif()
|
||||
|
||||
mapnik_option(USE_EXTERNAL_MAPBOX_GEOMETRY "Use a external mapnik/geometry.hpp. If off, use the submodule" OFF)
|
||||
mapnik_option(USE_EXTERNAL_MAPBOX_POLYLABEL "Use a external mapnik/polylabel. If off, use the submodule" OFF)
|
||||
mapnik_option(USE_EXTERNAL_MAPBOX_PROTOZERO "Use a external mapnik/protozero. If off, use the submodule" OFF)
|
||||
mapnik_option(USE_EXTERNAL_MAPBOX_VARIANT "Use a external mapnik/variant. If off, use the submodule" OFF)
|
||||
mapnik_option(USE_JPEG "adds jpeg support" ON)
|
||||
mapnik_option(USE_PNG "adds png support" ON)
|
||||
mapnik_option(USE_TIFF "adds tiff support" ON)
|
||||
mapnik_option(USE_WEBP "adds webp support" ON)
|
||||
mapnik_option(USE_LIBXML2 "adds libxml2 support" ON)
|
||||
mapnik_option(USE_CAIRO "adds the cairo renderer" ON)
|
||||
mapnik_option(USE_PROJ "adds proj support" ON)
|
||||
mapnik_option(USE_GRID_RENDERER "adds grid renderer" ON)
|
||||
mapnik_option(USE_SVG_RENDERER "adds svg renderer" ON)
|
||||
mapnik_option(USE_BIGINT "uses 64 bit instead of 32" ON)
|
||||
mapnik_option(USE_BOOST_FILESYSTEM "use boost::filesytem even if `std::filesystem` is available (since c++17)" OFF)
|
||||
mapnik_option(USE_MEMORY_MAPPED_FILE "uses file cache" ON)
|
||||
mapnik_option(USE_MULTITHREADED "enables the multithreaded features (threadsafe)" ON)
|
||||
mapnik_option(USE_NO_ATEXIT "disable atexit" OFF)
|
||||
mapnik_option(USE_NO_DLCLOSE "disable dlclose" OFF)
|
||||
mapnik_option(USE_DEBUG_OUTPUT "enables some debug messages for development" OFF)
|
||||
mapnik_option(USE_LOG "enables logging output. See log severity level." OFF)
|
||||
# 0 = debug
|
||||
# 1 = warn
|
||||
# 2 = error
|
||||
# 3 = none
|
||||
set(USE_LOG_SEVERITY "1" CACHE STRING "sets the logging severity (only applies when USE_LOG is ON")
|
||||
mapnik_option(USE_STATS "Enable statistics reporting" OFF)
|
||||
|
||||
mapnik_option(DISABLE_MAPNIK_AUTOSETUP "disables the autosetup. Need to call mapnik::setup() then" OFF)
|
||||
|
||||
mapnik_option(USE_PLUGIN_INPUT_CSV "adds plugin input csv" ON)
|
||||
mapnik_option(USE_PLUGIN_INPUT_GDAL "adds plugin input gdal" ON)
|
||||
mapnik_option(USE_PLUGIN_INPUT_GEOBUF "adds plugin input geobuf" ON)
|
||||
mapnik_option(USE_PLUGIN_INPUT_GEOJSON "adds plugin input geojson" ON)
|
||||
mapnik_option(USE_PLUGIN_INPUT_OGR "adds plugin input ogr" ON)
|
||||
mapnik_option(USE_PLUGIN_INPUT_PGRASTER "adds plugin input pgraster" ON)
|
||||
mapnik_option(USE_PLUGIN_INPUT_POSTGIS "adds plugin input postgis" ON)
|
||||
mapnik_option(USE_PLUGIN_INPUT_RASTER "adds plugin input raster" ON)
|
||||
mapnik_option(USE_PLUGIN_INPUT_SHAPE "adds plugin input shape" ON)
|
||||
mapnik_option(USE_PLUGIN_INPUT_SQLITE "adds plugin input sqlite" ON)
|
||||
mapnik_option(USE_PLUGIN_INPUT_TOPOJSON "adds plugin input topojson" ON)
|
||||
|
||||
mapnik_option(BUILD_DEMO_VIEWER "builds the demo viewer" ON)
|
||||
mapnik_option(BUILD_DEMO_CPP "builds the demo c++ application" ON)
|
||||
|
||||
mapnik_option(BUILD_BENCHMARK "builds benchmark project" ON)
|
||||
|
||||
mapnik_option(BUILD_UTILITY_GEOMETRY_TO_WKB "builds the utility program geometry_to_wkb" ON)
|
||||
mapnik_option(BUILD_UTILITY_MAPNIK_INDEX "builds the utility program mapnik_index" ON)
|
||||
mapnik_option(BUILD_UTILITY_MAPNIK_RENDER "builds the utility program mapnik_render" ON)
|
||||
mapnik_option(BUILD_UTILITY_OGRINDEX "builds the utility program ogrindex" OFF)
|
||||
mapnik_option(BUILD_UTILITY_PGSQL2SQLITE "builds the utility program pgsql2sqlite" ON)
|
||||
mapnik_option(BUILD_UTILITY_SHAPEINDEX "builds the utility program shapeindex" ON)
|
||||
mapnik_option(BUILD_UTILITY_SVG2PNG "builds the utility program svg2png" ON)
|
||||
|
||||
mapnik_option(USE_BOOST_REGEX_ICU_WORKAROUND "if you don't use your system libraries and get double linked icu libraries set this to ON" OFF)
|
||||
mapnik_option(USE_GLIBC_WORKAROUND "see https://github.com/mapnik/mapnik/pull/3792 if you building with libstdc++-4.9" OFF)
|
||||
|
||||
feature_summary(WHAT ENABLED_FEATURES DISABLED_FEATURES)
|
||||
feature_summary(FILENAME "${CMAKE_CURRENT_BINARY_DIR}/features.log" WHAT ENABLED_FEATURES DISABLED_FEATURES)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
# See for more details: https://cmake.org/cmake/help/latest/manual/cmake-buildsystem.7.html
|
||||
set(MAPNIK_BIN_DIR ${CMAKE_INSTALL_BINDIR} CACHE STRING "Install directory for binaries")
|
||||
set(MAPNIK_LIB_DIR ${CMAKE_INSTALL_LIBDIR} CACHE STRING "Install directory for libraries")
|
||||
set(MAPNIK_ARCHIVE_DIR ${CMAKE_INSTALL_LIBDIR} CACHE STRING "Install directory for archives")
|
||||
set(MAPNIK_INCLUDE_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE STRING "Install directory for the headers")
|
||||
set(MAPNIK_CMAKE_DIR ${MAPNIK_LIB_DIR}/cmake/mapnik CACHE STRING "Install directory of the cmake targets")
|
||||
set(MAPNIK_PKGCONF_DIR ${MAPNIK_LIB_DIR}/pkgconfig CACHE STRING "Install directory for the .pc files for pkg-config")
|
||||
set(MAPNIK_OUTPUT_DIR "${CMAKE_BINARY_DIR}/out")
|
||||
if(WIN32)
|
||||
set(DEFAULT_PLUGINS_INSTALL_DIR ${MAPNIK_BIN_DIR}/mapnik/input)
|
||||
else()
|
||||
set(DEFAULT_PLUGINS_INSTALL_DIR ${MAPNIK_LIB_DIR}/mapnik/input)
|
||||
endif()
|
||||
set(PLUGINS_INSTALL_DIR ${DEFAULT_PLUGINS_INSTALL_DIR} CACHE STRING "installs the plugins in the specified directory")
|
||||
message(STATUS "Installing plugins to ${PLUGINS_INSTALL_DIR}")
|
||||
|
||||
set(FONTS_INSTALL_DIR ${MAPNIK_LIB_DIR}/mapnik/fonts CACHE STRING "installs the fonts in the specified directory")
|
||||
message(STATUS "Installing fonts to ${FONTS_INSTALL_DIR}")
|
||||
|
||||
set(MAPNIK_COMPILE_DEFS "")
|
||||
set(MAPNIK_OPTIONAL_LIBS "")
|
||||
set(MAPNIK_OPTIONAL_LIBS_INCLUDE "")
|
||||
|
||||
#############################
|
||||
#############################
|
||||
# Begin project configuration
|
||||
#############################
|
||||
#############################
|
||||
|
||||
set(CMAKE_CXX_STANDARD 17 CACHE STRING "Sets the c++ standard. c++17 is minimum.")
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON) # require the specified CMAKE_CXX_STANDARD
|
||||
set(CMAKE_CXX_EXTENSIONS OFF CACHE STRING "Enables the compiler specific extensions.") # Fallsback to -std=c++<ver> if off
|
||||
message(STATUS "Using c++${CMAKE_CXX_STANDARD}")
|
||||
message(STATUS "Using c++ extensions: ${CXX_EXTENSIONS}")
|
||||
|
||||
# add debug postfix to the libraries
|
||||
set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "sets the debug library postfix on mapnik, wkt and json")
|
||||
message(STATUS "postfix for debug libraries: ${CMAKE_DEBUG_POSTFIX}")
|
||||
|
||||
set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>$<$<BOOL:${BUILD_SHARED_CRT}>:DLL>")
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${MAPNIK_OUTPUT_DIR}")
|
||||
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${MAPNIK_OUTPUT_DIR}")
|
||||
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${MAPNIK_OUTPUT_DIR}/lib")
|
||||
|
||||
# needs to be before the first call of find_boost.
|
||||
if(CMAKE_CXX_STANDARD VERSION_LESS 17)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS BOOST_SPIRIT_X3_HIDE_CXX17_WARNING)
|
||||
endif()
|
||||
|
||||
if(USE_MULTITHREADED)
|
||||
set(Boost_USE_MULTITHREADED ON)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_THREADSAFE)
|
||||
else()
|
||||
set(Boost_USE_MULTITHREADED OFF)
|
||||
endif()
|
||||
|
||||
|
||||
mapnik_find_package(PkgConfig REQUIRED)
|
||||
mapnik_find_threads()
|
||||
mapnik_find_package(ICU REQUIRED COMPONENTS uc i18n data)
|
||||
|
||||
mapnik_find_package(Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS regex)
|
||||
if(CMAKE_CXX_STANDARD VERSION_LESS 17)
|
||||
set(USE_BOOST_FILESYSTEM ON CACHE BOOL "Use boost::filesystem" FORCE)
|
||||
endif()
|
||||
if(USE_BOOST_FILESYSTEM)
|
||||
mapnik_find_package(Boost ${BOOST_MIN_VERSION} REQUIRED COMPONENTS filesystem system)
|
||||
endif()
|
||||
|
||||
list(APPEND MAPNIK_COMPILE_DEFS BOOST_REGEX_HAS_ICU)
|
||||
if(USE_BOOST_REGEX_ICU_WORKAROUND)
|
||||
message(STATUS "using boost regex workaround")
|
||||
set_property(TARGET Boost::regex PROPERTY INTERFACE_LINK_LIBRARIES)
|
||||
endif()
|
||||
include(CheckBoostRegexIcu)
|
||||
check_boost_regex()
|
||||
if(BOOST_REGEX_HAS_ICU)
|
||||
message(STATUS "boost regex has icu support")
|
||||
list(APPEND MAPNIK_COMPILE_DEFS BOOST_REGEX_HAS_ICU)
|
||||
endif()
|
||||
|
||||
mapnik_find_package(Freetype REQUIRED)
|
||||
|
||||
# try to find harfbuzz with the native configuration and fallback to our "own" FindHarfBuzz
|
||||
mapnik_find_package(harfbuzz CONFIG QUIET)
|
||||
if(harfbuzz_FOUND)
|
||||
message(STATUS "Found harfbuzz native cmake")
|
||||
list(APPEND MAPNIK_OPTIONAL_LIBS harfbuzz::harfbuzz)
|
||||
else()
|
||||
# Use pkg-config when harfbuzz is not found.
|
||||
# It might be possible that in future version harfbuzz could only be found via pkg-config.
|
||||
# harfbuzz related discussion: https://github.com/harfbuzz/harfbuzz/issues/2653
|
||||
message(STATUS "harfbuzz not found via cmake. Searching via pkg-config...")
|
||||
mapnik_pkg_check_modules(harfbuzz REQUIRED IMPORTED_TARGET harfbuzz>=${HARFBUZZ_MIN_VERSION})
|
||||
list(APPEND MAPNIK_OPTIONAL_LIBS PkgConfig::harfbuzz)
|
||||
endif()
|
||||
|
||||
if(USE_EXTERNAL_MAPBOX_GEOMETRY)
|
||||
# this is used to provide a way to specify include dirs with CACHE VARIABLES
|
||||
if(NOT MAPBOX_GEOMETRY_INCLUDE_DIRS)
|
||||
message(STATUS "Searching for the include dir of mapbox/geometry.hpp")
|
||||
find_path(MAPBOX_GEOMETRY_INCLUDE_DIRS "mapbox/geometry.hpp" REQUIRED)
|
||||
endif()
|
||||
else()
|
||||
set(MAPBOX_GEOMETRY_INCLUDE_DIRS
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/geometry/include>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
endif()
|
||||
if(NOT MAPBOX_GEOMETRY_INCLUDE_DIRS)
|
||||
message(FATAL_ERROR "Set -DMAPBOX_GEOMETRY_INCLUDE_DIRS to the mapbox/geometry.hpp include dir")
|
||||
endif()
|
||||
|
||||
if(USE_EXTERNAL_MAPBOX_POLYLABEL)
|
||||
if(NOT MAPBOX_POLYLABEL_INCLUDE_DIRS)
|
||||
message(STATUS "Searching for the include dir of mapbox/polylabel")
|
||||
find_path(MAPBOX_POLYLABEL_INCLUDE_DIRS "mapbox/polylabel.hpp")
|
||||
endif()
|
||||
else()
|
||||
set(MAPBOX_POLYLABEL_INCLUDE_DIRS
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/polylabel/include>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
endif()
|
||||
if(NOT MAPBOX_POLYLABEL_INCLUDE_DIRS)
|
||||
message(FATAL_ERROR "Set MAPBOX_POLYLABEL_INCLUDE_DIRS to the mapbox/geometry include dir")
|
||||
endif()
|
||||
|
||||
if(USE_EXTERNAL_MAPBOX_PROTOZERO)
|
||||
if(NOT MAPBOX_PROTOZERO_INCLUDE_DIRS)
|
||||
message(STATUS "Searching for the include dir of mapbox/protozero")
|
||||
find_path(MAPBOX_PROTOZERO_INCLUDE_DIRS "protozero/pbf_message.hpp")
|
||||
endif()
|
||||
else()
|
||||
set(MAPBOX_PROTOZERO_INCLUDE_DIRS
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/protozero/include>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
endif()
|
||||
if(NOT MAPBOX_PROTOZERO_INCLUDE_DIRS)
|
||||
message(FATAL_ERROR "Set MAPBOX_PROTOZERO_INCLUDE_DIRS to the mapbox/protozero include dir")
|
||||
endif()
|
||||
|
||||
if(USE_EXTERNAL_MAPBOX_VARIANT)
|
||||
if(NOT MAPBOX_VARIANT_INCLUDE_DIRS)
|
||||
message(STATUS "Searching for the include dir of mapbox/variant")
|
||||
find_path(MAPBOX_VARIANT_INCLUDE_DIRS "mapbox/variant.hpp")
|
||||
endif()
|
||||
else()
|
||||
set(MAPBOX_VARIANT_INCLUDE_DIRS
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/variant/include>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
)
|
||||
endif()
|
||||
if(NOT MAPBOX_VARIANT_INCLUDE_DIRS)
|
||||
message(FATAL_ERROR "Set MAPBOX_VARIANT_INCLUDE_DIRS to the mapbox/variant include dir")
|
||||
endif()
|
||||
|
||||
# (used by MapnikInstall.cmake. properties are needed since "set(...)" will be out of scope
|
||||
set_property(GLOBAL PROPERTY TARGETS "")
|
||||
set_property(GLOBAL PROPERTY PLUGINS "")
|
||||
set_property(GLOBAL PROPERTY MAPNIK_UTILITIES "")
|
||||
|
||||
if(USE_GLIBC_WORKAROUND)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_ENABLE_GLIBC_WORKAROUND)
|
||||
endif()
|
||||
|
||||
if(USE_BIGINT)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS BIGINT)
|
||||
endif()
|
||||
|
||||
if(USE_BOOST_FILESYSTEM)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS USE_BOOST_FILESYSTEM)
|
||||
list(APPEND MAPNIK_OPTIONAL_LIBS Boost::filesystem)
|
||||
endif()
|
||||
|
||||
if(USE_MEMORY_MAPPED_FILE)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_MEMORY_MAPPED_FILE)
|
||||
endif()
|
||||
|
||||
if(USE_NO_ATEXIT)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_NO_ATEXIT)
|
||||
endif()
|
||||
|
||||
if(USE_NO_DLCLOSE)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_NO_DLCLOSE)
|
||||
endif()
|
||||
|
||||
if(USE_DEBUG_OUTPUT)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_DEBUG)
|
||||
endif()
|
||||
|
||||
if(USE_LOG)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_LOG MAPNIK_DEFAULT_LOG_SEVERITY=${USE_LOG_SEVERITY})
|
||||
endif()
|
||||
|
||||
if(USE_STATS)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_STATS)
|
||||
endif()
|
||||
|
||||
if(USE_LIBXML2)
|
||||
mapnik_find_package(LibXml2 REQUIRED)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS HAVE_LIBXML2)
|
||||
list(APPEND MAPNIK_OPTIONAL_LIBS LibXml2::LibXml2)
|
||||
endif()
|
||||
|
||||
if(USE_PNG)
|
||||
mapnik_find_package(PNG REQUIRED)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS HAVE_PNG)
|
||||
list(APPEND MAPNIK_OPTIONAL_LIBS PNG::PNG)
|
||||
endif()
|
||||
|
||||
if(USE_JPEG)
|
||||
mapnik_find_package(JPEG REQUIRED)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS HAVE_JPEG)
|
||||
list(APPEND MAPNIK_OPTIONAL_LIBS JPEG::JPEG)
|
||||
endif()
|
||||
|
||||
if(USE_TIFF)
|
||||
mapnik_find_package(TIFF REQUIRED)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS HAVE_TIFF)
|
||||
list(APPEND MAPNIK_OPTIONAL_LIBS TIFF::TIFF)
|
||||
endif()
|
||||
|
||||
if(USE_WEBP)
|
||||
mapnik_pkg_check_modules(WebP REQUIRED IMPORTED_TARGET libwebp)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS HAVE_WEBP)
|
||||
list(APPEND MAPNIK_OPTIONAL_LIBS PkgConfig::WebP)
|
||||
endif()
|
||||
|
||||
if(USE_CAIRO)
|
||||
mapnik_pkg_check_modules(Cairo REQUIRED IMPORTED_TARGET cairo)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS HAVE_CAIRO)
|
||||
list(APPEND MAPNIK_OPTIONAL_LIBS PkgConfig::Cairo)
|
||||
endif()
|
||||
|
||||
if(USE_PROJ)
|
||||
#https://proj.org/development/cmake.html
|
||||
mapnik_find_package(PROJ QUIET)
|
||||
# currently the cmake files are not installed, when installing proj via apt-get. So search via pkg-config
|
||||
if(NOT PROJ_FOUND)
|
||||
message(STATUS "PROJ not found via FindPROJ. Searching via pkg-config...")
|
||||
mapnik_pkg_check_modules(PROJ REQUIRED IMPORTED_TARGET proj>=${PROJ_MIN_VERSION})
|
||||
string(REGEX MATCH "([0-9]+)\.([0-9]+)\.([0-9]+)" _dummy "${PROJ_VERSION}")
|
||||
set(PROJ_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
||||
set(PROJ_VERSION_MINOR "${CMAKE_MATCH_2}")
|
||||
set(PROJ_VERSION_PATCH "${CMAKE_MATCH_3}")
|
||||
list(APPEND MAPNIK_OPTIONAL_LIBS PkgConfig::PROJ)
|
||||
else()
|
||||
if(PROJ_VERSION VERSION_LESS PROJ_MIN_VERSION)
|
||||
message(FATAL_ERROR "Proj needs to be at least version ${PROJ_MIN_VERSION}")
|
||||
endif()
|
||||
list(APPEND MAPNIK_OPTIONAL_LIBS ${PROJ_LIBRARIES})
|
||||
list(APPEND MAPNIK_OPTIONAL_LIBS_INCLUDE $<BUILD_INTERFACE:${PROJ_INCLUDE_DIRS}>)
|
||||
endif()
|
||||
math(EXPR MAPNIK_PROJ_VERSION "${PROJ_VERSION_MAJOR}*10000 + ${PROJ_VERSION_MINOR}*100 + ${PROJ_VERSION_PATCH}" OUTPUT_FORMAT DECIMAL)
|
||||
message(STATUS "Using mapnik PROJ version: ${MAPNIK_PROJ_VERSION}")
|
||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_USE_PROJ MAPNIK_PROJ_VERSION=${MAPNIK_PROJ_VERSION})
|
||||
endif()
|
||||
|
||||
if(USE_GRID_RENDERER)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS GRID_RENDERER)
|
||||
endif()
|
||||
|
||||
if(USE_SVG_RENDERER)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS SVG_RENDERER)
|
||||
endif()
|
||||
|
||||
if(NOT WIN32)
|
||||
message(STATUS "Compiling with -DMAPNIK_HAS_DLCFN")
|
||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_HAS_DLCFN)
|
||||
list(APPEND MAPNIK_OPTIONAL_LIBS ${CMAKE_DL_LIBS})
|
||||
endif()
|
||||
|
||||
if(NOT BUILD_SHARED_PLUGINS)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_STATIC_PLUGINS)
|
||||
endif()
|
||||
# when building static, this have to be public so that all depending libs know about
|
||||
if(NOT BUILD_SHARED_LIBS)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_STATIC_DEFINE)
|
||||
endif()
|
||||
|
||||
if(DISABLE_MAPNIK_AUTOSETUP)
|
||||
list(APPEND MAPNIK_COMPILE_DEFS MAPNIK_DISABLE_AUTOSETUP)
|
||||
endif()
|
||||
|
||||
# force utf-8 source code processing
|
||||
# see https://docs.microsoft.com/de-de/cpp/build/reference/utf-8-set-source-and-executable-character-sets-to-utf-8?view=msvc-170
|
||||
add_compile_options(
|
||||
"$<$<CXX_COMPILER_ID:MSVC>:/utf-8>"
|
||||
"$<$<CXX_COMPILER_ID:MSVC>:/EHsc>"
|
||||
)
|
||||
|
||||
add_library(core INTERFACE)
|
||||
add_library(mapnik::core ALIAS core)
|
||||
|
||||
target_include_directories(core INTERFACE
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
|
||||
$<BUILD_INTERFACE:${MAPBOX_GEOMETRY_INCLUDE_DIRS}>
|
||||
$<BUILD_INTERFACE:${MAPBOX_POLYLABEL_INCLUDE_DIRS}>
|
||||
$<BUILD_INTERFACE:${MAPBOX_VARIANT_INCLUDE_DIRS}>
|
||||
$<BUILD_INTERFACE:${MAPBOX_PROTOZERO_INCLUDE_DIRS}>
|
||||
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/deps>
|
||||
$<INSTALL_INTERFACE:include>
|
||||
${MAPNIK_OPTIONAL_LIBS_INCLUDE}
|
||||
)
|
||||
target_link_libraries(core INTERFACE
|
||||
Threads::Threads
|
||||
ICU::uc
|
||||
ICU::data
|
||||
ICU::i18n
|
||||
Boost::headers
|
||||
Boost::regex
|
||||
Freetype::Freetype
|
||||
${MAPNIK_OPTIONAL_LIBS}
|
||||
)
|
||||
|
||||
target_compile_definitions(core INTERFACE ${MAPNIK_COMPILE_DEFS})
|
||||
|
||||
mapnik_install(core)
|
||||
|
||||
###
|
||||
# forward declaring libraries to consume them when building static plugins (circle deps between mapnik <-> plugin_target)
|
||||
add_library(mapnik "")
|
||||
add_library(mapnik::mapnik ALIAS mapnik)
|
||||
add_library(wkt STATIC "")
|
||||
add_library(mapnik::wkt ALIAS wkt)
|
||||
add_library(json STATIC "")
|
||||
add_library(mapnik::json ALIAS json)
|
||||
# end forward declaration
|
||||
###
|
||||
|
||||
add_subdirectory(deps)
|
||||
add_subdirectory(plugins)
|
||||
add_subdirectory(src)
|
||||
add_subdirectory(utils)
|
||||
add_subdirectory(demo)
|
||||
if(BUILD_BENCHMARK)
|
||||
add_subdirectory(benchmark)
|
||||
endif()
|
||||
if(BUILD_TESTING)
|
||||
add_subdirectory(test)
|
||||
endif()
|
||||
file(COPY fonts DESTINATION "${MAPNIK_OUTPUT_DIR}")
|
||||
|
||||
feature_summary(FILENAME "${CMAKE_CURRENT_BINARY_DIR}/packages.log" WHAT PACKAGES_FOUND PACKAGES_NOT_FOUND INCLUDE_QUIET_PACKAGES)
|
||||
|
||||
# start package mapnik
|
||||
include(MapnikExport)
|
||||
include(MapnikExportPkgConfig)
|
||||
|
||||
install(DIRECTORY include/mapnik/ DESTINATION "${MAPNIK_INCLUDE_DIR}/mapnik")
|
||||
install(DIRECTORY deps/agg/include/ DESTINATION "${MAPNIK_INCLUDE_DIR}/mapnik/agg")
|
||||
install(DIRECTORY deps/mapnik DESTINATION "${MAPNIK_INCLUDE_DIR}")
|
||||
file(GLOB TTF_FONT_FILES "fonts/*/*/*.ttf")
|
||||
install(FILES ${TTF_FONT_FILES} DESTINATION "${FONTS_INSTALL_DIR}")
|
||||
|
||||
if(NOT USE_EXTERNAL_MAPBOX_GEOMETRY)
|
||||
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/geometry/include/" DESTINATION "${MAPNIK_INCLUDE_DIR}")
|
||||
endif()
|
||||
if(NOT USE_EXTERNAL_MAPBOX_POLYLABEL)
|
||||
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/polylabel/include/" DESTINATION "${MAPNIK_INCLUDE_DIR}")
|
||||
endif()
|
||||
if(NOT USE_EXTERNAL_MAPBOX_PROTOZERO)
|
||||
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/protozero/include/" DESTINATION "${MAPNIK_INCLUDE_DIR}")
|
||||
endif()
|
||||
if(NOT USE_EXTERNAL_MAPBOX_VARIANT)
|
||||
install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/deps/mapbox/variant/include/" DESTINATION "${MAPNIK_INCLUDE_DIR}")
|
||||
endif()
|
||||
|
||||
mapnik_install_targets()
|
||||
|
||||
include(pack)
|
|
@ -1,350 +0,0 @@
|
|||
{
|
||||
"version": 6,
|
||||
"cmakeMinimumRequired": {
|
||||
"major": 3,
|
||||
"minor": 25,
|
||||
"patch": 0
|
||||
},
|
||||
"configurePresets": [
|
||||
{
|
||||
"name": "use-ninja",
|
||||
"hidden": true,
|
||||
"generator": "Ninja",
|
||||
"cacheVariables": {
|
||||
"CMAKE_EXPORT_COMPILE_COMMANDS": "ON"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "default-build-dir",
|
||||
"hidden": true,
|
||||
"binaryDir": "${sourceDir}/build"
|
||||
},
|
||||
{
|
||||
"name": "debug-build",
|
||||
"hidden": true,
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Debug",
|
||||
"USE_DEBUG_OUTPUT": "ON",
|
||||
"USE_LOG": "ON",
|
||||
"USE_LOG_SEVERITY": "0"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "release-with-debug-build",
|
||||
"hidden": true,
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "RelWithDebInfo",
|
||||
"USE_DEBUG_OUTPUT": "OFF",
|
||||
"USE_LOG": "OFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "release-build",
|
||||
"hidden": true,
|
||||
"cacheVariables": {
|
||||
"CMAKE_BUILD_TYPE": "Release",
|
||||
"USE_DEBUG_OUTPUT": "OFF",
|
||||
"USE_LOG": "OFF"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "use-clang",
|
||||
"hidden": true,
|
||||
"inherits": [
|
||||
"default-build-dir",
|
||||
"use-ninja"
|
||||
],
|
||||
"cacheVariables": {
|
||||
"CMAKE_C_COMPILER": "clang",
|
||||
"CMAKE_CXX_COMPILER": "clang++",
|
||||
"CMAKE_CXX_FLAGS": "-stdlib=libc++",
|
||||
"CMAKE_EXE_LINKER_FLAGS": "-stdlib=libc++",
|
||||
"CMAKE_SHARED_LINKER_FLAGS": "-stdlib=libc++"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "use-gcc",
|
||||
"hidden": true,
|
||||
"inherits": [
|
||||
"default-build-dir",
|
||||
"use-ninja"
|
||||
],
|
||||
"cacheVariables": {
|
||||
"CMAKE_C_COMPILER": "gcc",
|
||||
"CMAKE_CXX_COMPILER": "g++"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "use-msvc-cl",
|
||||
"hidden": true,
|
||||
"inherits": [
|
||||
"default-build-dir",
|
||||
"use-ninja"
|
||||
],
|
||||
"cacheVariables": {
|
||||
"CMAKE_C_COMPILER": "cl",
|
||||
"CMAKE_CXX_COMPILER": "cl"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "use-msvc-clang-cl",
|
||||
"hidden": true,
|
||||
"inherits": [
|
||||
"default-build-dir",
|
||||
"use-ninja"
|
||||
],
|
||||
"cacheVariables": {
|
||||
"CMAKE_C_COMPILER": "clang-cl",
|
||||
"CMAKE_CXX_COMPILER": "clang-cl"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "linux-clang-debug",
|
||||
"displayName": "Linux clang debug",
|
||||
"inherits": [
|
||||
"use-clang",
|
||||
"debug-build"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "linux-clang-release",
|
||||
"displayName": "Linux clang release",
|
||||
"inherits": [
|
||||
"use-clang",
|
||||
"release-build"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "linux-gcc-debug",
|
||||
"displayName": "Linux gcc debug",
|
||||
"inherits": [
|
||||
"use-gcc",
|
||||
"debug-build"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "linux-gcc-release",
|
||||
"displayName": "Linux gcc release",
|
||||
"inherits": [
|
||||
"use-gcc",
|
||||
"release-build"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "windows-arch-x64",
|
||||
"hidden": true,
|
||||
"architecture": {
|
||||
"value": "x64",
|
||||
"strategy": "external"
|
||||
},
|
||||
"toolset": {
|
||||
"value": "host=x64",
|
||||
"strategy": "external"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "windows-default",
|
||||
"displayName": "Windows x64 Debug",
|
||||
"hidden": true,
|
||||
"inherits": [
|
||||
"use-msvc-cl",
|
||||
"windows-arch-x64"
|
||||
],
|
||||
"vendor": {
|
||||
"microsoft.com/VisualStudioSettings/CMake/1.0": {
|
||||
"hostOS": [
|
||||
"Windows"
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "windows-debug",
|
||||
"displayName": "Windows x64 Debug",
|
||||
"inherits": [
|
||||
"windows-default",
|
||||
"debug-build"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "windows-release",
|
||||
"displayName": "Windows x64 Release",
|
||||
"inherits": [
|
||||
"windows-default",
|
||||
"release-build"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "ci-options",
|
||||
"hidden": true,
|
||||
"cacheVariables": {
|
||||
"BUILD_TESTING": "ON",
|
||||
"BUILD_DEMO_VIEWER": "OFF",
|
||||
"DISABLE_MAPNIK_AUTOSETUP": "ON"
|
||||
},
|
||||
"toolchainFile": "vcpkg/scripts/buildsystems/vcpkg.cmake"
|
||||
},
|
||||
{
|
||||
"name": "windows-ci",
|
||||
"description": "used by the ci pipeline",
|
||||
"inherits": [
|
||||
"windows-release",
|
||||
"ci-options"
|
||||
],
|
||||
"cacheVariables": {
|
||||
"INSTALL_DEPENDENCIES": "ON",
|
||||
"ADDITIONAL_LIBARIES_PATHS": "${sourceDir}/build/vcpkg_installed/x64-windows/bin"
|
||||
},
|
||||
"environment": {
|
||||
"PROJ_LIB": "${sourceDir}/build/vcpkg_installed/x64-windows/share/proj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "linux-ci",
|
||||
"description": "used by the ci pipeline",
|
||||
"inherits": [
|
||||
"release-with-debug-build",
|
||||
"use-gcc",
|
||||
"ci-options"
|
||||
],
|
||||
"cacheVariables": {
|
||||
"CMAKE_CXX_FLAGS": "--coverage"
|
||||
},
|
||||
"environment": {
|
||||
"PROJ_LIB": "${sourceDir}/build/vcpkg_installed/x64-linux/share/proj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "linux-ci-release",
|
||||
"description": "used by the ci pipeline for releasing",
|
||||
"inherits": [
|
||||
"release-build",
|
||||
"linux-gcc-release"
|
||||
],
|
||||
"cacheVariables": {
|
||||
"BUILD_TESTING": "OFF",
|
||||
"BUILD_DEMO_VIEWER": "OFF",
|
||||
"USE_MEMORY_MAPPED_FILE": "ON"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "macos-ci-arm64",
|
||||
"description": "used by the ci pipeline",
|
||||
"inherits": [
|
||||
"use-ninja",
|
||||
"release-with-debug-build",
|
||||
"default-build-dir",
|
||||
"ci-options"
|
||||
],
|
||||
"cacheVariables": {
|
||||
"CMAKE_CXX_FLAGS": "-fprofile-arcs -ftest-coverage"
|
||||
},
|
||||
"environment": {
|
||||
"PROJ_LIB": "${sourceDir}/build/vcpkg_installed/arm64-osx/share/proj"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "macos-ci-x64",
|
||||
"description": "used by the ci pipeline",
|
||||
"inherits": [
|
||||
"use-ninja",
|
||||
"release-with-debug-build",
|
||||
"default-build-dir",
|
||||
"ci-options"
|
||||
],
|
||||
"cacheVariables": {
|
||||
"CMAKE_CXX_FLAGS": "-fprofile-arcs -ftest-coverage"
|
||||
},
|
||||
"environment": {
|
||||
"PROJ_LIB": "${sourceDir}/build/vcpkg_installed/x64-osx/share/proj"
|
||||
}
|
||||
}
|
||||
],
|
||||
"buildPresets": [
|
||||
{
|
||||
"name": "windows-debug",
|
||||
"configurePreset": "windows-debug"
|
||||
},
|
||||
{
|
||||
"name": "windows-release",
|
||||
"configurePreset": "windows-release"
|
||||
},
|
||||
{
|
||||
"name": "linux-clang-debug",
|
||||
"configurePreset": "linux-clang-debug"
|
||||
},
|
||||
{
|
||||
"name": "linux-clang-release",
|
||||
"configurePreset": "linux-clang-release"
|
||||
},
|
||||
{
|
||||
"name": "linux-gcc-debug",
|
||||
"configurePreset": "linux-gcc-debug"
|
||||
},
|
||||
{
|
||||
"name": "linux-gcc-release",
|
||||
"configurePreset": "linux-gcc-release"
|
||||
},
|
||||
{
|
||||
"name": "windows-ci",
|
||||
"configurePreset": "windows-ci"
|
||||
},
|
||||
{
|
||||
"name": "linux-ci",
|
||||
"configurePreset": "linux-ci"
|
||||
},
|
||||
{
|
||||
"name": "linux-ci-release",
|
||||
"configurePreset": "linux-ci-release"
|
||||
},
|
||||
{
|
||||
"name": "macos-ci-arm64",
|
||||
"configurePreset": "macos-ci-arm64"
|
||||
},
|
||||
{
|
||||
"name": "macos-ci-x64",
|
||||
"configurePreset": "macos-ci-x64"
|
||||
}
|
||||
],
|
||||
"testPresets": [
|
||||
{
|
||||
"name": "test-default",
|
||||
"hidden": true,
|
||||
"output": {
|
||||
"outputOnFailure": true
|
||||
},
|
||||
"execution": {
|
||||
"noTestsAction": "error",
|
||||
"stopOnFailure": false
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "windows-ci",
|
||||
"configurePreset": "windows-ci",
|
||||
"inherits": [
|
||||
"test-default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "linux-ci",
|
||||
"configurePreset": "linux-ci",
|
||||
"inherits": [
|
||||
"test-default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "macos-ci-arm64",
|
||||
"configurePreset": "macos-ci-arm64",
|
||||
"inherits": [
|
||||
"test-default"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "macos-ci-x64",
|
||||
"configurePreset": "macos-ci-x64",
|
||||
"inherits": [
|
||||
"test-default"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
|
@ -1,22 +0,0 @@
|
|||
# Contributor Code of Conduct
|
||||
|
||||
As contributors and maintainers of this project, and in the interest of fostering an open and welcoming community, we pledge to respect all people who contribute through reporting issues, posting feature requests, updating documentation, submitting pull requests or patches, and other activities.
|
||||
|
||||
We are committed to making participation in this project a harassment-free experience for everyone, regardless of level of experience, gender, gender identity and expression, sexual orientation, disability, personal appearance, body size, race, ethnicity, age, religion, or nationality.
|
||||
|
||||
Examples of unacceptable behavior by participants include:
|
||||
|
||||
* The use of sexualized language or imagery
|
||||
* Personal attacks
|
||||
* Trolling or insulting/derogatory comments
|
||||
* Public or private harassment
|
||||
* Publishing other's private information, such as physical or electronic addresses, without explicit permission
|
||||
* Other unethical or unprofessional conduct.
|
||||
|
||||
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct. By adopting this Code of Conduct, project maintainers commit themselves to fairly and consistently applying these principles to every aspect of managing this project. Project maintainers who do not follow or enforce the Code of Conduct may be permanently removed from the project team.
|
||||
|
||||
This code of conduct applies both within project spaces and in public spaces when an individual is representing the project or its community.
|
||||
|
||||
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by opening an issue or contacting one or more of the project maintainers.
|
||||
|
||||
This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.2.0, available at [http://contributor-covenant.org/version/1/2/0/](http://contributor-covenant.org/version/1/2/0/)
|
22
COPYING
22
COPYING
|
@ -2,7 +2,7 @@
|
|||
Version 2.1, February 1999
|
||||
|
||||
Copyright (C) 1991, 1999 Free Software Foundation, Inc.
|
||||
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
Everyone is permitted to copy and distribute verbatim copies
|
||||
of this license document, but changing it is not allowed.
|
||||
|
||||
|
@ -55,7 +55,7 @@ modified by someone else and passed on, the recipients should know
|
|||
that what they have is not the original version, so that the original
|
||||
author's reputation will not be affected by problems that might be
|
||||
introduced by others.
|
||||
|
||||
|
||||
Finally, software patents pose a constant threat to the existence of
|
||||
any free program. We wish to make sure that a company cannot
|
||||
effectively restrict the users of a free program by obtaining a
|
||||
|
@ -111,7 +111,7 @@ modification follow. Pay close attention to the difference between a
|
|||
"work based on the library" and a "work that uses the library". The
|
||||
former contains code derived from the library, whereas the latter must
|
||||
be combined with the library in order to run.
|
||||
|
||||
|
||||
GNU LESSER GENERAL PUBLIC LICENSE
|
||||
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
||||
|
||||
|
@ -158,7 +158,7 @@ Library.
|
|||
You may charge a fee for the physical act of transferring a copy,
|
||||
and you may at your option offer warranty protection in exchange for a
|
||||
fee.
|
||||
|
||||
|
||||
2. You may modify your copy or copies of the Library or any portion
|
||||
of it, thus forming a work based on the Library, and copy and
|
||||
distribute such modifications or work under the terms of Section 1
|
||||
|
@ -216,7 +216,7 @@ instead of to this License. (If a newer version than version 2 of the
|
|||
ordinary GNU General Public License has appeared, then you can specify
|
||||
that version instead if you wish.) Do not make any other change in
|
||||
these notices.
|
||||
|
||||
|
||||
Once this change is made in a given copy, it is irreversible for
|
||||
that copy, so the ordinary GNU General Public License applies to all
|
||||
subsequent copies and derivative works made from that copy.
|
||||
|
@ -267,7 +267,7 @@ Library will still fall under Section 6.)
|
|||
distribute the object code for the work under the terms of Section 6.
|
||||
Any executables containing that work also fall under Section 6,
|
||||
whether or not they are linked directly with the Library itself.
|
||||
|
||||
|
||||
6. As an exception to the Sections above, you may also combine or
|
||||
link a "work that uses the Library" with the Library to produce a
|
||||
work containing portions of the Library, and distribute that work
|
||||
|
@ -329,7 +329,7 @@ restrictions of other proprietary libraries that do not normally
|
|||
accompany the operating system. Such a contradiction means you cannot
|
||||
use both them and the Library together in an executable that you
|
||||
distribute.
|
||||
|
||||
|
||||
7. You may place library facilities that are a work based on the
|
||||
Library side-by-side in a single library together with other library
|
||||
facilities not covered by this License, and distribute such a combined
|
||||
|
@ -370,7 +370,7 @@ subject to these terms and conditions. You may not impose any further
|
|||
restrictions on the recipients' exercise of the rights granted herein.
|
||||
You are not responsible for enforcing compliance by third parties with
|
||||
this License.
|
||||
|
||||
|
||||
11. If, as a consequence of a court judgment or allegation of patent
|
||||
infringement or for any other reason (not limited to patent issues),
|
||||
conditions are imposed on you (whether by court order, agreement or
|
||||
|
@ -422,7 +422,7 @@ conditions either of that version or of any later version published by
|
|||
the Free Software Foundation. If the Library does not specify a
|
||||
license version number, you may choose any version ever published by
|
||||
the Free Software Foundation.
|
||||
|
||||
|
||||
14. If you wish to incorporate parts of the Library into other free
|
||||
programs whose distribution conditions are incompatible with these,
|
||||
write to the author to ask for permission. For software which is
|
||||
|
@ -456,7 +456,7 @@ SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
|
|||
DAMAGES.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||
|
||||
|
||||
How to Apply These Terms to Your New Libraries
|
||||
|
||||
If you develop a new library, and you want it to be of the greatest
|
||||
|
@ -485,7 +485,7 @@ convey the exclusion of warranty; and each file should have at least the
|
|||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with this library; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
|
||||
Also add information on how to contact you by electronic and paper mail.
|
||||
|
||||
|
|
111
INSTALL.md
111
INSTALL.md
|
@ -1,64 +1,25 @@
|
|||
# Mapnik Installation
|
||||
|
||||
Mapnik runs on Linux, OS X, Windows, and BSD systems.
|
||||
|
||||
## Package managers
|
||||
### vcpkg
|
||||
To install mapnik with vcpkg type `vcpkg install mapnik`. It will install a minimal version of mapnik and all the needed dependencies.
|
||||
To install more features, type `vcpkg search mapnik` to see all available features.
|
||||
|
||||
## Source build
|
||||
|
||||
First clone mapnik from github and initialize submodules
|
||||
|
||||
```bash
|
||||
git clone https://github.com/mapnik/mapnik.git
|
||||
cd mapnik
|
||||
git submodule update --init
|
||||
```
|
||||
Mapnik is cross platform and runs on Linux, Mac OSX, Solaris, *BSD, and Windows.
|
||||
|
||||
To configure and build Mapnik do:
|
||||
|
||||
```bash
|
||||
./configure
|
||||
make
|
||||
```
|
||||
./configure
|
||||
make
|
||||
|
||||
To trigger parallel compilation you can pass a JOBS value to make:
|
||||
|
||||
```bash
|
||||
JOBS=4 make
|
||||
```
|
||||
|
||||
Mapnik needs > 2 GB of RAM to build. If you use parallel compilation it needs more.
|
||||
|
||||
If you are on a system with less memory make sure you only build with one JOB:
|
||||
|
||||
```bash
|
||||
JOBS=1 make
|
||||
```
|
||||
|
||||
To use a Python interpreter that is not named `python` for your build, do
|
||||
something like the following instead:
|
||||
|
||||
```bash
|
||||
$ PYTHON=python3 ./configure
|
||||
$ make PYTHON=python3
|
||||
```
|
||||
|
||||
NOTE: the above will not work on windows, rather see https://github.com/mapnik/mapnik/wiki/WindowsInstallation
|
||||
NOTE: the above will not work on windows, rather see https://github.com/mapnik/mapnik/wiki/BuildingOnWindows
|
||||
|
||||
Then to run the tests locally (without needing to install):
|
||||
|
||||
make test
|
||||
make test-local
|
||||
|
||||
Install like:
|
||||
|
||||
make install
|
||||
sudo make install
|
||||
|
||||
If you need to uninstall do:
|
||||
|
||||
make uninstall
|
||||
sudo make uninstall
|
||||
|
||||
For more details see the `Building` Section below.
|
||||
|
||||
|
@ -71,43 +32,47 @@ For troubleshooting help see https://github.com/mapnik/mapnik/wiki/InstallationT
|
|||
|
||||
Build system dependencies are:
|
||||
|
||||
* C++ compiler supporting `-std=c++17` (like >= g++ 9 or >= clang++ 5)
|
||||
* \>= 2 GB RAM (> 5 GB for g++)
|
||||
* Python 3
|
||||
* Scons (a copy is bundled) or CMake >= 3.15 see [docs/cmake-usage.md](./docs/cmake-usage.md)
|
||||
* C++ compiler (like g++ or clang++)
|
||||
* >= 2 GB RAM
|
||||
* Python 2.4-2.7
|
||||
* Scons (a copy is bundled)
|
||||
|
||||
Mapnik Core depends on:
|
||||
|
||||
* Boost
|
||||
- \>= 1.73 is required
|
||||
- >= 1.47 is required.
|
||||
- These libraries are used:
|
||||
- filesystem
|
||||
- system
|
||||
- thread (if mapnik threadsafe support is required, default on)
|
||||
- regex (optionally built with icu regex support)
|
||||
- program_options (optionally for mapnik command line programs)
|
||||
* libicuuc >= 4.0 (ideally >= 4.2) - International Components for Unicode
|
||||
* libpng >= 1.2.x - PNG graphics
|
||||
* libjpeg - JPEG graphics
|
||||
* libtiff - TIFF graphics
|
||||
* libz - Zlib compression
|
||||
* libfreetype - Freetype2 for font support (Install requires freetype-config)
|
||||
* libxml2 - XML parsing (Install requires xml2-config)
|
||||
* libharfbuzz - an OpenType text shaping engine (>=0.9.34 needed for CSS font-feature-settings support)
|
||||
* libproj - PROJ.4 projection library
|
||||
|
||||
Mapnik Core optionally depends on:
|
||||
Mapnik Python bindings depend on:
|
||||
|
||||
* libpng >= 1.2.x - PNG graphics (Default enabled, if found)
|
||||
* libjpeg - JPEG graphics (Default enabled, if found)
|
||||
* libtiff - TIFF graphics (Default enabled, if found)
|
||||
* libwebp - WEBP graphics (Default enabled, if found)
|
||||
* libproj >= 7.2.0 - PROJ projection library (Default enabled, if found)
|
||||
* Python 2.5-2.7 or >= 3.2
|
||||
* Boost python
|
||||
|
||||
Additional optional dependencies:
|
||||
Note: Python3k is supported, see: https://github.com/mapnik/mapnik/wiki/Python3k
|
||||
|
||||
* Cairo >= 1.6.0 - Graphics library for output formats like PDF, PS, and SVG
|
||||
Optional dependencies:
|
||||
|
||||
* Cairo - Graphics library for output formats like PDF, PS, and SVG
|
||||
- pkg-config - Required for building with cairo support
|
||||
* PostgreSQL (for PostGIS plugin support)
|
||||
- libpq - PostreSQL libraries
|
||||
- pg_config - PostgreSQL installation capabilities
|
||||
* libgdal - GDAL/OGR input (For gdal and ogr plugin support) (>= GDAL 2.0.2 for thread safety - https://github.com/mapnik/mapnik/issues/3339)
|
||||
- pycairo - Python bindings for cairo
|
||||
* libpq - PostgreSQL libraries (For PostGIS plugin support)
|
||||
* libgdal - GDAL/OGR input (For gdal and ogr plugin support)
|
||||
* libsqlite3 - SQLite input (needs RTree support builtin) (sqlite plugin support)
|
||||
* libocci - Oracle input plugin support
|
||||
* libcurl - OSM input plugin support
|
||||
|
||||
Instructions for installing many of these dependencies on
|
||||
various platforms can be found at the Mapnik Wiki:
|
||||
|
@ -168,13 +133,17 @@ For more details on usage see:
|
|||
|
||||
You can run the Mapnik tests locally (without installing) like:
|
||||
|
||||
make test
|
||||
make test-local # see the Makefile for how this works
|
||||
|
||||
## Python Bindings
|
||||
Or you can install and test like:
|
||||
|
||||
Python bindings are not included by default. You'll need to add those separately.
|
||||
make install && make test
|
||||
|
||||
Many of the tests are written in python and you can run them individually like:
|
||||
|
||||
make install
|
||||
python tests/python_tests/shapefile_test.py
|
||||
|
||||
* Build from source: https://github.com/mapnik/python-mapnik
|
||||
|
||||
## Learning Mapnik
|
||||
|
||||
|
@ -191,7 +160,7 @@ If you need help or want to participate starting points include:
|
|||
### Cartographers
|
||||
|
||||
TileMill, which uses Mapnik internally, offers great step by step tutorials for
|
||||
learning advanced map styling: https://tilemill-project.github.io/tilemill/docs/crashcourse/introduction/
|
||||
learning advanced map styling: http://mapbox.com/tilemill/docs/crashcourse/introduction/
|
||||
|
||||
### Programmers
|
||||
|
||||
|
@ -199,6 +168,6 @@ Mapnik is great for building your own mapping applications. Visit
|
|||
https://github.com/mapnik/mapnik/wiki/LearningMapnik for basic
|
||||
tutorials on how to programmatically use Mapnik.
|
||||
|
||||
### Contributors
|
||||
### Contributers
|
||||
|
||||
Read [docs/contributing.md](docs/contributing.md) for resources for getting involved with Mapnik development.
|
||||
Read docs/contributing.markdown for resources for getting involved with Mapnik development.
|
||||
|
|
106
Makefile
106
Makefile
|
@ -1,68 +1,30 @@
|
|||
OS := $(shell uname -s)
|
||||
|
||||
ifeq ($(JOBS),)
|
||||
JOBS:=1
|
||||
endif
|
||||
|
||||
ifeq ($(HEAVY_JOBS),)
|
||||
HEAVY_JOBS:=1
|
||||
UNAME := $(shell uname)
|
||||
LINK_FIX=LD_LIBRARY_PATH
|
||||
ifeq ($(UNAME), Darwin)
|
||||
LINK_FIX=DYLD_LIBRARY_PATH
|
||||
else
|
||||
endif
|
||||
|
||||
all: mapnik
|
||||
|
||||
install:
|
||||
$(PYTHON) scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1 install
|
||||
@python scons/scons.py --config=cache --implicit-cache --max-drift=1 install
|
||||
|
||||
release:
|
||||
./scripts/publish_release.sh
|
||||
|
||||
test-release:
|
||||
./scripts/test_release.sh
|
||||
|
||||
src/json/libmapnik-json.a:
|
||||
# we first build memory intensive files with -j$(HEAVY_JOBS)
|
||||
$(PYTHON) scons/scons.py -j$(HEAVY_JOBS) \
|
||||
--config=cache --implicit-cache --max-drift=1 \
|
||||
src/renderer_common/render_group_symbolizer.os \
|
||||
src/renderer_common/render_markers_symbolizer.os \
|
||||
src/renderer_common/render_thunk_extractor.os \
|
||||
src/json/libmapnik-json.a \
|
||||
src/wkt/libmapnik-wkt.a \
|
||||
src/css/css_grammar_x3.os \
|
||||
src/css/css_color_grammar_x3.os \
|
||||
src/expression_grammar_x3.os \
|
||||
src/transform_expression_grammar_x3.os \
|
||||
src/image_filter_grammar_x3.os \
|
||||
src/marker_helpers.os \
|
||||
src/svg/svg_transform_parser.os \
|
||||
src/agg/process_line_symbolizer.os \
|
||||
plugins/input/geojson/geojson_datasource.os \
|
||||
src/svg/svg_path_parser.os \
|
||||
src/svg/svg_parser.os \
|
||||
src/svg/svg_points_parser.os \
|
||||
src/svg/svg_transform_parser.os \
|
||||
|
||||
|
||||
mapnik: src/json/libmapnik-json.a
|
||||
# then install the rest with -j$(JOBS)
|
||||
$(PYTHON) scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1
|
||||
mapnik:
|
||||
@python scons/scons.py --config=cache --implicit-cache --max-drift=1
|
||||
|
||||
clean:
|
||||
@$(PYTHON) scons/scons.py -j$(JOBS) -c --config=cache --implicit-cache --max-drift=1
|
||||
@python scons/scons.py -c --config=cache --implicit-cache --max-drift=1
|
||||
@if test -e ".sconsign.dblite"; then rm ".sconsign.dblite"; fi
|
||||
@if test -e "config.log"; then rm "config.log"; fi
|
||||
@if test -e "config.cache"; then rm "config.cache"; fi
|
||||
@if test -e ".sconf_temp/"; then rm -r ".sconf_temp/"; fi
|
||||
@find ./ -name "*.pyc" -exec rm {} \;
|
||||
@find ./ -name "*.os" -exec rm {} \;
|
||||
@find ./src/ -name "*.dylib" -exec rm {} \;
|
||||
@find ./src/ -name "*.so" -exec rm {} \;
|
||||
@find ./ -name "*.o" -exec rm {} \;
|
||||
@find ./src/ -name "*.a" -exec rm {} \;
|
||||
@find ./ -name "*.gcda" -exec rm {} \;
|
||||
@find ./ -name "*.gcno" -exec rm {} \;
|
||||
@find ./ -name "*.pyc" -exec rm {} \;
|
||||
@rm bindings/python/mapnik/paths.py
|
||||
|
||||
distclean:
|
||||
@if test -e "config.cache"; then rm "config.cache"; fi
|
||||
if test -e "config.py"; then mv "config.py" "config.py.backup"; fi
|
||||
|
||||
reset: distclean
|
||||
|
@ -71,35 +33,39 @@ rebuild:
|
|||
make uninstall && make clean && time make && make install
|
||||
|
||||
uninstall:
|
||||
@$(PYTHON) scons/scons.py -j$(JOBS) --config=cache --implicit-cache --max-drift=1 uninstall
|
||||
@python scons/scons.py --config=cache --implicit-cache --max-drift=1 uninstall
|
||||
|
||||
test/data-visual:
|
||||
./scripts/ensure_test_data.sh
|
||||
test:
|
||||
@ ./run_tests
|
||||
|
||||
test/data:
|
||||
./scripts/ensure_test_data.sh
|
||||
|
||||
test: ./test/data test/data-visual
|
||||
@./test/run
|
||||
|
||||
check: test
|
||||
test-local:
|
||||
@echo "*** Boostrapping local test environment..."
|
||||
@export ${LINK_FIX}=`pwd`/src:${${LINK_FIX}} && \
|
||||
export PYTHONPATH=`pwd`/bindings/python/:${PYTHONPATH} && \
|
||||
export MAPNIK_FONT_DIRECTORY=`pwd`/fonts/dejavu-fonts-ttf-2.33/ttf/ && \
|
||||
export MAPNIK_INPUT_PLUGINS_DIRECTORY=`pwd`/plugins/input/ && \
|
||||
make test
|
||||
|
||||
bench:
|
||||
@export ${LINK_FIX}=`pwd`/src:${${LINK_FIX}} && \
|
||||
./benchmark/run
|
||||
|
||||
demo:
|
||||
cd demo/c++; ./rundemo `mapnik-config --prefix`
|
||||
check: test-local
|
||||
|
||||
demo:
|
||||
@echo "*** Running rundemo.cpp…"
|
||||
cd demo/c++; ./rundemo `mapnik-config --prefix`/lib/mapnik
|
||||
|
||||
pep8:
|
||||
# https://gist.github.com/1903033
|
||||
# gsed on osx
|
||||
@pep8 -r --select=W293 -q --filename=*.py `pwd`/tests/ | xargs gsed -i 's/^[ \r\t]*$//'
|
||||
@pep8 -r --select=W391 -q --filename=*.py `pwd`/tests/ | xargs gsed -i -e :a -e '/^\n*$/{$d;N;ba' -e '}'
|
||||
|
||||
# note: pass --gen-suppressions=yes to create new suppression entries
|
||||
grind:
|
||||
@source localize.sh && \
|
||||
valgrind --suppressions=./test/unit/valgrind.supp --leak-check=full --log-fd=1 ./test/visual/run | grep definitely;
|
||||
@source localize.sh && \
|
||||
for FILE in test/standalone/*-bin; do \
|
||||
valgrind --suppressions=./test/unit/valgrind.supp --leak-check=full --log-fd=1 $${FILE} | grep definitely; \
|
||||
@for FILE in tests/cpp_tests/*-bin; do \
|
||||
valgrind --leak-check=full --log-fd=1 $${FILE} | grep definitely; \
|
||||
done
|
||||
@source localize.sh && \
|
||||
valgrind --suppressions=./test/unit/valgrind.supp --leak-check=full --log-fd=1 ./test/unit/run | grep definitely;
|
||||
|
||||
render:
|
||||
@for FILE in tests/data/good_maps/*xml; do \
|
||||
|
|
20
README.md
20
README.md
|
@ -8,23 +8,23 @@ _/ _/ _/_/_/ _/_/_/ _/ _/ _/ _/ _/
|
|||
_/
|
||||
```
|
||||
|
||||
[![TravisCI](https://api.travis-ci.com/mapnik/mapnik.svg?branch=master)](http://travis-ci.com/mapnik/mapnik)
|
||||
[![codecov](https://codecov.io/gh/mapnik/mapnik/branch/master/graph/badge.svg)](https://codecov.io/gh/mapnik/mapnik)
|
||||
[![Build Status](https://secure.travis-ci.org/mapnik/mapnik.png)](http://travis-ci.org/mapnik/mapnik)
|
||||
|
||||
Mapnik is an open source toolkit for developing mapping applications. At the core is a C++ shared library providing algorithms and patterns for spatial data access and visualization.
|
||||
# What is Mapnik?
|
||||
|
||||
Mapnik is an open source toolkit and API for developing mapping applications. At the core is a C++ shared library providing algorithms and patterns for spatial data access and visualization. High-level bindings for Java, JavaScript, Python, and Ruby facilitate rapid application development in a variety of environments.
|
||||
|
||||
# Overview
|
||||
|
||||
Mapnik is basically a collection of geographic objects like maps, layers, datasources, features, and geometries. The library doesn't rely on any OS specific "windowing systems" and it can be deployed to any server environment. It is intended to play fair in a multi-threaded environment and is aimed primarily, but not exclusively, at web-based development.
|
||||
|
||||
For further information see [http://mapnik.org](http://mapnik.org) and also our [wiki documentation](https://github.com/mapnik/mapnik/wiki).
|
||||
|
||||
For further information see [http://mapnik.org](http://mapnik.org) and also our [wiki documentation](https://github.com/mapnik/mapnik/wiki) here on GitHub.
|
||||
|
||||
# Installation
|
||||
|
||||
See [INSTALL.md](INSTALL.md) for installation instructions and the [Install](https://github.com/mapnik/mapnik/wiki/Mapnik-Installation) page on the wiki for guides.
|
||||
|
||||
# Code of Conduct
|
||||
|
||||
Please note that this project is released with a [Contributor Code of Conduct](https://github.com/mapnik/mapnik/blob/master/CODE_OF_CONDUCT.md). By participating in this project you agree to abide by its terms.
|
||||
See [INSTALL.md](https://github.com/mapnik/mapnik/blob/master/INSTALL.md) for installation instructions.
|
||||
|
||||
# License
|
||||
|
||||
Mapnik software is free and is released under the LGPL v2.1 ([GNU Lesser General Public License, version 2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html)). Please see [COPYING](https://github.com/mapnik/mapnik/blob/master/COPYING) for more information.
|
||||
Mapnik software is free and is released under LGPL ([GNU Lesser General Public License](http://www.gnu.org/licenses/lgpl.html_). Please see [COPYING](https://github.com/mapnik/mapnik/blob/master/COPYING) for more information.
|
||||
|
|
1551
SConstruct
1551
SConstruct
File diff suppressed because it is too large
Load diff
6
benchmark/.gitignore
vendored
6
benchmark/.gitignore
vendored
|
@ -1,6 +0,0 @@
|
|||
multicolor-hextree-actual.png
|
||||
multicolor-hextree-actual.png
|
||||
polygon_clipping_boost_actual.png
|
||||
polygon_clipping_clipper_actual.png
|
||||
polygon_clipping_agg_actual.png
|
||||
out
|
|
@ -1,52 +0,0 @@
|
|||
project(mapnik-benchmark)
|
||||
|
||||
set(BENCHMARK_SRCS
|
||||
src/normalize_angle.cpp
|
||||
src/test_array_allocation.cpp
|
||||
src/test_expression_parse.cpp
|
||||
src/test_face_ptr_creation.cpp
|
||||
src/test_font_registration.cpp
|
||||
src/test_getline.cpp
|
||||
src/test_marker_cache.cpp
|
||||
src/test_noop_rendering.cpp
|
||||
src/test_numeric_cast_vs_static_cast.cpp
|
||||
src/test_offset_converter.cpp
|
||||
src/test_png_encoding1.cpp
|
||||
src/test_png_encoding2.cpp
|
||||
src/test_polygon_clipping_rendering.cpp
|
||||
src/test_polygon_clipping.cpp
|
||||
src/test_proj_transform1.cpp
|
||||
src/test_quad_tree.cpp
|
||||
src/test_rendering_shared_map.cpp
|
||||
src/test_rendering.cpp
|
||||
src/test_to_bool.cpp
|
||||
src/test_to_double.cpp
|
||||
src/test_to_int.cpp
|
||||
src/test_to_string1.cpp
|
||||
src/test_to_string2.cpp
|
||||
src/test_utf_encoding.cpp
|
||||
)
|
||||
function(mapnik_create_benchmark)
|
||||
get_filename_component(BENCHNAME ${ARGV0} NAME_WE)
|
||||
set(TARGET_NAME "mapnik-benchmark-${BENCHNAME}")
|
||||
add_executable(${TARGET_NAME} ${ARGV0})
|
||||
target_include_directories(${TARGET_NAME} PRIVATE include)
|
||||
target_link_libraries(${TARGET_NAME} PRIVATE
|
||||
mapnik::agg
|
||||
mapnik::mapnik
|
||||
ICU::data ICU::i18n ICU::uc # needed for the static build (TODO: why isn't this correctly propagated from mapnik::mapnik?)
|
||||
)
|
||||
set_target_properties(${TARGET_NAME} PROPERTIES
|
||||
OUTPUT_NAME "${BENCHNAME}"
|
||||
)
|
||||
endfunction()
|
||||
|
||||
foreach(benchmark ${BENCHMARK_SRCS})
|
||||
mapnik_create_benchmark(${benchmark})
|
||||
endforeach()
|
||||
|
||||
file(COPY data DESTINATION "${MAPNIK_OUTPUT_DIR}/benchmark")
|
||||
file(COPY run_benchmarks
|
||||
DESTINATION "${MAPNIK_OUTPUT_DIR}"
|
||||
FILE_PERMISSIONS OWNER_READ OWNER_EXECUTE OWNER_WRITE GROUP_WRITE GROUP_READ GROUP_EXECUTE WORLD_READ
|
||||
)
|
49
benchmark/allocation.cpp
Normal file
49
benchmark/allocation.cpp
Normal file
|
@ -0,0 +1,49 @@
|
|||
#include <mapnik/geometry.hpp>
|
||||
#include <mapnik/wkt/wkt_factory.hpp>
|
||||
|
||||
|
||||
#define BOOST_CHRONO_HEADER_ONLY
|
||||
#include <boost/chrono/process_cpu_clocks.hpp>
|
||||
#include <boost/chrono.hpp>
|
||||
#include <boost/thread/thread.hpp>
|
||||
|
||||
using namespace boost::chrono;
|
||||
using namespace mapnik;
|
||||
|
||||
void threaded_benchmark(void test(),std::string const& name, unsigned threads) {
|
||||
using namespace boost::chrono;
|
||||
typedef process_cpu_clock clock_type;
|
||||
process_real_cpu_clock::time_point start = process_real_cpu_clock::now();
|
||||
boost::thread_group threads;
|
||||
for (unsigned i=0;i<threads;++i)
|
||||
{
|
||||
threads.create_thread(test);
|
||||
}
|
||||
threads.join_all();
|
||||
clock_type::duration elapsed = process_real_cpu_clock::now() - start;
|
||||
std::clog << boost::chrono::duration_cast<milliseconds>(elapsed)
|
||||
<< " (" << boost::chrono::duration_cast<seconds>(elapsed) << ")"
|
||||
<< " <-- " << name << "\n";
|
||||
}
|
||||
|
||||
|
||||
void test_wkt_creation()
|
||||
{
|
||||
boost::ptr_vector<mapnik::geometry_type> paths;
|
||||
mapnik::wkt_parser parse_wkt;
|
||||
std::string value("GEOMETRYCOLLECTION(MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 45 20, 30 5, 10 10, 10 30, 20 35),(30 20, 20 25, 20 15, 30 20))),POINT(2 3),LINESTRING(2 3,3 4),MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 45 20, 30 5, 10 10, 10 30, 20 35),(30 20, 20 25, 20 15, 30 20))),MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 45 20, 30 5, 10 10, 10 30, 20 35),(30 20, 20 25, 20 15, 30 20))),MULTIPOLYGON (((40 40, 20 45, 45 30, 40 40)),((20 35, 45 20, 30 5, 10 10, 10 30, 20 35),(30 20, 20 25, 20 15, 30 20))))");
|
||||
if (!parse_wkt.parse(value, paths)) std::clog << "failed to parse\n";
|
||||
int iterations = 10000;
|
||||
typedef process_cpu_clock clock_type;
|
||||
process_real_cpu_clock::time_point start = process_real_cpu_clock::now();
|
||||
for (int i=0;i<iterations;++i) {
|
||||
parse_wkt.parse(value, paths);
|
||||
}
|
||||
clock_type::duration elapsed = process_real_cpu_clock::now() - start;
|
||||
std::clog << "elapsed: " << boost::chrono::duration_cast<milliseconds>(elapsed) << "\n";
|
||||
}
|
||||
|
||||
int main( int, char*[] )
|
||||
{
|
||||
return 0;
|
||||
}
|
|
@ -6,32 +6,17 @@ Import ('env')
|
|||
|
||||
test_env = env.Clone()
|
||||
|
||||
test_env['LIBS'] = [env['MAPNIK_NAME']]
|
||||
test_env.AppendUnique(LIBS=copy(env['LIBMAPNIK_LIBS']))
|
||||
test_env.AppendUnique(LIBS='mapnik-wkt')
|
||||
test_env.AppendUnique(LIBS='sqlite3')
|
||||
if env['PLATFORM'] == 'Linux':
|
||||
test_env.AppendUnique(LIBS='dl')
|
||||
test_env.AppendUnique(LIBS='rt')
|
||||
test_env['LIBS'] = copy(env['LIBMAPNIK_LIBS'])
|
||||
test_env.AppendUnique(LIBS='mapnik')
|
||||
#test_env.AppendUnique(LIBS='sqlite3')
|
||||
test_env.AppendUnique(CXXFLAGS='-g')
|
||||
test_env['CXXFLAGS'] = copy(test_env['LIBMAPNIK_CXXFLAGS'])
|
||||
test_env.Append(CPPDEFINES = env['LIBMAPNIK_DEFINES'])
|
||||
if test_env['HAS_CAIRO']:
|
||||
test_env.PrependUnique(CPPPATH=test_env['CAIRO_CPPPATHS'])
|
||||
test_env.Append(CPPDEFINES = '-DHAVE_CAIRO')
|
||||
test_env.PrependUnique(CPPPATH='include', delete_existing=True)
|
||||
test_env['LINKFLAGS'] = copy(test_env['LIBMAPNIK_LINKFLAGS'])
|
||||
if env['PLATFORM'] == 'Darwin':
|
||||
test_env.Append(LINKFLAGS='-F/ -framework CoreFoundation')
|
||||
|
||||
test_env_local = test_env.Clone()
|
||||
|
||||
benchmarks = glob.glob("src/*.cpp")
|
||||
|
||||
for src in benchmarks:
|
||||
name, ext = os.path.splitext(os.path.basename(src))
|
||||
out = os.path.join("out", name)
|
||||
test_program = test_env_local.Program(out, source=[src])
|
||||
for cpp_test in glob.glob('run*.cpp'):
|
||||
name = cpp_test.replace('.cpp','')
|
||||
source_files = [cpp_test]
|
||||
test_env_local = test_env.Clone()
|
||||
test_program = test_env_local.Program(name, source=source_files, LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
Depends(test_program, env.subst('../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
# build locally if installing
|
||||
if 'install' in COMMAND_LINE_TARGETS:
|
||||
env.Alias('install',test_program)
|
||||
#Depends(test_program, env.subst('../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
|
|
@ -1,21 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE Map[]>
|
||||
<Map
|
||||
srs="epsg:4326"
|
||||
background-color="#dfd8c9">
|
||||
|
||||
<Style name="style">
|
||||
<Rule>
|
||||
<RasterSymbolizer />
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="layer"
|
||||
srs="epsg:4326">
|
||||
<StyleName>style</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="file">./valid.geotiff.tif</Parameter>
|
||||
<Parameter name="type">gdal</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
|
||||
</Map>
|
|
@ -1 +0,0 @@
|
|||
POLYGON ((155 203, 233 454, 315 340, 421 446, 463 324, 559 466, 665 253, 528 178, 394 229, 329 138, 212 134, 183 228, 200 264, 155 203),(313 190, 440 256, 470 248, 510 305, 533 237, 613 263, 553 397, 455 262, 405 378, 343 287, 249 334, 229 191, 313 190))
|
Binary file not shown.
Before Width: | Height: | Size: 8.7 KiB |
Binary file not shown.
Before Width: | Height: | Size: 8.6 KiB |
Binary file not shown.
Before Width: | Height: | Size: 8.5 KiB |
|
@ -1,14 +0,0 @@
|
|||
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="steelblue">
|
||||
<Style name="style">
|
||||
<Rule>
|
||||
<PolygonSymbolizer clip="true"/>
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
||||
<StyleName>style</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="file">../../test/data/shp/world_merc.shp</Parameter>
|
||||
<Parameter name="type">shape</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
</Map>
|
|
@ -1,14 +0,0 @@
|
|||
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="steelblue">
|
||||
<Style name="style">
|
||||
<Rule>
|
||||
<PolygonSymbolizer clip="false"/>
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
||||
<StyleName>style</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="file">../../test/data/shp/world_merc.shp</Parameter>
|
||||
<Parameter name="type">shape</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
</Map>
|
|
@ -1,21 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE Map[]>
|
||||
<Map
|
||||
srs="epsg:4326"
|
||||
background-color="#dfd8c9">
|
||||
|
||||
<Style name="style">
|
||||
<Rule>
|
||||
<RasterSymbolizer />
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="layer"
|
||||
srs="epsg:4326">
|
||||
<StyleName>style</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="file">./valid.geotiff.tif</Parameter>
|
||||
<Parameter name="type">raster</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
|
||||
</Map>
|
|
@ -1,853 +0,0 @@
|
|||
WKT,fid,type,tunnel,bridge,oneway,class,z_order,z
|
||||
"LINESTRING (1478464.087426564656198 6892271.151913832873106,1478475.106973737478256 6892349.655597596429288)",312,service,1,0,1,minorroads,-10,-1
|
||||
"LINESTRING (1478267.685692099155858 6891978.835526627488434,1478231.305324257584289 6891833.51674110814929,1478229.896389777539298 6891821.759523851796985,1478231.40796187100932 6891811.979739548638463,1478234.552405048860237 6891804.43797043338418,1478240.58003204013221 6891797.938565328717232,1478264.75585483526811 6891788.741302938200533,1478317.1663514142856 6891772.262900795787573,1478340.17583771632053 6891781.920006790198386,1478348.685428757686168 6891803.794161200523376,1478402.16895490931347 6892023.780644913204014,1478450.679222259437665 6892216.85436431504786,1478464.087426564656198 6892271.151913832873106,1478454.672758408589289 6892353.104810423217714)",313,service,1,0,1,minorroads,-10,-1
|
||||
"LINESTRING (1478426.895288528874516 6891709.308051269501448,1478411.676929988665506 6891698.869274341501296,1478398.007466310635209 6891695.573628057725728,1478379.514034900348634 6891705.552542590536177,1478372.413378342054784 6891719.700855853967369,1478378.730256776325405 6891746.357388046570122,1478416.519559100735933 6891913.901618065312505,1478440.583413592772558 6892016.652565392665565,1478431.719256255310029 6892045.870066974312067,1478463.555577126098797 6892169.547425043769181,1478450.679222259437665 6892216.85436431504786)",315,service,1,0,1,minorroads,-10,-1
|
||||
"LINESTRING (1478079.075085395481437 6891736.240464904345572,1478104.715826825471595 6891790.366151860915124,1478111.42459432175383 6891812.884139166213572,1478111.919120994396508 6891834.559102791361511,1478109.614440086763352 6891846.147721174173057)",334,service,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1478454.672758408589289 6892353.104810423217714,1478458.218421341385692 6892374.581942255608737,1478466.532067854423076 6892390.463712620548904,1478477.467638794099912 6892401.945822895504534,1478492.303438970819116 6892407.924498297274113)",352,service,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1478295.649775819852948 6892148.408088837750256,1478302.451850236626342 6892175.740540593862534,1478344.449294621357694 6892185.352142740041018,1478371.359010152285919 6892210.707205789163709,1478358.342694909079 6892292.506188929080963)",371,footway,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1478404.315014054765925 6892179.250996824353933,1478397.699553476180881 6892180.93724271748215,1478392.530350143555552 6892182.255580662749708,1478371.359010152285919 6892210.707205789163709,1478418.786917239660397 6892247.360282902605832)",372,footway,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1478380.437773400917649 6892134.381656404584646,1478402.747457809513435 6892127.958631582558155)",386,footway,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1478402.16895490931347 6892023.780644913204014,1478431.719256255310029 6892045.870066974312067)",387,service,1,0,1,minorroads,-10,-1
|
||||
"LINESTRING (1478302.451850236626342 6892175.740540593862534,1478279.339726323960349 6892178.407874005846679)",388,footway,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1478440.583413592772558 6892016.652565392665565,1478459.888615197036415 6892053.703318660147488,1478482.851448043249547 6892145.54148262552917,1478463.555577126098797 6892169.547425043769181)",390,service,1,0,1,minorroads,-10,-1
|
||||
"LINESTRING (1478402.16895490931347 6892023.780644913204014,1478391.01877805008553 6892079.79377365577966,1478402.747457809513435 6892127.958631582558155,1478416.584873942658305 6892184.692973483353853,1478450.679222259437665 6892216.85436431504786)",391,service,1,0,1,minorroads,-10,-1
|
||||
"LINESTRING (1478392.530350143555552 6892182.255580662749708,1478380.437773400917649 6892134.381656404584646,1478354.479788446333259 6892046.069347251206636)",392,footway,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1478352.147115462692454 6891731.442595199681818,1478363.101347791031003 6891774.746155516244471,1478421.539471358293667 6892018.967274392023683,1478431.719256255310029 6892045.870066974312067)",393,service,1,0,1,minorroads,-10,-1
|
||||
"LINESTRING (1478289.006323162466288 6891573.850262156687677,1478287.961285665631294 6891604.6449805945158,1478304.653893533628434 6891631.25514588970691)",397,service,1,0,1,minorroads,-10,-1
|
||||
"LINESTRING (1478316.746470273472369 6891546.32058884575963,1478314.525765596190467 6891576.70133616309613)",400,service,1,0,1,minorroads,-10,-1
|
||||
"LINESTRING (1478352.874909435166046 6891537.000988053157926,1478335.267893759533763 6891583.292532620951533,1478318.957844263641164 6891610.699705163016915,1478266.771284291520715 6891649.189465964213014)",402,path,1,0,1,minorroads,-10,-1
|
||||
"LINESTRING (1478304.653893533628434 6891544.619147759862244,1478289.006323162466288 6891573.850262156687677)",403,service,1,0,1,minorroads,-10,-1
|
||||
"LINESTRING (1478304.653893533628434 6891631.25514588970691,1478325.004132634960115 6891655.259552592411637,1478338.570958702359349 6891679.785201796330512,1478352.147115462692454 6891731.442595199681818)",404,service,1,0,1,minorroads,-10,-1
|
||||
"LINESTRING (1478189.345202641561627 6892164.39671871624887,1478191.565907321637496 6892107.493896978907287)",417,footway,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1477341.726486198138446 6891879.672032723203301,1477366.966007873183116 6891868.589220155961812)",487,service,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1477280.535808509448543 6891906.926925845444202,1477314.966061739251018 6891890.785518474876881,1477341.726486198138446 6891879.672032723203301)",488,service,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1477246.96397894108668 6891938.244107788428664,1477280.535808509448543 6891906.926925845444202)",489,service,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1477089.116663535358384 6890956.187384136021137,1477095.414880589582026 6891011.595310922712088)",498,footway,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1477776.443423286313191 6890246.309983272105455,1477868.845265486976132 6890131.995495325885713)",499,footway,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1477507.896778806811199 6891126.826628868468106,1477488.684884120011702 6891123.347287161275744,1477444.914608268765733 6891146.583800435997546,1477413.610136836534366 6891170.065622186288238,1477406.453496126458049 6891175.721502039581537)",571,service,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1477741.089431561529636 6891515.342154928483069,1477664.167207277147099 6891575.812291472218931,1477687.456614337861538 6891609.488759884610772)",584,service,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1477226.557755685178563 6892508.796153583563864,1477223.683902570279315 6892523.712388763204217)",605,footway,1,0,0,minorroads,-10,-1
|
||||
"LINESTRING (1478367.953307596268132 6891647.825229956768453,1478351.279361113905907 6891651.197499162517488,1478335.519822442205623 6891655.826707382686436,1478312.034470850601792 6891667.031854874454439,1478293.233126608654857 6891676.167663832195103,1478279.554332237923518 6891684.153840911574662)",40,motorway_link,1,0,1,motorways,-7,0
|
||||
"LINESTRING (1478264.074714324669912 6891662.709210627712309,1478309.907073091017082 6891635.777043334208429,1478332.132781271822751 6891620.126690473407507,1478345.130435132188722 6891607.143511951901019,1478354.162544921739027 6891591.585185151547194,1478362.989379487698898 6891563.457646118476987)",321,unclassified,1,0,1,minorroads,-7,0
|
||||
"LINESTRING (1477870.207546508172527 6890978.105273565277457,1477871.81242551933974 6890936.997784550301731)",115,secondary,1,0,0,mainroads,-5,0
|
||||
"LINESTRING (1477698.952026794664562 6891185.101994454860687,1477704.662410258548334 6891180.672316116280854,1477801.412354895845056 6891105.552087247371674)",143,secondary,1,0,0,mainroads,-5,0
|
||||
"LINESTRING (1479215.254780515097082 6891069.072816937230527,1479243.134888005442917 6891128.374706505797803,1479276.548095814418048 6891179.446108014322817)",694,light_rail,1,0,0,railways,-3,0
|
||||
"LINESTRING (1477683.612369260750711 6890631.518402252346277,1477781.108769256155938 6890678.065286220051348)",734,light_rail,1,0,0,railways,-3,0
|
||||
"LINESTRING (1477349.396314963698387 6890405.439559964463115,1477377.099139308556914 6890438.206881085410714,1477405.483104167273268 6890465.763412615284324)",756,light_rail,1,0,0,railways,-3,0
|
||||
"LINESTRING (1477401.172324493527412 6890470.315307054668665,1477373.534814990125597 6890442.390931232832372,1477344.973566989181563 6890408.949243260547519)",763,light_rail,1,0,0,railways,-3,0
|
||||
"LINESTRING (1477714.347668485715985 6890670.003475363366306,1477654.761869808426127 6890641.77187445666641)",765,light_rail,1,0,0,railways,-3,0
|
||||
"LINESTRING (1479016.87493935925886 6890040.272282585501671,1478980.289296296890825 6890061.804538452997804,1478944.888651107437909 6890084.838752162642777,1478893.905750391772017 6890130.064469543285668,1478869.048787088599056 6890161.77319775428623,1478842.530960619682446 6890196.347961265593767,1478810.134798231767491 6890258.739233900792897,1478777.253439866937697 6890329.912772791460156)",19,motorway,1,0,1,motorways,-1,0
|
||||
"LINESTRING (1478758.974614370847121 6890316.165379947982728,1478791.501406445167959 6890245.313804953359067,1478827.919097055448219 6890179.964776864275336,1478850.14480523345992 6890142.815378563478589,1478874.553895328659564 6890110.171865802258253,1478923.16680029197596 6890062.616788381710649,1478958.455477175069973 6890037.95814321283251,1478997.037888313643634 6890015.629031332209706)",21,motorway,1,0,1,motorways,-1,0
|
||||
"LINESTRING (1479020.635208208812401 6892437.128092028200626,1479011.145894512534142 6892381.664349486120045,1479006.648501003393903 6892345.654512577690184,1479018.862376742530614 6892314.12112672906369,1479040.462928561726585 6892294.161799130029976,1479017.65871748351492 6892284.044186560437083)",180,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479020.635208208812401 6892437.128092028200626,1479068.343036052072421 6892505.88342846557498,1479114.138072055066004 6892537.938793009147048,1479148.503010437591001 6892548.945877370424569,1479190.491124129621312 6892566.407007291913033,1479238.338912354782224 6892590.107600770890713,1479258.381238624453545 6892602.448493731208146,1479338.130662565119565 6892645.69542468432337,1479404.201292129000649 6892683.055686702951789,1479430.168607773724943 6892698.094889210537076,1479544.040372106945142 6892763.203769372776151)",181,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479045.072290376992896 6892170.589830297976732,1479020.971113116247579 6892174.437533211894333,1479002.925554922781885 6892173.946989312767982,1478997.952296121278778 6892171.632235683500767,1478992.381873039528728 6892169.087540414184332,1478988.360344814369455 6892166.251585789956152,1478981.390317942481488 6892158.372236031107605,1478979.636147862067446 6892149.9870221093297,1478980.55055566970259 6892139.19509603176266,1478990.749001952353865 6892115.465173177421093,1479012.517506226664409 6892082.706344389356673,1479051.342515352414921 6892039.569746791385114,1479037.383800225798041 6892032.27303178049624,1479034.351325348485261 6892030.126940387301147)",182,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478942.052120761480182 6892225.622887848876417,1478944.244833362754434 6892195.132381286472082,1478953.267612462397665 6892164.350730281323195,1478960.172324489569291 6892134.611597723327577,1478974.215015846770257 6892108.95018723513931,1478994.714546022936702 6892084.208618130534887,1479019.207612342899665 6892056.370611586607993,1479031.37483462318778 6892040.750098372809589,1479037.383800225798041 6892032.27303178049624)",183,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479511.261651349952444 6891082.208400661125779,1479481.459421321051195 6891103.084366684779525,1479360.328378667356446 6891034.478972747921944,1479352.322644991567358 6891022.952833535149693,1479317.873730378691107 6890999.440786958672106,1479303.915015249047428 6890990.106492877937853,1479242.089850508607924 6890937.610870090313256,1479204.841728321043774 6890955.758223262615502)",184,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479453.616636599646881 6890482.744903990067542,1479446.292043434455991 6890501.872114131227136)",186,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478987.24999247584492 6890117.681394563056529,1478974.429621760733426 6890121.788649991154671,1478968.140735402470455 6890127.643025163561106,1478961.749211427755654 6890132.608519486151636,1478951.065569168189541 6890141.650631228461862)",187,path,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478973.720489174127579 6890696.33466696832329,1478974.793518746970221 6890708.27415887080133,1478934.484929603524506 6890755.082042676396668,1478897.694011319894344 6890797.568019906058908)",189,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479085.427532981848344 6890674.279605968855321,1479067.307329247938469 6890686.387658378109336,1478977.630049095954746 6890791.621195725165308)",190,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478977.630049095954746 6890791.621195725165308,1478928.056082863127813 6890850.737115069292486,1478879.415185823803768 6890912.75028891582042,1478830.093148273881525 6890892.73313207551837,1478828.898819707566872 6890880.302901268936694)",191,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478934.484929603524506 6890755.082042676396668,1478977.630049095954746 6890791.621195725165308)",192,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478842.60560615430586 6890756.859950644895434,1478850.378072533290833 6890746.820906506851315,1478913.714809364406392 6890737.854747919365764,1478934.484929603524506 6890755.082042676396668)",193,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479375.994610418565571 6891635.010619860142469,1479355.719016854884103 6891632.650036015547812,1479354.972561499569565 6891634.887992111966014,1479352.901147891534492 6891636.420839112251997,1479350.960363967344165 6891637.417189817875624,1479346.481631841277704 6891681.977185339666903)",194,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479310.493153058923781 6891678.712203078903258,1479316.203536522807553 6891629.262446126900613,1479319.264003475895151 6891603.648633949458599)",195,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479383.543140193447471 6891577.667022745124996,1479380.146768330130726 6891605.043519286438823)",196,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479596.926733975531533 6891723.011840671300888,1479608.944665183546022 6891709.660609316080809)",198,pedestrian,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479434.777969588991255 6891585.561131720431149,1479482.392490514554083 6891545.140309852547944)",199,pedestrian,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478963.578027048613876 6890644.591964773833752,1478967.31030381959863 6890667.658501483500004)",205,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479401.150155866052955 6890069.130116234533489,1479393.65761024877429 6890062.678090267814696,1479327.960208358010277 6889996.932087614201009)",207,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478944.664714500773698 6890030.004252052865922,1478958.623429630184546 6890021.192146747373044,1478992.307227504905313 6890002.081405482254922,1479026.690827270271257 6889979.154706041328609,1479038.44749910547398 6889972.901981176808476,1479054.701564449816942 6889964.273841869086027,1479095.672632720787078 6889942.527293800376356,1479155.734296685084701 6889930.205808525905013,1479283.12623362406157 6889933.470080768689513)",209,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478877.884952347259969 6890822.336283389478922,1478872.855709397001192 6890815.577114805579185,1478875.6642476671841 6890806.963398001156747,1478885.032262367196381 6890797.506712420843542,1478891.367802187101915 6890795.698141722939909,1478897.694011319894344 6890797.568019906058908,1478901.986129605211318 6890803.192983939312398,1478902.536640429403633 6890810.013449692167342,1478892.618114905199036 6890821.953110418282449,1478886.105291939806193 6890826.198667988181114,1478877.884952347259969 6890822.336283389478922)",210,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478892.618114905199036 6890821.953110418282449,1478928.056082863127813 6890850.737115069292486)",211,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479085.175604299176484 6891455.347645132802427,1479072.933736484264955 6891457.646864391863346,1479028.836886418517679 6891467.809421390295029,1478969.717622337630019 6891487.352836342528462,1478948.182385357562453 6891496.258518047630787,1478911.130207701120526 6891514.514429982751608,1478900.287943673552945 6891515.526093818247318,1478903.68431553686969 6891509.823990211822093,1478916.467363483039662 6891497.224194971844554,1478942.947867186041549 6891484.103261307813227,1478965.024284297600389 6891474.477169387042522,1478945.691090611740947 6891413.149424462579191,1478898.029916227562353 6891434.746669919230044,1478844.462413848377764 6891469.14297055080533,1478793.47951313527301 6891520.001941416412592,1478771.944276155205444 6891540.035988440737128,1478758.237489708466455 6891558.935789356008172,1478748.08569689001888 6891566.799223258160055,1478780.789772106800228 6891606.361762794665992)",212,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478965.024284297600389 6891474.477169387042522,1479027.586573694832623 6891454.795832606963813,1479057.939314550952986 6891448.388678853400052,1479088.058788104215637 6891445.828884401358664)",213,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478945.691090611740947 6891413.149424462579191,1479018.255881766555831 6891391.138380916789174,1479047.694214809220284 6891380.316817537881434)",214,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478991.019592018099502 6890132.409286628477275,1479002.59898070525378 6890131.244540799409151,1479038.382184260990471 6890132.45526344049722,1479064.209539529168978 6890130.202399942092597)",217,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479317.873730378691107 6890999.440786958672106,1479295.08818068052642 6891012.499620502814651,1479265.976421855157241 6891029.635539894923568,1479237.909700526855886 6891045.959146456792951)",219,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479265.976421855157241 6891029.635539894923568,1479332.858821619069204 6891062.006893378682435,1479344.43821030925028 6891037.498456098139286,1479352.322644991567358 6891022.952833535149693)",220,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479295.08818068052642 6891012.499620502814651,1479344.43821030925028 6891037.498456098139286)",221,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479352.742526129353791 6891350.626569028012455,1479161.827238515252247 6891268.591924785636365)",222,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479401.896611221367493 6891423.296597149223089,1479090.344807628775015 6891287.537070981226861)",223,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479465.690551959211007 6891463.594181259162724,1479453.709943517111242 6891455.914785820990801,1479425.409954888978973 6891447.760226246900856,1479401.896611221367493 6891423.296597149223089,1479373.596622593235224 6891386.126125248149037,1479360.179087595082819 6891365.494671508669853,1479352.742526129353791 6891350.626569028012455,1479336.908341917209327 6891318.483971345238388,1479321.559353690594435 6891301.699976419098675,1479307.162096040323377 6891284.670771724544466,1479300.210730554070324 6891269.067085674032569,1479294.696291621308774 6891260.682799293659627,1479263.55977264419198 6891258.99674641340971,1479232.815142731880769 6891257.326021636836231,1479201.156105006346479 6891259.012074161320925,1479161.827238515252247 6891268.591924785636365,1479090.344807628775015 6891287.537070981226861)",224,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479037.383800225798041 6892032.27303178049624,1479057.752700712764636 6891999.744479458779097,1479091.725750033278018 6891954.630875697359443,1479132.724810380022973 6891911.878190251998603,1479161.743262287694961 6891876.376312308013439,1479180.040749166859314 6891847.818568326532841,1479192.609191199066117 6891807.42708539031446,1479193.822181151015684 6891798.107181905768812,1479196.416113504674286 6891778.103149225004017,1479199.467249767621979 6891738.493778496980667,1479205.933419276727363 6891698.869274341501296,1479220.787880830932409 6891680.980829110369086,1479229.549400552175939 6891674.880065969191492,1479240.596939800772816 6891673.745753734372556,1479255.068842985900119 6891677.547233199700713,1479267.637285018106923 6891689.365553838200867,1479275.447074165800586 6891698.256130744703114)",225,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479229.549400552175939 6891674.880065969191492,1479216.271825936157256 6891656.777074966579676,1479171.10194629477337 6891595.187356659211218)",226,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479051.342515352414921 6892039.569746791385114,1479074.529284805525094 6892052.660928558558226)",227,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479558.661566364113241 6892730.994200934655964,1479535.32550584175624 6892695.871967596933246,1479509.208899124991149 6892661.945660936646163,1479484.967761487932876 6892632.250678585842252,1479458.813832005020231 6892615.448610161431134,1479373.167410765308887 6892570.024945888668299,1479300.957185906590894 6892532.435256485827267,1479252.782823463901877 6892527.974175323732197,1479204.001966048264876 6892521.336213783361018,1479171.325882901670411 6892514.928209916688502,1479142.64333590422757 6892504.442396434023976,1479120.930815778905526 6892491.151187589392066,1479098.593139297328889 6892472.555796183645725,1479066.934101571794599 6892412.370182883925736,1479042.375720410142094 6892360.26384799182415,1479040.780172086087987 6892331.70438495837152,1479040.462928561726585 6892294.161799130029976,1479080.986123618902639 6892292.26091337017715,1479193.756866306532174 6892289.164310114458203,1479216.402455622563139 6892282.403908143751323,1479220.871857058489695 6892272.516255625523627,1479224.174922001315281 6892272.577574365772307,1479229.232157027581707 6892272.286310367286205,1479219.024380057584494 6892224.105258090421557,1479209.292468371335417 6892223.185482617467642,1479204.58046894823201 6892214.079711130820215,1479197.18123024282977 6892205.249881953001022,1479179.490238342434168 6892197.692414339631796,1479135.346734812250361 6892196.512039718218148,1479051.137240131385624 6892183.788532035425305,1479045.072290376992896 6892170.589830297976732,1479049.149802750907838 6892124.877421021461487,1479058.424510530428961 6892087.581070398911834,1479071.254211938474327 6892057.964856051839888,1479074.529284805525094 6892052.660928558558226,1479095.532672341447324 6892018.691348779946566,1479112.467878199182451 6891998.625450547784567,1479173.910484564956278 6891937.309035980142653,1479213.509941124590114 6891907.87732311245054,1479228.280426451237872 6891875.471905553713441,1479240.065090362215415 6891839.295718602836132,1479248.854602162260562 6891812.393617324531078,1479261.460366960382089 6891762.237917317077518,1479267.515986024634913 6891728.959353854879737,1479271.630821167491376 6891712.113187463954091,1479275.447074165800586 6891698.256130744703114,1479285.748158059082925 6891687.204225420951843,1479299.772188033210114 6891680.474986762739718,1479310.493153058923781 6891678.712203078903258,1479332.560239477548748 6891680.720243656076491,1479334.09980364702642 6891680.858200660906732)",228,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479414.754304702393711 6890467.663866545073688,1479442.774372574873269 6890432.367605943232775,1479416.368514406494796 6890410.742400817573071)",229,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479416.368514406494796 6890410.742400817573071,1479439.378000711556524 6890381.009754501283169)",230,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479051.137240131385624 6892183.788532035425305,1479170.150215718429536 6892218.908528059720993)",231,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479506.027133178431541 6892443.306083716452122,1479501.464424824807793 6892426.182480680756271,1479502.845367229077965 6892406.974041910842061,1479509.358190197264776 6892389.145340526476502,1479520.33108390844427 6892376.789445140399039,1479537.816800587577745 6892362.747284359298646,1479546.046470873057842 6892354.515155650675297,1479550.012014943640679 6892345.179288049228489,1479549.91870802314952 6892327.672649290412664,1479550.151975322980434 6892285.929740659892559,1479551.467602882767096 6892272.914827428758144)",232,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478902.919198798481375 6890060.471222716383636,1478914.64787855790928 6890058.708794203586876,1478926.861754297045991 6890049.774053867906332,1478938.058584614889696 6890042.172635945491493,1478948.424983350094408 6890035.276194448582828)",233,path,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479491.368616155348718 6890886.081193597055972,1479515.021920202299953 6890883.996716304682195,1479588.379820165457204 6890877.528709341771901,1479587.465412357822061 6890868.70034805405885,1479683.07701257779263 6890859.764707515016198)",234,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479098.593139297328889 6892472.555796183645725,1479020.635208208812401 6892437.128092028200626,1478995.227734078653157 6892424.526843289844692,1478961.786534196697176 6892387.259762216359377,1478945.541799542261288 6892336.609921579249203,1478949.302068391814828 6892240.109368146397173)",237,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479433.219744036672637 6891903.615865284577012,1479430.597819601651281 6891902.512178732082248,1479418.225322103127837 6891896.365260567516088,1479414.045172115787864 6891896.319273664616048,1479410.387540879659355 6891897.668222876265645,1479407.756285757524893 6891900.350793006829917,1479391.679503558436409 6891935.208957064896822,1479391.408913492690772 6891939.347799245268106,1479394.180128997191787 6891944.268425508402288,1479406.673925491981208 6891951.089859411120415,1479410.060966662364081 6891952.4388178139925)",238,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479406.673925491981208 6891951.089859411120415,1479430.597819601651281 6891902.512178732082248)",239,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479452.32900111284107 6891899.875594805926085,1479453.635297982487828 6891897.116379988379776)",240,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479410.060966662364081 6891952.4388178139925,1479414.446391870733351 6891954.676862930878997)",241,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479419.643587276339531 6891968.243108676746488,1479421.313781131990254 6891964.763402775861323)",242,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479437.483870248775929 6891905.623962035402656,1479433.219744036672637 6891903.615865284577012)",243,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479414.446391870733351 6891954.676862930878997,1479424.038343177642673 6891959.060980518348515)",244,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479447.374403697205707 6891910.237987771630287,1479437.483870248775929 6891905.623962035402656)",245,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479421.313781131990254 6891964.763402775861323,1479424.038343177642673 6891959.060980518348515,1479447.374403697205707 6891910.237987771630287,1479452.32900111284107 6891899.875594805926085)",246,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479450.229595429031178 6891990.2404032535851,1479444.976415869081393 6891987.649777974933386,1479416.667096548015252 6891974.466727374121547,1479419.643587276339531 6891968.243108676746488)",247,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479453.635297982487828 6891897.116379988379776,1479455.45478290761821 6891893.330125654116273,1479482.747056807857007 6891906.22179246135056,1479488.485432347515598 6891908.93502342607826)",248,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479571.146032168995589 6890409.056526175700128,1479584.125024646287784 6890393.883670332841575)",249,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479124.859037083573639 6890282.417699187062681,1479141.76625086273998 6890264.731641499325633,1479190.089904377469793 6890264.731641499325633,1479210.813371154945344 6890280.333378406241536,1479221.870241096476093 6890288.900553298182786)",250,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478931.471116109518334 6891338.793418453074992,1478931.601745795924217 6891332.723570773378015)",251,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479038.970017851097509 6891272.239934901706874,1479061.484977483516559 6891259.410595729015768)",253,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479300.518643385730684 6891457.738833180628717,1479254.406363858142868 6891450.381333781406283,1479213.62190942815505 6891446.33471198566258,1479156.919294558465481 6891446.212087113410234,1479127.704898122698069 6891446.917180147953331,1479088.058788104215637 6891445.828884401358664,1479094.702240758575499 6891400.411828546784818,1479047.694214809220284 6891380.316817537881434,1478962.775587541749701 6891344.388105345889926,1478953.202297617914155 6891347.637623907066882)",254,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479263.55977264419198 6891258.99674641340971,1479214.013798487139866 6891247.240369359962642,1479177.754729644861072 6891220.830734963528812,1479149.939936996437609 6891199.249391805380583,1479148.055137223796919 6891171.123225434683263,1479200.400318960892037 6891168.364260731264949,1479207.734242819016799 6891139.14994818624109,1478898.141884530894458 6890996.773844690993428,1478872.053269889904186 6891032.103237913921475,1478847.513550108298659 6891072.260914628393948,1478835.010422920808196 6891095.865138819441199,1478857.982586456928402 6891105.383485198020935,1478904.402778816176578 6891101.950135124847293,1478961.124055066145957 6891130.857762338593602,1478959.257916682166979 6891138.521519755013287,1478997.224502151831985 6891155.550414878875017,1479010.977942057419568 6891164.624332321807742,1479041.769225431373343 6891166.509623884223402,1479062.08214176655747 6891176.656485269777477,1479078.64411994535476 6891173.376380642876029,1479096.782985062338412 6891175.09307074919343,1479103.650374323595315 6891176.487881724722683,1479123.655377824557945 6891171.812966760247946,1479148.055137223796919 6891171.123225434683263)",255,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479349.467453256715089 6892329.95678826700896,1479339.194361444795504 6892336.594591772183776,1479340.202076172921807 6892354.714443584904075,1479352.994454809231684 6892359.236747993156314)",256,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479593.00784336659126 6892275.26026960555464,1479592.009459325810894 6892313.845190985128284,1479549.91870802314952 6892327.672649290412664)",257,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479592.009459325810894 6892313.845190985128284,1479591.281665356131271 6892346.405673980712891,1479550.012014943640679 6892345.179288049228489)",258,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479007.749522649217397 6892003.975329895503819,1479015.932539475848898 6891989.627237430773675)",259,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478994.0800589711871 6892008.788691441528499,1478986.037002523662522 6892003.868025694973767,1479006.424564396496862 6891979.418033379130065,1479038.531475333031267 6891954.814824637956917,1479057.276835423195735 6891941.953738008625805,1479083.216158994706348 6891928.663459150120616,1479132.724810380022973 6891911.878190251998603,1479185.1912911105901 6891905.991857678629458,1479213.509941124590114 6891907.87732311245054)",261,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479344.391556847607717 6891681.793242639862001,1479346.481631841277704 6891681.977185339666903,1479371.403909988934174 6891684.245812286622822)",262,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478964.949638760183007 6892198.842130050994456,1478992.540494801709428 6892200.957607388496399,1479023.751659313682467 6892197.355164431966841)",263,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479332.560239477548748 6891680.720243656076491,1479337.094955755397677 6891635.807700280100107,1479335.769997502909973 6891634.887992111966014,1479334.062480878317729 6891633.339816934429109,1479333.260041374014691 6891630.994562047533691,1479316.203536522807553 6891629.262446126900613)",264,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478922.522982550086454 6892195.055733603425324,1478944.244833362754434 6892195.132381286472082,1478964.949638760183007 6892198.842130050994456)",265,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478944.244833362754434 6892195.132381286472082,1478948.518290270585567 6892151.075413181446493,1478957.111857536714524 6892107.018686534836888,1478968.99915905832313 6892072.619656547904015,1478994.415963881416246 6892026.73918299935758)",266,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479034.351325348485261 6892030.126940387301147,1479031.645424688700587 6892028.762639727443457,1479025.907049149041995 6892025.604821115732193,1478994.0800589711871 6892008.788691441528499)",267,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479023.751659313682467 6892197.355164431966841,1479051.137240131385624 6892183.788532035425305)",269,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479015.932539475848898 6891989.627237430773675,1479030.637709960807115 6891967.752577354200184,1479038.531475333031267 6891954.814824637956917)",270,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478986.037002523662522 6892003.868025694973767,1478968.961836289614439 6891994.609211077913642)",271,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479175.076821058290079 6892272.807519636116922,1479168.890572307631373 6892273.788619532249868)",272,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478966.694478150689974 6892266.047131421044469,1478949.302068391814828 6892240.109368146397173)",273,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479176.037882324540988 6892219.889621376991272,1479174.98351413779892 6892237.625969672575593)",274,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479175.095482441131026 6892253.338843335397542,1479175.076821058290079 6892272.807519636116922)",275,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479017.65871748351492 6892284.044186560437083,1478966.694478150689974 6892266.047131421044469)",276,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479168.890572307631373 6892273.788619532249868,1479040.462928561726585 6892294.161799130029976)",277,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479170.150215718429536 6892218.908528059720993,1479176.037882324540988 6892219.889621376991272)",278,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479176.065874400548637 6891773.136638476513326,1479193.822181151015684 6891798.107181905768812)",279,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479380.146768330130726 6891605.043519286438823,1479379.689564426196739 6891608.752995756454766)",280,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479319.525262851500884 6891600.613609550520778,1479323.005610939580947 6891573.329098201356828)",281,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479319.264003475895151 6891603.648633949458599,1479319.525262851500884 6891600.613609550520778)",282,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479379.689564426196739 6891608.752995756454766,1479375.994610418565571 6891635.010619860142469,1479371.403909988934174 6891684.245812286622822)",283,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479112.365240588784218 6891776.922836208716035,1479157.544450920075178 6891796.972852283157408,1479167.155063610058278 6891794.903467575088143,1479173.182690595509484 6891787.484344554133713,1479176.065874400548637 6891773.136638476513326,1479180.367323384154588 6891714.09057914186269,1479184.668772364966571 6891697.750287312082946,1479189.819314308930188 6891682.835584651678801,1479216.271825936157256 6891656.777074966579676)",284,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479098.593139297328889 6892472.555796183645725,1479118.924717012792826 6892513.39519539475441,1479148.503010437591001 6892548.945877370424569,1479229.493416403187439 6892660.412618377245963,1479234.933209798531607 6892661.685043681412935)",286,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479070.41444966266863 6892513.732458561658859,1479068.343036052072421 6892505.88342846557498)",287,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1479074.566607571439818 6892534.336199035868049,1479070.41444966266863 6892513.732458561658859)",288,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477868.43471504189074 6891004.698037818074226,1477945.356939326506108 6891019.718773512169719,1478003.72041735611856 6891029.390302868559957,1478039.289015 6891037.053963554091752,1478070.117621140554547 6891046.449621527455747,1478085.634561822284013 6891052.51925307046622,1478099.238710658624768 6891059.35525771882385,1478109.306527255102992 6891066.405851566232741,1478116.089940288802609 6891073.793654355220497,1478123.5731552161742 6891084.292929342016578,1478128.854326849337667 6891095.068111938424408,1478131.298968139104545 6891104.89300652872771,1478132.073415567399934 6891115.208392390981317,1478133.986207413021475 6891124.680779177695513,1478132.25069871544838 6891137.371955673210323,1478130.169954414712265 6891151.105425273999572,1478121.949614822166041 6891169.866363619454205,1478117.396237158449367 6891177.591468608006835,1478104.967755505582318 6891189.056519051082432,1478093.948208335554227 6891197.226143856532872,1478082.126221658429131 6891203.740390969440341,1478067.458373942412436 6891210.99037102330476,1478049.823366191005334 6891215.036874360404909,1478034.912920482223853 6891216.998816108331084,1478020.459678680170327 6891214.347129329107702,1478000.622627634555101 6891210.745128460228443,1477978.45290360529907 6891202.43754112534225,1477942.063205073587596 6891174.296036006882787,1477908.155470594996586 6891145.7101308433339,1477869.451760460156947 6891113.706299720332026,1477831.671788828447461 6891088.967793419025838,1477825.746799453394488 6891083.940398719161749)",291,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478121.949614822166041 6891169.866363619454205,1478201.437779386993498 6891217.397335584275424)",292,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477908.155470594996586 6891145.7101308433339,1478070.117621140554547 6891046.449621527455747)",293,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477942.063205073587596 6891174.296036006882787,1478116.089940288802609 6891073.793654355220497)",294,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477978.45290360529907 6891202.43754112534225,1478132.073415567399934 6891115.208392390981317)",295,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478502.968419844750315 6890668.378852861002088,1478491.659621223341674 6890662.079612115398049,1478357.717538550263271 6890547.713233261369169,1478130.104639569995925 6890358.679689854383469,1477868.845265486976132 6890131.995495325885713,1477851.947382397949696 6890112.623956055380404,1477704.587764723692089 6890002.725070449523628,1477682.39004861866124 6889990.909228938631713,1477667.638224675087258 6889991.169759628362954,1477650.339121833909303 6890011.138695799745619,1477637.518751118797809 6890024.67101151868701,1477629.102466995362192 6890037.329800856299698,1477626.90975439385511 6890045.283699262887239,1477621.115394705208018 6890055.337192909792066,1477617.560401076916605 6890072.379119392484426)",297,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478249.052300312556326 6891837.149678730405867,1478207.735996438423172 6891845.090029121376574)",298,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478305.754915182245895 6892111.878097912296653,1478297.767842886503786 6892113.47235338576138,1478285.376684002345428 6892102.711135057732463,1478249.565488368039951 6891961.345014753751457,1478246.71029663621448 6891935.132311857305467,1478251.254343609558418 6891925.459692790172994,1478266.19278139132075 6891904.336327421478927)",299,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478245.217385928379372 6892482.137093056924641,1478249.798755665076897 6892400.458819705992937,1478255.873036114964634 6892389.436608762480319,1478265.017114208079875 6892376.636146306991577,1478275.60744954738766 6892369.308465602807701,1478290.592540793586522 6892365.292040934786201,1478302.666456150589511 6892364.924124269746244,1478313.993916155071929 6892364.556207627058029,1478330.81715370924212 6892374.796560563147068,1478343.973429331788793 6892389.068690993823111,1478352.007155086379498 6892407.709879103116691,1478350.187670158455148 6892440.240082282572985,1478345.708938032155856 6892489.756148488260806)",300,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477998.047356663970277 6891324.661103413440287,1478020.413025221321732 6891332.049143535085022,1478049.879350342787802 6891330.792256562970579,1478086.632945860503241 6891324.339218001812696,1478122.32284249830991 6891312.122909786179662,1478158.218014360172674 6891292.917132769711316,1478184.875801208429039 6891269.342985554598272)",301,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1477965.529895279556513 6891284.946672138758004,1477998.047356663970277 6891324.661103413440287,1478031.899106987984851 6891366.506316591985524,1478044.019675809424371 6891373.311932296492159,1478056.233551548561081 6891375.8870316343382,1478074.745644338661805 6891370.552898212336004,1478103.446852721972391 6891365.862542429938912,1478147.40374241117388 6891349.476974621415138,1478163.508516683243215 6891340.49481596890837,1478174.164166870061308 6891331.252093238756061,1478176.888728912686929 6891309.486519484780729,1478184.875801208429039 6891269.342985554598272,1478190.875436118105426 6891248.466587806120515)",302,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478298.215716100297868 6890783.32936832588166,1478344.18803524854593 6890790.609622975811362,1478360.563399586360902 6890795.406931225210428,1478380.503088242607191 6890801.30777757242322,1478412.759290251415223 6890816.649998326785862,1478421.474156513577327 6890821.386014446616173)",303,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477950.162245669867843 6891274.998935245908797,1477965.529895279556513 6891284.946672138758004,1478000.743926630821079 6891290.280748765915632,1478023.613452556543052 6891292.687215525656939,1478047.994550570147112 6891291.46099033113569,1478072.963482179446146 6891288.364772556349635,1478095.851669488241896 6891280.823494642972946,1478111.704515080433339 6891274.615740698762238,1478129.106255532009527 6891265.219816066324711,1478142.495798451593146 6891260.667471537366509,1478156.566481890156865 6891257.203399649821222,1478178.49360792664811 6891255.563330735079944,1478190.875436118105426 6891248.466587806120515,1478201.437779386993498 6891217.397335584275424)",304,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478600.64210298541002 6890542.839440878480673,1478535.252613929333165 6890495.358435696922243,1478534.422182349255309 6890488.415626615285873,1478532.957263714633882 6890483.311976070515811,1478532.593366731191054 6890467.096795568242669,1478530.577937269350514 6890451.785894272848964,1478523.999799459474161 6890439.785478501580656,1478517.244378498755395 6890430.773683805018663,1478478.139448614558205 6890386.052035748027265,1478464.246048329630867 6890364.151086367666721,1478458.572987634688616 6890346.725391098298132,1478458.750270782737061 6890330.817005697637796)",305,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478340.343790168641135 6890286.463735183700919,1478368.121260051382706 6890284.593975868076086,1478383.470248277997598 6890287.291333702392876,1478397.167704032035545 6890294.509835544042289,1478446.153836674522609 6890326.924207131378353,1478458.750270782737061 6890330.817005697637796,1478503.892158345319331 6890335.016325954347849,1478531.492345079779625 6890335.338171758688986,1478549.220659751677886 6890332.02775839343667,1478568.049996066605672 6890323.322603833861649,1478581.206271691946313 6890309.513918485492468,1478611.904248145408928 6890269.283422131091356,1478624.873909929767251 6890255.781346369534731,1478640.418842690298334 6890243.183516338467598,1478661.786127212457359 6890232.056982149370015,1478685.187502576736733 6890226.662304446101189,1478711.509384517557919 6890225.466893401928246,1478734.892098498763517 6890232.961204051040113,1478757.192452211398631 6890244.976636931300163,1478770.059476385358721 6890257.712402357719839,1478779.343514857813716 6890266.785306516103446)",306,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478306.762629910372198 6890306.402752917259932,1478312.267738147405908 6890297.314478134736419,1478325.470667231595144 6890295.873841928318143,1478340.343790168641135 6890286.463735183700919)",307,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478502.221964489435777 6891308.628160036168993,1478503.920150421094149 6891293.882785264402628,1478500.98098246450536 6891258.506258369423449,1478495.905086055397987 6891238.197014091536403,1478490.232025357428938 6891222.68538433779031,1478483.513927168212831 6891211.634132778272033,1478480.528105752775446 6891201.47189961373806,1478468.724780458724126 6891168.793432957492769,1478460.224520107498392 6891146.093319251202047,1478452.750635873060673 6891121.906502928584814,1478444.203722060192376 6891086.377458564005792,1478440.9659719618503 6891055.921927305869758,1478442.906755883479491 6891021.588703794404864,1478448.719776954967529 6890994.842611184343696,1478458.880900469142944 6890968.127261942252517,1478497.388666070066392 6890895.277423369698226,1478576.074391131056473 6890758.086094295606017,1478645.634699478745461 6890649.848983596079051,1478661.468883685301989 6890629.219419246539474,1478670.46367070893757 6890619.165207961574197,1478673.300201055128127 6890616.375779623165727,1478677.396374812116846 6890611.777822931297123)",308,cycleway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478340.343790168641135 6890286.463735183700919,1478296.209617334185168 6890250.693169337697327)",309,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478828.898819707566872 6890880.302901268936694,1478825.987643823958933 6890825.386340913362801,1478839.097265987657011 6890775.359412892721593,1478842.60560615430586 6890756.859950644895434)",310,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478828.898819707566872 6890880.302901268936694,1478877.884952347259969 6890822.336283389478922)",311,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478454.476813877699897 6891793.539206840097904,1478436.776491281576455 6891737.267485307529569,1478426.895288528874516 6891709.308051269501448)",314,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478656.850191182689741 6891252.574420961551368,1478692.222844290314242 6891238.886761170811951,1478723.359363270457834 6891253.156875086948276)",316,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478466.158840178279206 6891481.390173728577793,1478483.747194468043745 6891486.157237827777863,1478497.845869976794347 6891492.978283021599054,1478514.510485763195902 6891508.551747220568359,1478523.122714417753741 6891524.799684935249388,1478528.851759261917323 6891543.914046152494848,1478534.506158574018627 6891569.711608147248626,1478542.959765463601798 6891648.515012176707387)",319,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478186.172767387935892 6892076.850545356050134,1478159.738917143782601 6891950.645316352136433,1478153.524676317116246 6891922.393888857215643)",324,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1477992.150359361898154 6891880.024598241783679,1478001.098492924124002 6891901.362505401484668,1478010.111941330833361 6891922.884417406283319,1478034.241110664559528 6892064.219202788546681)",325,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478153.524676317116246 6891922.393888857215643,1478129.796726738568395 6891820.855123235844076)",326,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478475.106973737478256 6892349.655597596429288,1478483.35530540603213 6892391.046249195933342)",327,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478523.77586285257712 6892467.619516485370696,1478535.821786136599258 6892493.496693428605795,1478543.360985215753317 6892518.883388736285269,1478545.749642353737727 6892539.471812217496336,1478544.443345481297001 6892557.070893596857786,1478539.078197620576248 6892576.92356213927269)",328,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478418.469673712505028 6892336.287995646707714,1478428.005640867631882 6892332.746811239980161,1478435.218265729257837 6892330.96855472587049,1478454.252877273596823 6892323.31899023335427,1478520.995316658169031 6892314.458381541073322,1478516.460600377526134 6892285.055947243236005,1478513.745369025040418 6892253.890710676088929,1478514.221234314609319 6892241.45837504696101)",331,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478129.796726738568395 6891820.855123235844076,1478087.482038826216012 6891839.403020612895489,1478076.089263980044052 6891843.971021738834679,1477992.150359361898154 6891880.024598241783679)",332,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478010.111941330833361 6891922.884417406283319,1478076.369184735696763 6891897.95947330724448,1478085.34531037369743 6891892.333743230439723,1478092.147384793264791 6891886.891964479349554,1478098.258988006506115 6891878.798283461481333,1478103.689450711710379 6891867.148302355781198,1478106.675272129941732 6891858.380169824697077,1478109.614440086763352 6891846.147721174173057)",333,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478054.423397313337773 6892200.32909594848752,1478083.927045200718567 6892187.697559367865324,1478108.522749131079763 6892177.21217271219939)",336,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478515.340917346067727 6892220.410827253945172,1478514.398517462657765 6892233.394996258430183,1478514.221234314609319 6892241.45837504696101)",337,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478550.844200145918876 6890545.552211744710803,1478554.819074909435585 6890541.383434292860329,1478590.24771217443049 6890558.411064649000764)",339,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478292.038798042573035 6890286.525038770399988,1478306.762629910372198 6890306.402752917259932,1478342.517841390101239 6890336.334361232817173,1478380.587064470164478 6890360.65674867015332,1478421.67010104469955 6890401.592703618109226,1478455.680473136715591 6890423.769625853747129,1478497.174060156103224 6890463.020016191527247,1478511.655294034164399 6890478.330938881263137,1478535.252613929333165 6890495.358435696922243)",340,path,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478535.252613929333165 6890495.358435696922243,1478532.378760814433917 6890516.49342564959079,1478534.599465494509786 6890529.290926621295512,1478543.332993139745668 6890539.498289315961301,1478550.844200145918876 6890545.552211744710803)",341,path,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478529.290301782777533 6892221.10065860580653,1478531.958879676647484 6892233.824225340969861,1478532.938602331560105 6892274.263839844614267,1478537.202728543663397 6892321.908650481142104,1478524.886215194128454 6892336.410634094849229,1478436.459247756982222 6892347.892667171545327,1478423.265649365726858 6892349.165043009445071)",342,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478454.252877273596823 6892323.31899023335427,1478448.91572148585692 6892291.325800381600857,1478445.295413015875965 6892261.908121032640338,1478513.745369025040418 6892253.890710676088929)",343,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478448.91572148585692 6892291.325800381600857,1478516.460600377526134 6892285.055947243236005)",344,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478344.18803524854593 6890790.609622975811362,1478348.937357440358028 6890749.870935382321477,1478348.666767374845222 6890739.923860553652048,1478342.881738376105204 6890733.302702005021274,1478318.04343645600602 6890728.520757546648383)",345,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478684.179787848610431 6890636.959331315010786,1478689.386313944123685 6890639.28896967228502,1478714.775126691674814 6890647.488689003512263,1478731.701001853682101 6890650.768579075112939,1478743.644287527073175 6890644.500005290843546)",347,path,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478431.579295878997073 6892449.652710394002497,1478423.079035527771339 6892454.803599508479238,1478359.453047247836366 6892490.139400960877538,1478345.708938032155856 6892489.756148488260806)",348,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478875.6642476671841 6890806.963398001156747,1478839.097265987657011 6890775.359412892721593)",349,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478600.660764371277764 6890704.365850842557847,1478605.186149956192821 6890712.81086390838027,1478611.820271917851642 6890722.313430053181946,1478614.516841887496412 6890727.034063856117427,1478654.694801344303414 6890781.137629794888198,1478763.126772282179445 6890832.75859528966248)",350,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478614.516841887496412 6890727.034063856117427,1478637.041132210055366 6890686.939418164081872,1478692.633394738193601 6890709.071147411130369)",351,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478492.303438970819116 6892407.924498297274113,1478509.257306208834052 6892408.369066645391285,1478526.360464518889785 6892406.008255694061518,1478540.33784103137441 6892401.240646092221141,1478552.645023687975481 6892388.946051742881536,1478560.342844535131007 6892378.199794524349272,1478570.681251191534102 6892353.135470101609826)",353,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478953.202297617914155 6891347.637623907066882,1478931.471116109518334 6891338.793418453074992,1478901.864830611506477 6891359.991937587969005,1478864.206157973501831 6891384.041518303565681,1478830.662320480914786 6891409.348070020787418,1478812.290188067127019 6891426.132289689965546,1478755.130369296530262 6891480.654421320185065,1478703.251722156070173 6891549.692815471440554,1478689.134385264245793 6891571.535681317560375,1478657.522001 6891627.055148504674435,1478637.796918255276978 6891670.128218493424356,1478618.799629485467449 6891717.401561643928289,1478619.667383834253997 6891757.486018202267587,1478668.280288797570392 6891771.649751598015428,1478672.507092240964994 6891756.075777715072036,1478697.168111018836498 6891710.1971107237041,1478713.935364418663085 6891684.552383543923497,1478733.277888791868463 6891659.076351834461093,1478767.045662891119719 6891621.092382272705436,1478780.789772106800228 6891606.361762794665992,1478810.078814079985023 6891579.583067904226482,1478855.052749193273485 6891541.890711458399892,1478900.287943673552945 6891515.526093818247318)",354,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478668.280288797570392 6891771.649751598015428,1478660.134594739647582 6891790.028919039294124,1478649.525598014704883 6891813.849854120984674,1478640.558803069638088 6891829.010061269626021,1478646.213202378945425 6891861.185358035378158,1478648.508552593644708 6891887.934333082288504,1478650.589296894380823 6891930.487613770179451,1478650.160085063660517 6891985.994230893440545,1478651.48504331917502 6892023.887949385680258)",355,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478782.749217414064333 6891635.179233017377555,1478773.446517555741593 6891671.001945073716342,1478739.286854397272691 6891804.361326470971107,1478712.246509179938585 6891906.574359148740768,1478678.739994450472295 6892037.714908943511546,1478666.423481103731319 6892094.096039024181664)",356,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478755.130369296530262 6891480.654421320185065,1478793.47951313527301 6891520.001941416412592)",357,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478773.446517555741593 6891671.001945073716342,1478818.709704117616639 6891683.065513053908944)",358,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478767.045662891119719 6891621.092382272705436,1478782.749217414064333 6891635.179233017377555)",359,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477846.171684092143551 6889939.00248887296766,1478169.946694119600579 6890214.401686768047512,1478195.494128623511642 6890209.911240221001208)",360,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478245.217385928379372 6892482.137093056924641,1478237.435588859487325 6892526.349177302792668,1478234.711026813834906 6892557.270186549983919,1478232.518314209766686 6892588.957829094491899,1478340.996938606491312 6892596.776279703713953)",361,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478345.708938032155856 6892489.756148488260806,1478245.217385928379372 6892482.137093056924641)",362,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478036.723074720241129 6891729.495856549590826,1478044.626170785399154 6891741.988715119659901)",363,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478321.449139009229839 6892126.425690860487521,1478312.127777771092951 6892118.009851474314928,1478305.754915182245895 6892111.878097912296653,1478300.501735622063279 6892101.944667064584792,1478292.346710877027363 6892075.516895382665098,1478267.685692099155858 6891978.835526627488434)",364,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478253.503040365641937 6891040.058120541274548,1478253.16713545517996 6891093.259474310092628,1478229.616469018859789 6891186.251565363258123,1478201.437779386993498 6891217.397335584275424)",365,track,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478663.092424082104117 6890614.521270107477903,1478670.46367070893757 6890619.165207961574197)",366,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478362.765442883595824 6892306.640205512754619,1478358.342694909079 6892292.506188929080963)",367,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478318.136743376497179 6892116.154995526187122,1478312.127777771092951 6892118.009851474314928,1478290.126006194157526 6892125.138020876795053)",368,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478439.062510809162632 6892244.340345094911754,1478418.786917239660397 6892247.360282902605832)",369,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478423.918797800550237 6892177.089536693878472,1478404.315014054765925 6892179.250996824353933)",370,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477934.290738694835454 6891718.244636114686728,1477948.034847910283133 6891709.921195707283914,1477965.940445724641904 6891696.585314678959548,1477976.76404836634174 6891682.437042098492384,1477981.336087410105392 6891672.028957143425941,1477988.007532143266872 6891667.445725190453231,1477996.741059794323519 6891667.445725190453231,1478005.073367684613913 6891672.85669831186533,1478008.824305844027549 6891681.593971388414502,1478008.824305844027549 6891692.845140528865159,1478014.64665760868229 6891701.582435327582061,1478025.890141385374591 6891713.247505113482475,1478032.132374287815765 6891720.329329716973007,1478036.723074720241129 6891729.495856549590826,1478027.560335241258144 6891739.060939160175622,1478017.147283044410869 6891743.644211953505874,1478005.073367684613913 6891745.315037799067795,1477993.008783017750829 6891739.474813184700906,1477976.353497921489179 6891744.042757529765368,1477985.926787842530757 6891771.95632619317621)",373,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478002.040892810327932 6891541.829398297704756,1478017.091298892628402 6891529.934653213247657,1478018.332280920585617 6891528.96897236444056,1478035.687367916340008 6891514.468445266596973,1478046.73490715934895 6891504.82698876876384,1478070.192266677971929 6891511.939286240376532,1478108.914638193091378 6891556.621212807483971)",374,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478035.687367916340008 6891514.468445266596973,1478084.262950108153746 6891571.137144286185503)",375,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478215.200549985514954 6891534.686417824588716,1478178.904158371733502 6891520.431132415309548)",377,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478284.536921729333699 6891783.682813100516796,1478291.20836645970121 6891823.66029835306108)",379,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478265.091759745730087 6891789.477083542384207,1478284.536921729333699 6891783.682813100516796)",380,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478207.735996438423172 6891845.090029121376574,1478215.228542061522603 6891874.245591463521123)",381,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478052.874502453953028 6891606.26979230903089,1478077.890087522100657 6891607.710663352161646,1478084.682831245940179 6891608.109202195890248,1478111.340618094196543 6891607.894604350440204,1478134.574041006155312 6891600.184414274990559,1478181.7500194106251 6891550.612513891421258)",382,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478201.437779386993498 6891217.397335584275424,1478240.664008267689496 6891229.552189072594047)",383,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478641.370573266642168 6892632.0667141424492,1478562.768824436236173 6892499.644068215973675,1478577.007460321532562 6892490.660624356009066,1478665.649033669615164 6892636.067941721528769,1478671.144811219535768 6892649.037451725453138,1478668.858791697770357 6892665.502320799045265)",384,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478577.50198699417524 6892657.315873299725354,1478578.043167128227651 6892638.551463293842971,1478576.540925727691501 6892624.723470226861537,1478569.626883004792035 6892561.378688556142151,1478562.768824436236173 6892499.644068215973675)",385,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478354.479788446333259 6892046.069347251206636,1478380.7830090012867 6892040.244233387522399)",389,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478279.339726323960349 6892178.407874005846679,1478258.466968471417204 6892184.15644040890038)",394,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478330.751838867552578 6891513.839987489394844,1478314.572419055039063 6891526.363167470321059,1478304.653893533628434 6891544.619147759862244)",395,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478266.771284291520715 6891649.189465964213014,1478247.857971743447706 6891659.628178384155035,1478237.248975021298975 6891675.033351420424879)",396,path,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478502.221964489435777 6891308.628160036168993,1478500.943659695796669 6891361.524732173420489,1478492.462060733232647 6891398.051313592121005,1478467.679742961889133 6891433.934281352907419,1478439.631683016428724 6891460.022724987007678,1478405.05213871714659 6891485.467469537630677,1478373.747667287709191 6891508.950281143188477,1478352.874909435166046 6891537.000988053157926)",398,path,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478314.572419055039063 6891526.363167470321059,1478287.214830313343555 6891523.757363410666585)",399,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478034.241110664559528 6892064.219202788546681,1478039.344999152235687 6892078.598087023943663,1478054.283436933998019 6892089.251967732794583,1478158.106046056607738 6892095.843584448099136,1478176.534162622177973 6892091.444062924012542,1478186.172767387935892 6892076.850545356050134)",401,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478483.047392571577802 6891339.299239296466112,1478488.347225587582216 6891367.196074674837291,1478478.951218814589083 6891390.17271673399955,1478463.807505809003487 6891415.739864616654813,1478443.457266707671806 6891438.701317322440445,1478427.287177590886131 6891453.830160783603787,1478398.585969207808375 6891473.143619342707098,1478366.227129588602111 6891491.920637429691851,1478330.751838867552578 6891513.839987489394844,1478321.794374612625688 6891529.076270229183137,1478316.746470273472369 6891546.32058884575963)",405,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478057.465202880557626 6892224.90239691734314,1478093.024469834985211 6892209.925397932529449,1478146.34004353149794 6892186.425209088250995)",406,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478066.245383990462869 6892248.387368608266115,1478102.47646076255478 6892233.011756023392081,1478190.418232214171439 6892193.645416352897882)",407,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478266.323411077726632 6892206.675530795939267,1478258.466968471417204 6892184.15644040890038)",408,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478294.147534419083968 6892193.936677500605583,1478302.395866084843874 6892198.198289232328534,1478342.172605789732188 6892190.916759766638279,1478366.684333492536098 6892186.885094705037773,1478394.974991430528462 6892184.217758473940194,1478408.691108567407355 6892187.253003220073879,1478423.946789876557887 6892198.397573292255402)",409,cycleway,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478426.568714311579242 6892198.351584662683308,1478423.918797800550237 6892177.089536693878472)",410,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478290.126006194157526 6892125.138020876795053,1478295.649775819852948 6892148.408088837750256)",411,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478379.915254652500153 6892302.271228101104498,1478362.765442883595824 6892306.640205512754619)",412,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478435.358226108597592 6892223.185482617467642,1478439.258455337258056 6892236.184985723346472,1478439.062510809162632 6892244.340345094911754)",413,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478083.927045200718567 6892187.697559367865324,1478093.024469834985211 6892209.925397932529449,1478102.47646076255478 6892233.011756023392081,1478106.442004830343649 6892242.715404408052564,1478115.819350223056972 6892267.411472347564995)",414,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478258.466968471417204 6892184.15644040890038,1478255.191895604366437 6892172.015472995117307,1478188.91599081363529 6892168.2597481533885,1478009.794697806239128 6892157.437138617038727,1477988.875286494847387 6892163.798869086429477,1478001.574358213692904 6892194.411893087439239,1477860.755555583396927 6892253.814062429592013,1477862.994921646546572 6892261.662846405990422,1477820.493619899032637 6892278.142251771874726,1477774.316025526728481 6892297.166425926610827,1477770.956976432120427 6892291.555746189318597,1477604.488101679133251 6892361.919472146779299)",415,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478148.495433366857469 6891955.366671485826373,1478146.871892969822511 6891953.542511217296124)",416,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478159.738917143782601 6891950.645316352136433,1478148.495433366857469 6891955.366671485826373)",418,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478188.91599081363529 6892168.2597481533885,1478189.345202641561627 6892164.39671871624887)",419,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478136.794745683437213 6891958.003273610956967,1478133.109122371301055 6891956.638985191471875)",420,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478191.565907321637496 6892107.493896978907287,1478186.172767387935892 6892076.850545356050134)",421,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478146.871892969822511 6891953.542511217296124,1478136.794745683437213 6891958.003273610956967)",422,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478174.164166870061308 6891331.252093238756061,1478183.056316283298656 6891328.90692647267133,1478203.341240539913997 6891334.992099165916443)",423,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478742.832517329836264 6890551.621465139091015,1478732.372811674140394 6890553.414654522202909)",424,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478670.46367070893757 6890619.165207961574197,1478689.983478227397427 6890631.901566152460873,1478689.386313944123685 6890639.28896967228502)",425,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478744.437396341003478 6890562.901705839671195,1478742.832517329836264 6890551.621465139091015)",426,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478711.369424138218164 6890558.916836394928396,1478701.861449058866128 6890559.085426985286176,1478696.636261577485129 6890557.292236343957484)",427,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478942.192081137793139 6890130.999331175349653,1478929.446355960331857 6890151.520337683148682,1478917.950943500734866 6890148.838351035490632,1478911.232845311518759 6890147.79620789270848,1478903.646992770954967 6890148.57781523745507,1478894.801496819360182 6890155.535656509920955,1478878.239518640562892 6890175.397721116431057,1478845.694065183168277 6890222.738904757425189,1478818.970963490428403 6890267.812139219604433,1478806.281222464516759 6890296.624811832793057,1478797.323758209589869 6890324.257487938739359,1478792.845026083523408 6890342.311500664800406,1478787.022674316074699 6890377.546061621978879,1478784.932599325431511 6890395.446932943537831,1478779.85670291329734 6890416.060571308247745,1478771.794985085725784 6890435.172296620905399,1478761.046027981443331 6890455.172988045029342,1478735.965128068579361 6890488.553563161753118,1478725.962626316817477 6890506.531313234940171,1478713.720758504699916 6890536.540298494510353,1478704.016838894458488 6890553.276716859079897,1478701.861449058866128 6890559.085426985286176,1478700.424522500019521 6890562.96301154140383,1478697.149449632968754 6890575.208834332413971,1478693.557133241556585 6890582.672818078659475,1478677.396374812116846 6890611.777822931297123)",428,cycleway,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1478732.372811674140394 6890553.414654522202909,1478711.369424138218164 6890558.916836394928396)",429,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478677.396374812116846 6890611.777822931297123,1478687.081633039517328 6890607.195195377804339,1478692.78268580744043 6890602.581917437724769,1478698.707675185520202 6890595.562383316457272,1478713.562136739492416 6890570.764165580272675,1478718.376773776020855 6890564.786856304854155,1478726.401168837677687 6890560.541436778381467,1478737.066149717196822 6890558.610308059491217,1478744.437396341003478 6890562.901705839671195)",430,cycleway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478643.236711653415114 6892266.522351266816258,1478653.985668757697567 6892305.935037068091333)",431,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478772.90533742448315 6891164.83891832921654,1478775.947142997290939 6891159.152391017414629)",433,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478772.90533742448315 6891164.83891832921654,1478769.872862547170371 6891170.280208340846002)",434,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478723.359363270457834 6891253.156875086948276,1478731.085176187567413 6891239.193315446376801)",435,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478786.593462488148361 6891171.828294342383742,1478772.90533742448315 6891164.83891832921654)",436,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478668.765484777279198 6892171.203009921126068,1478681.837784175062552 6892208.622385010123253)",437,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478710.221749030752108 6891380.163537707179785,1478748.841482935240492 6891408.183139178901911,1478750.819589622784406 6891407.692642033100128,1478767.596173715544865 6891418.790147279389203,1478786.602793178288266 6891409.302085905335844,1478804.489729615394026 6891405.224828724749386,1478817.935256686527282 6891406.941568339243531,1478830.662320480914786 6891409.348070020787418)",438,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478666.796708779875189 6891437.429085585288703,1478710.221749030752108 6891380.163537707179785,1478724.544361143605784 6891353.262972820550203,1478732.932653188472614 6891356.113968593068421,1478780.79910279950127 6891268.009469541721046)",439,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478650.160085063660517 6891985.994230893440545,1478681.333926809718832 6891992.585762946866453,1478677.928224253468215 6892027.842886608093977,1478677.741610415279865 6892034.388465284369886,1478678.739994450472295 6892037.714908943511546)",440,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478168.15520126442425 6892347.494091650471091,1478160.606671495363116 6892351.387868744321167)",441,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478168.15520126442425 6892347.494091650471091,1478229.02863542875275 6892316.635208372958004,1478258.448307088343427 6892304.662668073549867,1478284.107709898613393 6892296.859831305220723,1478311.735888709081337 6892290.911897944286466,1478306.995897207176313 6892268.867791567929089,1478278.453310589306056 6892275.014994577504694,1478250.899777316488326 6892283.385009210556746,1478219.585975191090256 6892296.139333989471197,1478179.24006327916868 6892316.972463291138411,1478168.15520126442425 6892347.494091650471091)",442,service,0,0,-1,minorroads,0,0
|
||||
"LINESTRING (1478466.102856026496738 6890932.568242912180722,1478535.261944622267038 6890968.449133092537522,1478563.813861930277199 6890983.239892659708858)",443,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478535.261944622267038 6890968.449133092537522,1478551.870576259680092 6890937.856104321777821)",444,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478201.335141776595265 6891732.714873464778066,1478206.95221831719391 6891742.801134817302227,1478218.783535687020048 6891781.920006790198386,1478228.459463221486658 6891817.743372742086649,1478231.855835082009435 6891832.934244934469461,1478232.47166075091809 6891843.219907283782959,1478248.548442946979776 6891921.397502834908664,1478245.795888828579336 6891933.921317706815898,1478285.656604760792106 6892105.271138682030141,1478298.74756553885527 6892115.112597333267331)",445,cycleway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478294.147534419083968 6892193.936677500605583,1478283.305270394310355 6892188.264751724898815,1478292.328049491159618 6892184.800280102528632,1478299.932563415030017 6892178.361885491758585,1478303.198305588914081 6892173.471774934791028,1478305.997513171983883 6892166.573504913598299,1478306.128142858389765 6892160.089136488735676,1478302.031969098607078 6892141.893076196312904,1478301.080238522263244 6892130.840560940094292,1478301.957323563983664 6892124.540174165740609,1478298.74756553885527 6892115.112597333267331)",446,cycleway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478201.335141776595265 6891732.714873464778066,1478215.956336030969396 6891726.108225850388408,1478246.253092732280493 6891712.113187463954091)",447,cycleway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478001.098492924124002 6891901.362505401484668,1478060.320394612615928 6891876.636904109269381,1478078.972447784850374 6891865.860673903487623,1478082.060906813945621 6891858.579445453360677,1478079.243037850596011 6891849.841980019584298,1478076.089263980044052 6891843.971021738834679)",448,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1477667.806177130201831 6890740.184415513649583,1477692.989714653696865 6890752.445835038088262,1477718.966360991122201 6890765.105770315043628,1477746.939775401959196 6890778.731316149234772,1477774.325356219662353 6890792.081001562997699,1477799.844798653386533 6890804.495769085362554,1477826.689199339831248 6890817.569612891413271,1477853.21635650168173 6890830.490208609960973,1477870.412821729434654 6890838.874046353623271,1477884.222245789365843 6890845.602580599486828,1477896.118878001114354 6890851.39617495983839,1477908.761965568177402 6890857.557621157728136,1477917.271556612337008 6890861.695908572524786)",450,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478824.485402423189953 6889940.611638756468892,1478826.332879424327984 6889961.990374932065606,1478873.471535062883049 6890004.119678050279617,1478895.202716574305668 6890003.031577592715621)",451,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478826.332879424327984 6889961.990374932065606,1478844.583712844643742 6889961.729845183901489,1478857.460067708510906 6889965.62246694136411,1478866.314894350245595 6889971.446077805943787,1478871.148192772408947 6889978.863525116816163,1478873.051653927890584 6889986.694763084873557,1478873.471535062883049 6890004.119678050279617)",452,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477976.540111759677529 6891214.653682666830719,1477971.902757871197537 6891228.034747345373034)",453,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477938.965415351791307 6891251.148941309191287,1477930.74507576203905 6891262.215574943460524)",454,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477687.951141010504216 6891192.24466432724148,1477663.122169780312106 6891154.109624875709414)",455,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477691.104914883850142 6891132.620425897650421,1477676.838286919984967 6891143.564276114106178,1477663.122169780312106 6891154.109624875709414)",456,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477462.521623944398016 6891132.436495768837631,1477442.441974906018004 6891104.218598398379982,1477409.887190758716315 6891028.072153965942562,1477358.950943501666188 6890905.500577809289098,1477348.043364635203034 6890881.83560439478606,1477342.883491998305544 6890867.014377377927303)",457,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1477831.671788828447461 6891088.967793419025838,1477945.356939326506108 6891019.718773512169719)",458,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477869.451760460156947 6891113.706299720332026,1478003.72041735611856 6891029.390302868559957)",459,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477845.527866347460076 6891886.3401223346591,1477791.073948236415163 6891868.1293527437374)",460,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477453.480183461913839 6891871.563030050136149,1477488.80618311651051 6891880.361834840849042,1477497.931599820964038 6891882.584530951455235)",461,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477532.912363875191659 6891765.932137601077557,1477528.760205966420472 6891769.565044686198235,1477518.44979138020426 6891779.850625957362354,1477476.415024229325354 6891823.798257810994983,1477453.480183461913839 6891871.563030050136149,1477446.790077348472551 6891924.126067938283086,1477455.001086245523766 6891954.247648754157126,1477479.27954665129073 6891990.056453500874341,1477520.185300080571324 6892012.866254753433168,1477559.542158647440374 6892023.489389923401177,1477605.402509489562362 6892027.306364,1477641.698901103343815 6892021.588568172417581,1477698.606791194295511 6891999.713821127079427,1477758.453849244629964 6891976.490170946344733,1477766.870133368065581 6891969.990626736544073,1477805.835102870129049 6891944.375728919170797,1477826.847821102011949 6891917.074721806682646,1477845.527866347460076 6891886.3401223346591,1477851.910059632034972 6891830.496958760544658,1477838.539178092731163 6891786.549290280789137,1477791.7177659785375 6891729.219940873794258,1477778.748104193946347 6891722.337380684912205,1477750.625398713862523 6891707.238689129240811,1477722.110804171767086 6891695.68092814553529,1477715.271406986285001 6891692.891126264818013,1477715.271406986285001 6891689.074310968630016)",462,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477698.606791194295511 6891999.713821127079427,1477684.106895933393389 6891965.959072479978204)",463,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477641.698901103343815 6892021.588568172417581,1477630.651361857540905 6891980.675021766684949)",464,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477758.453849244629964 6891976.490170946344733,1477733.382280024467036 6891937.293706933036447)",465,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477589.372380752116442 6891940.098922687582672,1477608.183055686764419 6891941.662485988810658,1477621.553937226068228 6891941.61649882979691,1477645.869720400776714 6891935.300931309349835,1477672.452861708588898 6891925.796931291930377,1477690.274483300978318 6891915.112609200179577,1477708.749253325397149 6891903.569878341630101,1477733.260981028201059 6891876.943482707254589,1477740.81884149601683 6891855.620969253592193,1477739.204631788888946 6891837.83947719540447,1477727.531936184270307 6891822.342019217088819,1477711.119249074719846 6891813.175386519171298,1477692.793770122574642 6891811.21329927444458,1477669.625662055332214 6891811.627177014946938,1477646.289601535769179 6891816.425094575621188,1477623.009525167988613 6891825.009235370904207,1477603.237788961268961 6891833.317466095089912,1477582.868888476863503 6891847.971857075579464,1477568.835527812829241 6891862.702919281087816,1477557.713343029376119 6891874.904735265299678,1477552.590793161420152 6891893.192165004089475,1477556.323069932172075 6891914.928661165758967,1477568.508953595301136 6891930.993471848778427,1477589.372380752116442 6891940.098922687582672)",466,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477630.651361857540905 6891980.675021766684949,1477621.553937226068228 6891941.61649882979691)",467,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477733.382280024467036 6891937.293706933036447,1477725.65646710456349 6891926.732001763768494)",468,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477692.793770122574642 6891811.21329927444458,1477692.383219677722082 6891764.399265908636153)",469,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477623.009525167988613 6891825.009235370904207,1477605.701091633876786 6891783.682813100516796)",470,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477568.835527812829241 6891862.702919281087816,1477532.959017333807424 6891828.534867286682129)",471,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477712.416215251665562 6892167.769204625859857,1477622.598974722903222 6892203.119073937647045,1477613.996076758485287 6892205.019938614219427,1477434.361595695605502 6891964.472149926237762,1477394.239620390348136 6891910.743844576179981,1477429.593612115131691 6891873.494474177248776,1477436.890213207341731 6891866.151923180557787,1477441.835479930043221 6891855.605640362016857,1477443.235083720181137 6891845.319962166249752,1477442.451305598951876 6891835.080283679999411,1477436.778244903776795 6891818.847047658637166,1477420.038983579957858 6891781.7513905512169,1477621.376654078019783 6891628.511351731605828,1477646.028342162957415 6891609.810656713321805,1477673.292623987188563 6891591.493214836344123)",472,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477815.604337325086817 6892123.712386487983167,1477827.603607150260359 6892118.301109884865582,1477942.464424828533083 6892069.323857038281858,1477932.499245842685923 6892029.866343609988689,1477907.651613229420036 6891922.531850008293986,1477868.882588252890855 6891831.89188345707953,1477820.43763574725017 6891737.451429275795817,1477790.495445336448029 6891720.130057509988546,1477761.831559722078964 6891708.204391392879188,1477715.271406986285001 6891689.074310968630016,1477648.389007219579071 6891687.173568284139037,1477635.969856259413064 6891687.173568284139037)",473,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477679.992060790536925 6892101.331492725759745,1477711.445823292247951 6892094.893164958804846,1477740.706873192451894 6892082.721673713997006,1477770.406465607928112 6892066.840511322021484)",474,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477679.992060790536925 6892101.331492725759745,1477656.320095360744745 6892053.243440655060112,1477653.212974948808551 6892047.832211491651833,1477641.698901103343815 6892021.588568172417581)",475,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477656.320095360744745 6892053.243440655060112,1477710.120865036733449 6892026.509244767017663,1477767.52328180288896 6891994.900465020909905)",476,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477710.120865036733449 6892026.509244767017663,1477698.606791194295511 6891999.713821127079427)",477,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477648.389007219579071 6891687.173568284139037,1477621.376654078019783 6891628.511351731605828)",478,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477932.499245842685923 6892029.866343609988689,1477886.685548456618562 6892048.276759926229715,1477859.551896321587265 6892044.52109289355576,1477838.193942492129281 6892048.522028035484254,1477825.345579701242968 6892061.076699531637132,1477818.552835974609479 6892075.225638516247272,1477816.938626270508394 6892089.72717712726444,1477827.603607150260359 6892118.301109884865582)",479,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477793.089377692667767 6892048.154125873930752,1477798.221258256351575 6892062.103761437349021,1477809.315450964029878 6892056.815160491503775,1477818.552835974609479 6892075.225638516247272)",480,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477653.212974948808551 6892047.832211491651833,1477598.712403376353905 6892069.354515632614493,1477624.567750717513263 6892151.274696073494852,1477622.598974722903222 6892203.119073937647045)",481,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477420.038983579957858 6891781.7513905512169,1477396.65626959851943 6891799.042237523943186,1477337.518344137584791 6891842.192873341962695,1477394.239620390348136 6891910.743844576179981)",482,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1476971.260693745920435 6891517.24285698775202,1477003.171660154126585 6891536.188589158467948,1476982.261579535668716 6891598.958142179064453,1476967.575070433784276 6891697.474372724071145,1476966.875268540112302 6891701.980978826992214,1476966.007514191325754 6891708.173734177835286,1476958.244378502713516 6891776.202385487966239,1476938.295359153533354 6891904.612249108031392,1476921.612081981264055 6892006.780568920075893,1476991.209713097894564 6892086.753286531195045,1477034.942666180199012 6892055.404867491684854,1477081.764078291598707 6892021.849164674989879,1477195.953086152207106 6891932.158478451892734,1477145.837939785327762 6891865.492780096828938)",483,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477366.966007873183116 6891868.589220155961812,1477374.589183179894462 6891866.535145924426615,1477381.72716250969097 6891866.059949724003673,1477387.073648984543979 6891867.378236030228436,1477393.241236352361739 6891869.064416506327689,1477400.024649386061355 6891868.911127359606326,1477405.669718005461618 6891867.424222765490413,1477410.885574793908745 6891865.109557402320206,1477415.000409936532378 6891861.675882850773633,1477418.340797648299485 6891857.813000736758113,1477420.710793400416151 6891853.612884988076985,1477422.185042725177482 6891848.309092325158417,1477422.492955556837842 6891842.898001108318567,1477421.839807122014463 6891837.241651857271791,1477418.331466958159581 6891830.450972235761583,1477407.787785074906424 6891815.995887773111463,1477396.65626959851943 6891799.042237523943186)",484,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477698.644113963004202 6891577.758992903865874,1477820.43763574725017 6891737.451429275795817)",485,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1477687.456614337861538 6891609.488759884610772,1477698.756082263542339 6891624.587267857044935,1477700.855487952940166 6891631.31645973585546,1477700.70619688089937 6891638.674124730750918,1477699.073325790930539 6891646.231066821143031,1477695.555654934141785 6891652.009909689426422,1477690.4051129873842 6891656.97634560521692,1477684.937327513471246 6891659.873434635810554,1477677.034231450874358 6891661.329643805511296,1477668.60861663450487 6891660.256647552363575,1477661.470637307269499 6891656.961017092689872,1477656.077497370773926 6891652.5923927500844,1477652.401204751804471 6891646.859534942544997,1477649.816603085491806 6891639.394563124515116,1477650.255145606352016 6891626.01281373295933,1477656.189465674338862 6891614.179257809184492,1477665.128268546424806 6891606.315777552314103,1477673.292623987188563 6891591.493214836344123,1477691.888693005079404 6891579.199858834967017,1477698.644113963004202 6891577.758992903865874)",486,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477181.042640446452424 6891986.515421602874994,1477192.79931227886118 6892009.585808921605349,1477209.538573602680117 6892019.396492030471563,1477223.357328352984041 6892015.226950248703361,1477241.897413221886382 6892003.868025694973767,1477254.251249337336048 6892002.672350356355309,1477481.09903157921508 6892286.972161007113755,1477529.711936542764306 6892276.82389810308814,1477549.437019285047427 6892291.479097588919103,1477584.352468494558707 6892335.368207341991365,1477604.488101679133251 6892361.919472146779299)",490,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477583.904595280997455 6891294.219997277483344,1477610.217146528884768 6891274.416479538194835,1477654.062067914754152 6891332.033815642818809,1477629.401049136882648 6891352.74182316660881)",491,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477868.005503211170435 6891418.483586152084172,1477848.45770361693576 6891433.290501792915165,1477828.732620871858671 6891448.066788487136364,1477807.514627421740443 6891462.582523957826197)",492,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477807.514627421740443 6891462.582523957826197,1477751.623782749054953 6891507.58606893569231,1477629.401049136882648 6891352.74182316660881)",493,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477629.401049136882648 6891352.74182316660881,1477583.904595280997455 6891294.219997277483344)",494,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477583.904595280997455 6891294.219997277483344,1477558.161216243170202 6891260.008378100581467)",495,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477601.101060511544347 6890443.310502992011607,1477582.691605331841856 6890428.290844186209142,1477188.208611846435815 6890073.681786119006574)",496,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477130.610250554978848 6890845.357349183410406,1477112.210126065183431 6890858.29331654496491)",500,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477083.490256302058697 6890932.47628013510257,1477087.66107559367083 6890947.466226569376886,1477089.116663535358384 6890956.187384136021137)",502,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477087.66107559367083 6890947.466226569376886,1477145.95923878159374 6890906.512165016494691,1477156.708195885876194 6890900.657222660258412,1477187.527471335837618 6890885.774652787484229,1477210.406327954260632 6890875.919371928088367,1477223.142722439020872 6890877.1455337414518)",503,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477406.453496126458049 6891175.721502039581537,1477391.981592941563576 6891187.615723043680191,1477374.197294117882848 6891201.563865466974676,1477022.420877606840804 6891477.159598301164806,1476986.90826411684975 6891504.980270971544087,1476971.260693745920435 6891517.24285698775202,1476941.243857803056017 6891507.294832653366029)",505,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477358.950943501666188 6890905.500577809289098,1477336.324015568709001 6890915.141315577551723,1477320.424516517668962 6890921.931222087703645,1477285.014540638308972 6890925.701691834256053,1477178.570007083471864 6890971.238683593459427,1477158.975554024800658 6890984.971869397908449,1477098.400702007813379 6891032.118565235286951)",506,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477095.414880589582026 6891011.595310922712088,1477098.400702007813379 6891032.118565235286951,1477105.977223855676129 6891139.563791322521865)",507,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477677.911316492594779 6891115.560924383811653,1477665.996022895211354 6891125.600428977049887,1477664.307167656254023 6891126.872611372731626,1477657.943635757779703 6891131.777412844821811)",508,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477768.558988607022911 6891022.355068786069751,1477796.73767824168317 6891035.567212809808552,1477831.550489834975451 6891054.557791966944933,1477842.486060780240223 6891060.520138014107943)",509,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477556.62165207369253 6890751.633515411056578,1477574.769847880583256 6890734.436881551519036,1477588.150060110026971 6890725.838578412309289,1477599.608149800915271 6890720.106381432153285,1477612.997692723292857 6890719.156124571338296,1477625.40751299331896 6890720.106381432153285,1477644.516770066693425 6890726.804162795655429,1477667.806177130201831 6890740.184415513649583)",510,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477782.620341347064823 6891064.459273951128125,1477796.73767824168317 6891035.567212809808552,1477810.771038905717432 6891005.403092133812606)",511,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477872.456243261462077 6890928.291974918916821,1477851.564824028639123 6890914.007110533304513)",512,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477853.21635650168173 6890830.490208609960973,1477820.027085299603641 6890898.649376915767789)",513,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477799.844798653386533 6890804.495769085362554,1477766.64619676116854 6890872.63939,1477751.77307382132858 6890903.186189386062324)",514,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477724.163556393934414 6890895.04751749522984,1477741.136085020378232 6890860.209190255962312,1477774.325356219662353 6890792.081001562997699)",515,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477695.984866762068123 6890883.337653747759759,1477713.750504202675074 6890846.874718683771789,1477746.939775401959196 6890778.731316149234772)",516,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477668.114089961862192 6890869.497352491132915,1477685.777089789044112 6890833.233730419538915,1477718.966360991122201 6890765.105770315043628)",517,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477754.656257629161701 6891051.660921058617532,1477768.558988607022911 6891022.355068786069751,1477783.898646140703931 6890993.049323340877891)",518,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477642.893229672452435 6890855.289227482862771,1477659.791112761478871 6890820.589014776051044,1477692.989714653696865 6890752.445835038088262)",519,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477623.998578510247171 6890830.107035243883729,1477634.607575237983838 6890808.327491325326264,1477667.806177130201831 6890740.184415513649583)",520,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477781.379359321901575 6890910.619823455810547,1477793.499928140547127 6890885.713344623334706,1477826.689199339831248 6890817.569612891413271)",521,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477870.412821729434654 6890838.874046353623271,1477837.214219840010628 6890907.017958667129278)",522,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477091.775910733500496 6890789.490762358531356,1476942.736768513685092 6890783.32936832588166)",524,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477536.616648569935933 6891975.447790859267116,1477569.955210844287649 6891984.997836984694004,1477600.793147677090019 6891986.469434185884893,1477630.651361857540905 6891980.675021766684949,1477684.106895933393389 6891965.959072479978204,1477713.899795272154734 6891950.844594269990921,1477733.382280024467036 6891937.293706933036447,1477770.46244975971058 6891905.470672187395394,1477791.073948236415163 6891868.1293527437374,1477793.630557826953009 6891835.402189544402063,1477787.742891217814758 6891810.416201460175216,1477774.064096846850589 6891789.768330050632358,1477751.353192683542147 6891775.144702635705471,1477724.723397911060601 6891766.315355568192899,1477692.383219677722082 6891764.399265908636153,1477662.301068890141323 6891765.901480161584914,1477631.080573685467243 6891773.381898197345436,1477605.701091633876786 6891783.682813100516796,1477577.802322755102068 6891796.129769561812282,1477555.511299735167995 6891809.818378160707653,1477532.959017333807424 6891828.534867286682129,1477517.423415269004181 6891848.12514582183212,1477505.610759282018989 6891863.929231609217823,1477497.931599820964038 6891882.584530951455235,1477494.936447712592781 6891903.999089813791215,1477496.830578175140545 6891922.010663450695574,1477500.497540106996894 6891936.419951410032809,1477507.775479810545221 6891951.089859411120415,1477523.27375910943374 6891966.464932785369456,1477536.616648569935933 6891975.447790859267116)",535,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477161.457518077688292 6890758.668512595817447,1477029.446888633305207 6890709.37768148444593)",538,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477131.048793075839058 6890631.24252425506711,1477164.126095974352211 6890700.488198084756732,1477179.391107973642647 6890738.498471793718636)",539,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477519.588135797530413 6890535.436799609102309,1477529.833235539030284 6890516.294183277525008,1477567.697183395503089 6890475.526233145967126,1477601.101060511544347 6890443.310502992011607,1477654.556594587164 6890383.078775299713016,1477699.67982076969929 6890328.610064546577632,1477708.963859239360318 6890318.096450427547097,1477743.879308448871598 6890287.352637302130461,1477755.803932736394927 6890280.6858737943694,1477780.185030752792954 6890271.551650473847985,1477786.39927157945931 6890262.126246342435479,1477776.443423286313191 6890246.309983272105455,1477725.507176032289863 6890206.493598283268511,1477672.238255794625729 6890175.474349547177553,1477612.512496743584052 6890149.129538116045296,1477598.469805386383086 6890135.673640975728631,1477603.097828581929207 6890120.148812685161829,1477617.560401076916605 6890072.379119392484426,1477630.968605382135138 6890069.988343353383243,1477642.156105010071769 6890079.5361262653023,1478111.629869545809925 6890480.982382909394801)",540,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477457.678994829300791 6890649.726370869204402,1477478.663720985176042 6890623.471964616328478,1477502.205056728795171 6890571.39254963491112)",542,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477394.202297621639445 6890700.610811580903828,1477457.678994829300791 6890649.726370869204402)",543,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477202.689845727290958 6890575.867871635593474,1477215.379586750175804 6890595.455097910948098,1477325.491082236869261 6890699.476636806502938,1477343.788569116033614 6890718.313154872506857,1477379.665079592028633 6890708.013604944571853,1477394.202297621639445 6890700.610811580903828)",544,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477179.129848600830883 6890751.863417183049023,1477161.457518077688292 6890758.668512595817447,1477091.775910733500496 6890789.490762358531356,1477003.218313615769148 6890845.05080992449075,1476929.076635525561869 6890897.699098956771195,1476846.1361149456352 6890928.598517356440425,1476697.29291725391522 6891011.472692683339119,1476669.580762218683958 6891010.522401385009289,1476642.055221018847078 6890998.321897276677191)",545,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477179.391107973642647 6890738.498471793718636,1477173.72737796837464 6890740.307029619812965,1477160.067244980484247 6890746.192508741281927,1477144.335698384558782 6890708.933207083493471,1477164.126095974352211 6890700.488198084756732)",546,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477825.784122222103179 6891305.424640764482319,1477810.183205312816426 6891318.392004153691232,1477807.579942266456783 6891320.553233419544995,1477805.405891042202711 6891322.361922188661993)",547,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477434.361595695605502 6891964.472149926237762,1477445.68905570008792 6891957.957286356948316,1477455.001086245523766 6891954.247648754157126,1477500.497540106996894 6891936.419951410032809)",548,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477654.071398604661226 6891729.08198303822428,1477655.685608308762312 6891734.416354355402291)",549,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477751.353192683542147 6891775.144702635705471,1477778.748104193946347 6891722.337380684912205)",550,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477530.710320580750704 6892072.497022124007344,1477532.408506509615108 6892059.927003527060151,1477512.972675218945369 6892026.631878494285047,1477520.185300080571324 6892012.866254753433168,1477536.616648569935933 6891975.447790859267116)",551,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477188.460540529107675 6890785.490453751757741,1477179.129848600830883 6890751.863417183049023,1477173.72737796837464 6890740.307029619812965)",555,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477233.434475639369339 6890900.503951973281801,1477229.739521637326106 6890892.028087645769119,1477223.142722439020872 6890877.1455337414518,1477221.817764186300337 6890863.182627168484032)",557,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477682.39004861866124 6889990.909228938631713,1477660.640205727424473 6889979.016778235323727,1477638.041269867448136 6889962.005700208246708,1477601.502280263695866 6889935.768864835612476,1477037.424630233086646 6889460.654818921349943,1476851.809175638016313 6889334.68986457772553,1476836.674793327925727 6889326.736669098958373,1476816.165932461619377 6889319.151258772239089,1476789.40550800296478 6889310.018127746880054,1476760.433709556935355 6889300.195426267571747,1476743.535826465114951 6889295.567574185319245,1476724.081333788577467 6889290.40338478051126,1476703.572472922271118 6889300.655146818608046)",558,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477637.518751118797809 6890024.67101151868701,1477572.987685721367598 6889974.54178845603019,1477564.646047132555395 6889952.427406344562769,1477559.635465567931533 6889940.856842578388751,1477558.403814232908189 6889935.079229551367462)",560,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477699.67982076969929 6890328.610064546577632,1477733.204996876418591 6890359.445991663262248,1477739.904433685587719 6890365.024671027436852)",561,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477962.600058013107628 6891779.436749854125082,1477953.866530364844948 6891751.538483916781843,1477943.453478170791641 6891735.30541658680886)",562,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477349.881510943174362 6890675.812269823625684,1477337.537005520658568 6890685.851225290447474)",563,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477178.570007083471864 6890971.238683593459427,1477201.355556778842583 6891033.344750871881843,1477171.068130770465359 6891047.170006854459643,1477173.083560226485133 6891051.921486127190292,1477200.823707337491214 6891117.231619697995484,1477217.040449918713421 6891155.381811781786382,1477226.044567629694939 6891176.595174888148904,1477236.019077305682003 6891188.397431484423578,1477262.11702263681218 6891201.349278477951884,1477343.11675929534249 6891166.862158128991723)",564,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477555.511299735167995 6891809.818378160707653,1477539.014636401087046 6891785.00108590349555)",565,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477397.141465578228235 6890736.030863894149661,1477364.94124772422947 6890746.376430032774806)",566,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477192.883288506418467 6890795.897391020320356,1477199.097529330058023 6890810.090084169991314,1477209.725187440868467 6890834.291289354674518)",567,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1476986.90826411684975 6891504.980270971544087,1476978.417334458557889 6891488.410481329075992,1476982.625476519111544 6891477.634771515615284,1477001.21221484686248 6891429.979636301286519,1477055.871408184524626 6891387.674252809025347,1476926.19345171796158 6891217.903148794546723,1476932.389031158527359 6891202.544834636151791,1477041.110253545222804 6891117.369567033834755,1477044.021429431624711 6891042.633113135583699,1477037.135378784500062 6891030.999671006575227,1477030.258658833103254 6891020.699720491655171)",568,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477851.564824028639123 6890914.007110533304513,1477837.214219840010628 6890907.017958667129278,1477820.027085299603641 6890898.649376915767789,1477793.499928140547127 6890885.713344623334706,1477766.64619676116854 6890872.63939,1477741.136085020378232 6890860.209190255962312,1477713.750504202675074 6890846.874718683771789,1477685.777089789044112 6890833.233730419538915,1477659.791112761478871 6890820.589014776051044,1477634.607575237983838 6890808.327491325326264)",569,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477657.943635757779703 6891131.777412844821811,1477634.971472224220634 6891151.028787543997169)",572,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1477547.608203666983172 6890950.087170991115272,1477521.230337577406317 6890965.031168691813946,1477512.394172318745404 6890970.012507430277765,1477494.852471484802663 6890979.95986695215106,1477486.482840825803578 6890984.695979272015393,1477470.17279132688418 6890993.938303586095572,1477464.826304849237204 6890996.973098964430392,1477447.863106921315193 6891006.567964611575007,1477439.782727705081925 6891011.135492536239326,1477421.92378334957175 6891021.251503217034042,1477409.887190758716315 6891028.072153965942562)",573,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1477634.971472224220634 6891151.028787543997169,1477612.559150202432647 6891120.695631274022162)",574,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1477805.405891042202711 6891322.361922188661993,1477795.459373445017263 6891330.2404525866732,1477820.325667443918064 6891360.42112004570663,1477845.29459905042313 6891389.191724671050906,1477868.005503211170435 6891418.483586152084172,1477915.246796463150531 6891483.398165013641119,1477941.960567463189363 6891518.177879937924445,1478007.443363436963409 6891603.372722592204809,1478079.075085395481437 6891736.240464904345572)",575,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477604.488101679133251 6892361.919472146779299,1477636.333753245649859 6892365.016103434376419,1477641.120398203376681 6892375.777672911994159,1477651.720064238179475 6892399.615673690102994,1477661.713235300034285 6892422.135367657989264,1477671.743729121983051 6892444.701114750467241,1477677.360805668402463 6892457.31772515270859,1477696.218134059105068 6892478.028631558641791,1477711.763066816842183 6892498.678270866163075)",576,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477022.420877606840804 6891477.159598301164806,1477104.59628144861199 6891583.522458178922534,1477116.763503728900105 6891599.280038581229746,1477202.167326975846663 6891709.829224040731788,1477215.323602598393336 6891726.859329365193844,1477316.235035840189084 6891857.49109398201108,1477337.518344137584791 6891842.192873341962695)",577,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1476941.243857803056017 6891507.294832653366029,1476903.80912177474238 6891496.304502658545971,1476881.984633348649368 6891489.881987628526986,1476860.79463197151199 6891483.674072253517807,1476837.299949686974287 6891476.761065948754549,1476802.673751928843558 6891462.735805360600352,1476793.585657987510785 6891460.084037529304624)",578,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477751.623782749054953 6891507.58606893569231,1477741.089431561529636 6891515.342154928483069)",579,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477612.559150202432647 6891120.695631274022162,1477582.075779662933201 6891143.656241306103766,1477566.754783512093127 6891124.2362818159163,1477529.049457415007055 6891078.468512326478958)",580,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477634.971472224220634 6891151.028787543997169,1477614.761193496640772 6891168.440898629836738,1477601.101060511544347 6891175.721502039581537,1477585.4534901403822 6891184.105699811130762,1477566.950728042982519 6891186.788031838834286,1477558.702396374428645 6891184.381596778519452,1477547.496235363651067 6891176.426571349613369,1477507.896778806811199 6891126.826628868468106)",581,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477793.089377692667767 6892048.154125873930752,1477767.52328180288896 6891994.900465020909905,1477758.453849244629964 6891976.490170946344733)",582,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477215.323602598393336 6891726.859329365193844,1477568.294347681337968 6891455.945442079566419,1477586.535850405925885 6891442.410717039369047)",585,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1476860.79463197151199 6891483.674072253517807,1476960.819649475859478 6891630.565365144982934,1476941.281180571764708 6891746.219429916702211,1476922.526489791693166 6891772.308886986225843,1476902.138927918858826 6891980.215147942304611,1476921.612081981264055 6892006.780568920075893)",586,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477202.167326975846663 6891709.829224040731788,1477555.511299735167995 6891439.437065890990198,1477573.715479691047221 6891425.779744077473879)",587,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477696.218134059105068 6892478.028631558641791,1477691.039600039366633 6892481.830491381697357,1477655.918875608593225 6892510.237186400219798,1477625.398182300385088 6892475.315208514221013,1477531.120871023042127 6892361.674194470979273,1477492.827711335849017 6892391.613455899991095,1477584.249830884160474 6892505.760787431150675,1477625.398182300385088 6892475.315208514221013)",588,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477584.249830884160474 6892505.760787431150675,1477550.510048857657239 6892529.55318315140903,1477537.027199015021324 6892540.912850533612072)",589,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478066.245383990462869 6892248.387368608266115,1478062.709051750600338 6892246.839075284078717,1478053.341037050588056 6892250.855440765619278,1478053.117100443691015 6892255.760928054340184)",590,path,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478057.465202880557626 6892224.90239691734314,1478055.188514051726088 6892228.182930614799261,1478045.251327144447714 6892231.816046603955328,1478042.116214653942734 6892230.589678158052266)",591,path,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477784.906360871624202 6892316.451251152902842,1477641.120398203376681 6892375.777672911994159)",592,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477794.470320102758706 6892339.154669879004359,1477651.720064238179475 6892399.615673690102994)",593,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477818.590158740524203 6892272.577574365772307,1477820.493619899032637 6892278.142251771874726,1477867.380346852121875 6892398.006031540222466)",594,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477804.024948637932539 6892361.87348258215934,1477661.713235300034285 6892422.135367657989264)",595,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478053.117100443691015 6892255.760928054340184,1477964.606156779220328 6892292.444870038889349,1477895.484390949364752 6892321.126831811852753)",596,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478032.020405984483659 6892209.480840558186173,1477946.392646130407229 6892246.195230620913208,1477870.356837577652186 6892278.801428685896099)",597,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478042.116214653942734 6892230.589678158052266,1477955.219480698928237 6892268.637846413999796,1477881.059141225880012 6892301.121497599408031)",598,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477974.254092237679288 6892334.525068153627217,1477970.353863011812791 6892307.008119508624077,1477964.606156779220328 6892292.444870038889349,1477955.219480698928237 6892268.637846413999796,1477946.392646130407229 6892246.195230620913208,1477939.861161776585504 6892229.639242734760046)",599,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477813.588907869067043 6892385.481493636965752,1477671.743729121983051 6892444.701114750467241)",600,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477315.871138856979087 6890705.699273365549743,1477293.813383128261194 6890711.002312272787094)",601,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477327.739778992719948 6890696.79446735791862,1477325.491082236869261 6890699.476636806502938,1477315.871138856979087 6890705.699273365549743)",602,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477191.548999560764059 6890584.63460551109165,1477193.573759709950536 6890604.436424199491739,1477192.715336051303893 6890631.717647477984428,1477189.860144322039559 6890651.550235321745276,1477182.722164992243052 6890668.118300231173635,1477164.126095974352211 6890700.488198084756732)",603,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477337.537005520658568 6890685.851225290447474,1477327.739778992719948 6890696.79446735791862)",604,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477317.485348558053374 6890876.701050061732531,1477328.215644282288849 6890898.603395721875131,1477336.324015568709001 6890915.141315577551723,1477340.560149707831442 6890923.770475399680436,1477391.543050420703366 6891037.789675366133451,1477433.661793799139559 6891131.76208533346653,1477423.286064371000975 6891138.966017907485366,1477419.021938158897683 6891141.924230385571718,1477415.15903169894591 6891144.591220805421472,1477411.258802472846583 6891147.304194730706513,1477406.565464430022985 6891150.59961626958102,1477402.814526273403317 6891153.297264670953155,1477398.149180306354538 6891156.699981558136642)",606,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477001.21221484686248 6891429.979636301286519,1477012.810264917090535 6891381.604368223808706,1476990.127352835144848 6891349.568942168727517,1476972.175101556349546 6891324.201267114840448,1476953.905606755753979 6891298.404492945410311,1476935.21623081760481 6891272.010018249042332,1476926.622663548681885 6891259.870428316295147,1476909.556828004540876 6891253.110891866497695,1476842.273208488477394 6891436.264150676317513,1476866.915565874893218 6891446.33471198566258,1476891.623238111380488 6891456.405285906977952,1476916.274926193524152 6891463.640165685676038,1476941.495786485727876 6891471.074317997321486,1476963.730825359700248 6891477.604115179739892,1476982.625476519111544 6891477.634771515615284)",607,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477430.340067470446229 6891165.329400658607483,1477423.817913812352344 6891156.408757981844246)",608,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477438.401785300811753 6891159.091080768965185,1477431.627702959813178 6891150.078479750081897)",609,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477391.543050420703366 6891037.789675366133451,1477409.887190758716315 6891028.072153965942562)",610,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1476990.127352835144848 6891349.568942168727517,1476941.495786485727876 6891471.074317997321486)",611,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477422.772876315517351 6891171.353139204904437,1477416.036116740433499 6891162.723713628947735)",612,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477391.981592941563576 6891187.615723043680191,1477474.922113521490246 6891297.515479031950235,1477487.751814926741645 6891314.146186651661992,1477573.715479691047221 6891425.779744077473879,1477586.535850405925885 6891442.410717039369047,1477691.888693005079404 6891579.199858834967017)",614,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477374.197294117882848 6891201.563865466974676,1477456.410020725568756 6891311.233894356526434,1477469.668933961540461 6891328.61569665838033,1477555.511299735167995 6891439.437065890990198,1477568.294347681337968 6891455.945442079566419,1477673.292623987188563 6891591.493214836344123)",615,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477173.083560226485133 6891051.921486127190292,1477137.272364595206454 6891079.863306542858481,1477118.508343119407073 6891093.428076104260981)",616,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477088.584814094239846 6891117.76808157004416,1477048.864058541134 6891148.239174656569958,1477017.643563339253888 6891172.196156406775117,1476959.317408075323328 6891216.922177751548588)",617,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477024.818865434965119 6891578.770664696581662,1477055.012984525877982 6891556.5139145758003)",618,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477044.683908559381962 6891600.613609550520778,1477072.899920959956944 6891578.770664696581662)",619,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477081.764078291598707 6892021.849164674989879,1477121.027629941003397 6892015.901434796862304,1477150.913836200255901 6892003.71473397128284,1477181.042640446452424 6891986.515421602874994,1477246.96397894108668 6891938.244107788428664)",620,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477137.272364595206454 6891079.863306542858481,1477179.68035942222923 6891133.754661783576012,1477203.753544606966898 6891164.777608038857579,1477227.313541733426973 6891196.827625382691622,1477267.108942821156234 6891248.650520586408675,1477275.89845462096855 6891259.655839771032333)",621,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477038.329707350814715 6891342.288181316107512,1477049.825119810411707 6891333.827179099433124,1477076.091017599450424 6891312.613401100039482)",622,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477050.459606862161309 6891150.522978541441262,1477048.864058541134 6891148.239174656569958,1477039.906594285974279 6891136.728199865669012)",623,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477019.500371033092961 6891174.066122156567872,1477017.643563339253888 6891172.196156406775117,1477008.994011918548495 6891161.221612081862986)",624,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477236.019077305682003 6891188.397431484423578,1477227.313541733426973 6891196.827625382691622)",625,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1476959.317408075323328 6891216.922177751548588,1477000.549735719105229 6891270.170685262419283,1477025.378706949297339 6891302.251778436824679,1477049.825119810411707 6891333.827179099433124,1477089.85378819797188 6891385.528333493508399,1477098.167434711009264 6891396.257935808971524)",626,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477203.753544606966898 6891164.777608038857579,1477217.040449918713421 6891155.381811781786382)",627,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477227.313541733426973 6891196.827625382691622,1477200.506463813129812 6891216.600296653807163)",628,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477176.405286555178463 6891136.161081690341234,1477179.68035942222923 6891133.754661783576012,1477200.823707337491214 6891117.231619697995484)",629,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1476989.203614334575832 6891279.551287890411913,1477000.549735719105229 6891270.170685262419283,1477004.487287716707215 6891266.890542482957244)",630,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477014.592427076306194 6891310.758730973117054,1477025.378706949297339 6891302.251778436824679)",631,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477657.813006068347022 6891744.87050611898303,1477663.094177704304457 6891744.042757529765368,1477667.983460275456309 6891744.012100178748369,1477687.633897485909984 6891746.357388046570122,1477693.166997798951343 6891746.265415959060192,1477698.485492197796702 6891744.747876695357263,1477702.80560256447643 6891741.75878503266722,1477705.595479451818392 6891737.66603057552129,1477709.299764146795496 6891729.863744132220745,1477713.694520050892606 6891719.654869962483644,1477722.110804171767086 6891695.68092814553529)",632,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477488.80618311651051 6891880.361834840849042,1477485.269850873854011 6891887.59709616843611,1477482.47064329078421 6891890.678215784020722,1477476.881558825960383 6891894.065915833227336,1477471.292474361369386 6891894.939666754566133,1477465.274178063031286 6891895.246246046386659,1477471.124521903228015 6891926.686014686711133,1477472.029599023750052 6891931.560646092519164)",633,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477471.124521903228015 6891926.686014686711133,1477496.830578175140545 6891922.010663450695574)",634,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477105.706633787136525 6892515.296133446507156,1477093.642049120273441 6892467.834137276746333,1477084.078089892165735 6892430.22959574777633,1477075.652475078590214 6892397.070906250737607,1477065.827256471849978 6892358.362946599721909)",635,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477084.078089892165735 6892430.22959574777633,1477114.505476279882714 6892422.533946882933378,1477144.70892606372945 6892414.914955166168511)",636,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477136.208665715297684 6892506.573284320533276,1477124.26538004190661 6892460.322412922978401,1477114.505476279882714 6892422.533946882933378)",637,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477166.915972861694172 6892497.804454318247736,1477154.860718884970993 6892452.826025616377592,1477144.70892606372945 6892414.914955166168511,1477135.490202432963997 6892380.483947849832475,1477125.282425462966785 6892342.404590574093163)",638,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477093.642049120273441 6892467.834137276746333,1477124.26538004190661 6892460.322412922978401,1477154.860718884970993 6892452.826025616377592,1477172.812970160972327 6892448.211688437499106,1477176.834498385898769 6892435.687072315253317,1477157.23071463429369 6892374.474633106961846,1477135.490202432963997 6892380.483947849832475,1477075.652475078590214 6892397.070906250737607,1477052.30708386329934 6892403.555465837940574,1477067.898670082679018 6892466.684383096173406,1477073.991611915640533 6892473.5982407303527,1477093.642049120273441 6892467.834137276746333)",639,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477104.59628144861199 6891583.522458178922534,1477136.936459684744477 6891559.073744270019233,1477456.410020725568756 6891311.233894356526434,1477474.922113521490246 6891297.515479031950235)",640,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477116.763503728900105 6891599.280038581229746,1477149.467578951269388 6891573.988217326812446,1477469.668933961540461 6891328.61569665838033,1477487.751814926741645 6891314.146186651661992)",641,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477358.950943501666188 6890905.500577809289098,1477389.145062592579052 6890890.97052111569792,1477415.597574219573289 6890878.233752502128482,1477438.168518 6890867.382225495763123,1477521.230337577406317 6890965.031168691813946)",642,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477293.813383128261194 6890711.002312272787094,1477245.060517788399011 6890724.566459476016462,1477179.129848600830883 6890751.863417183049023)",643,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477623.578697375254706 6892624.202238139696419,1477621.787204523105174 6892605.299932564608753,1477625.295544689754024 6892598.999173911288381,1477697.6923833838664 6892539.977708619087934,1477702.124462053878233 6892533.431718253530562,1477700.025056370068341 6892524.555547795258462,1477695.331718327244744 6892512.33741554338485)",644,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1476916.274926193524152 6891463.640165685676038,1476972.175101556349546 6891324.201267114840448)",645,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477411.258802472846583 6891147.304194730706513,1477420.178943959064782 6891159.366976878605783)",646,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1476866.915565874893218 6891446.33471198566258,1476935.21623081760481 6891272.010018249042332)",647,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477412.387816194444895 6891165.681934850290418,1477402.814526273403317 6891153.297264670953155)",648,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477427.587513351812959 6891153.35857486911118,1477419.021938158897683 6891141.924230385571718)",649,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477423.817913812352344 6891156.408757981844246,1477415.15903169894591 6891144.591220805421472)",650,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477431.627702959813178 6891150.078479750081897,1477423.286064371000975 6891138.966017907485366)",651,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477420.178943959064782 6891159.366976878605783,1477426.701097617158666 6891168.180329788476229)",652,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477434.221635316265747 6891162.217903890646994,1477427.587513351812959 6891153.35857486911118)",653,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477416.036116740433499 6891162.723713628947735,1477406.565464430022985 6891150.59961626958102)",654,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477790.178201811853796 6892050.76009990926832,1477793.089377692667767 6892048.154125873930752)",655,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477418.975284700049087 6891174.204070466570556,1477412.387816194444895 6891165.681934850290418)",656,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477426.897042148280889 6891184.442907216027379,1477421.92378334957175 6891178.005313728936017,1477418.975284700049087 6891174.204070466570556)",657,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477446.136928913649172 6891169.391208594664931,1477441.434260177891701 6891163.137557985261083,1477438.401785300811753 6891159.091080768965185)",658,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477430.68530307081528 6891181.484679089859128,1477425.721374965040013 6891175.108398336917162,1477422.772876315517351 6891171.353139204904437)",659,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477437.991234855726361 6891175.767484820447862,1477433.279235429828987 6891169.360553430393338,1477430.340067470446229 6891165.329400658607483)",660,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477426.701097617158666 6891168.180329788476229,1477429.630934883840382 6891172.134846064262092,1477434.426910537295043 6891178.633745247498155)",661,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477442.022093768231571 6891172.610001250170171,1477437.282102269353345 6891166.29503783211112,1477434.221635316265747 6891162.217903890646994)",662,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477655.685608308762312 6891734.416354355402291,1477657.066550716059282 6891741.436882919631898)",663,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1476887.153836678247899 6891470.844395658001304,1476887.788323727203533 6891469.020345328375697,1476891.623238111380488 6891456.405285906977952,1476953.905606755753979 6891298.404492945410311)",664,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477657.066550716059282 6891741.436882919631898,1477657.813006068347022 6891744.87050611898303,1477662.301068890141323 6891765.901480161584914)",665,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477421.92378334957175 6891178.005313728936017,1477425.721374965040013 6891175.108398336917162,1477429.630934883840382 6891172.134846064262092,1477433.279235429828987 6891169.360553430393338,1477437.282102269353345 6891166.29503783211112,1477441.434260177891701 6891163.137557985261083)",666,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477539.014636401087046 6891785.00108590349555,1477533.500197465298697 6891776.708233860321343)",667,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477533.500197465298697 6891776.708233860321343,1477528.760205966420472 6891769.565044686198235)",668,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477725.65646710456349 6891926.732001763768494,1477719.451556970831007 6891918.224397381767631)",669,steps,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477936.222191923297942 6891522.408476941287518,1477941.960567463189363 6891518.177879937924445,1477949.331814086996019 6891512.996934459544718)",670,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477719.451556970831007 6891918.224397381767631,1477708.749253325397149 6891903.569878341630101)",671,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1478201.335141776595265 6891732.714873464778066,1478199.170421248069033 6891718.367265134118497,1478194.67302773357369 6891689.365553838200867,1478190.492877749027684 6891669.729676574468613,1478176.459517084760591 6891671.952314448542893,1478125.448624295881018 6891656.102620540186763,1478117.200292630353943 6891651.01355717331171,1478098.249657313572243 6891632.772663729265332,1478077.890087522100657 6891607.710663352161646,1478071.806476379279047 6891600.000473447144032,1478068.064868915593252 6891592.627515465021133,1478066.105423611123115 6891589.776435805484653,1478059.704568943707272 6891578.923948316834867,1478057.315911811310798 6891574.923246877267957,1478048.171833718195558 6891567.15177505556494,1478038.029371589887887 6891557.050405757501721,1478027.616319393040612 6891542.335231919772923,1478017.091298892628402 6891529.934653213247657,1478008.619030622998253 6891518.208536428399384,1477996.181218277197331 6891503.953280243091285,1477988.81930234329775 6891498.389138715341687,1477984.340570217231289 6891494.189210750162601,1477973.75956556503661 6891481.405501900240779,1477964.279582561692223 6891469.204283156432211,1477824.468494659755379 6891286.004290502518415,1477785.690138992853463 6891237.798493586480618,1477740.902817723574117 6891179.430780413560569,1477721.830883413087577 6891153.404557520523667,1477715.85924057662487 6891139.548463800922036,1477708.441340490942821 6891129.35566674452275,1477696.861951803788543 6891119.883274444378912,1477597.909963869256899 6890988.619750818237662,1477466.533821473829448 6890820.497053281404078,1477454.497228882741183 6890826.259975696913898)",672,cycleway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477589.045806534821168 6891029.896104246377945,1477596.715635302942246 6891048.580122988671064,1477609.377384255873039 6891053.929370147176087,1477622.487006419571117 6891070.574901269748807,1477627.208336535375565 6891077.31895683798939,1477664.307167656254023 6891126.872611372731626,1477676.838286919984967 6891143.564276114106178,1477704.662410258548334 6891180.672316116280854,1477726.981425359845161 6891210.59185186214745,1477777.273854869185016 6891277.482036370784044,1477789.347770228981972 6891292.610576447099447,1477801.375032129930332 6891307.248653976246715,1477810.183205312816426 6891318.392004153691232,1477819.504566551186144 6891330.317092030309141,1477831.130608697189018 6891345.016549870371819,1477837.186227764235809 6891351.546244668774307,1477920.080094882519916 6891460.482569055631757,1477950.526142653310671 6891500.044585375115275,1477975.830979173071682 6891532.080611075274646,1477989.668395306216553 6891550.167992977425456,1478002.740694703999907 6891567.504326873458922,1478032.43095642933622 6891605.273445462808013,1478058.668862139806151 6891638.781424059532583,1478073.476670235162601 6891658.003355883061886,1478079.08441608841531 6891667.491710782982409,1478084.160312497522682 6891677.731175800785422,1478088.34979317500256 6891684.015883849933743,1478112.348332822322845 6891705.245970531366765,1478127.809289352502674 6891712.573045953176916,1478164.394932417897508 6891727.472475146874785,1478182.552458914928138 6891731.795154212042689,1478189.961028310470283 6891733.036775229498744,1478196.977708644000813 6891735.489360507577658,1478202.594785184599459 6891737.880631879903376,1478206.95221831719391 6891742.801134817302227)",673,cycleway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477469.444997354643419 6891153.312592218630016,1477547.748164046322927 6891253.907934416085482,1477616.375403200741857 6891265.342438179068267)",674,footway,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477486.482840825803578 6890984.695979272015393,1477514.00838202284649 6891053.086365345865488)",675,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477415.597574219573289 6890878.233752502128482,1477494.852471484802663 6890979.95986695215106)",676,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477512.394172318745404 6890970.012507430277765,1477536.094129821518436 6891031.597436398267746)",677,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477389.145062592579052 6890890.97052111569792,1477470.17279132688418 6890993.938303586095572)",678,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477521.230337577406317 6890965.031168691813946,1477558.301176619715989 6891013.066729949787259,1477560.223299158038571 6891021.864595185033977,1477555.007442369591445 6891030.080032028257847,1477480.333914841059595 6891086.638024752959609,1477468.241338095627725 6891086.377458564005792,1477453.414868617197499 6891080.61434968188405,1477444.084176685893908 6891074.008237943053246,1477421.92378334957175 6891021.251503217034042)",679,service,0,0,1,minorroads,0,0
|
||||
"LINESTRING (1477383.406687055714428 6890923.126736690290272,1477447.863106921315193 6891006.567964611575007)",680,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477439.782727705081925 6891011.135492536239326,1477466.832403615349904 6891077.579522733576596)",681,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1477464.826304849237204 6890996.973098964430392,1477491.913303528213874 6891070.406299953348935)",682,service,0,0,0,minorroads,0,0
|
||||
"LINESTRING (1476973.733327108668163 6890098.677702718414366,1477072.200119063491002 6890203.842244775034487,1477138.13078825105913 6890280.302726635709405,1477353.800401557935402 6890557.690723114646971)",4,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1477470.023500254843384 6890738.375857715494931,1477739.381914934143424 6891078.698423445224762,1477864.478501664241776 6891247.500940763391554,1477920.91052646539174 6891323.312250348739326,1477948.986578486626968 6891354.964373402297497,1477973.404999271966517 6891376.300886962562799,1477996.311847963603213 6891392.272653280757368,1478013.694927032105625 6891401.822006645612419,1478036.583114340901375 6891411.340715271420777,1478065.797510776668787 6891417.502590633928776,1478093.948208335554227 6891419.311301215551794,1478129.507475286955014 6891418.805475333705544,1478152.834205113584176 6891412.950159872882068,1478174.593378700781614 6891405.071548422798514,1478206.345723341219127 6891389.345004675909877,1478223.448881654068828 6891375.381208484992385,1478234.179177372483537 6891364.345074972137809,1478247.979270739946514 6891351.914114957675338)",5,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1479792.936579379020259 6889681.205510908737779,1479674.082225559744984 6889811.252340968698263,1479538.255343108437955 6889942.328065656125546,1479396.046267381170765 6890098.233262076042593,1479391.875448089325801 6890102.84625062905252,1479387.424708036473021 6890104.271526698023081,1479382.180859172018245 6890104.700642123818398,1479371.861113895662129 6890102.84625062905252)",7,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478196.94038587808609 6891352.28198526147753,1478211.0204 6891326.638399799354374,1478222.487820381997153 6891308.47488157171756,1478233.955240765586495 6891291.292384384199977,1478245.422661152202636 6891275.99524116050452,1478258.80287338164635 6891260.713454801589251,1478269.309232496190816 6891247.347663466818631,1478277.566894857445732 6891232.878299727104604,1478286.524359109578654 6891203.050646905787289,1478290.247305190423504 6891173.43769099842757,1478299.419375359313563 6891131.670120283961296)",9,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478588.708148004952818 6890605.53993255738169,1478609.123701951000839 6890560.234908378683031,1478633.962003871100023 6890512.462600218132138,1478661.664828216191381 6890461.824570003896952,1478680.783415985293686 6890415.018393527716398)",10,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478511.935214792611077 6890776.462944713421166,1478487.162227714201435 6890850.829076912254095,1478480.472121600992978 6890872.792660155333579,1478469.0513546760194 6890901.760771677829325,1478458.311728261876851 6890927.096459547057748,1478444.334351749392226 6890965.598274794407189)",11,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478747.693807828007266 6890450.713059439323843,1478695.917798298178241 6890536.494319370947778,1478652.86598572623916 6890592.926227985881269,1478605.848629083950073 6890639.948012223467231,1478534.739425873849541 6890732.521037810482085)",12,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478394.816369665553793 6891123.469907105900347,1478413.981610896298662 6891149.388740294612944,1478422.575178162194788 6891163.720005629584193,1478432.139137393329293 6891182.83350836019963,1478437.868182237260044 6891200.015773738734424,1478443.606557776918635 6891221.045322466641665,1478449.326271930942312 6891243.975563655607402,1478452.200125048635527 6891268.821841340512037,1478455.055316777899861 6891293.652867992408574,1478456.016378046944737 6891316.583316278643906,1478453.151855624979362 6891339.513829967938364,1478447.422810775460675 6891364.360402925871313,1478439.771643395768479 6891385.375053562223911,1478430.767525678966194 6891400.534452718682587,1478420.186521029798314 6891416.536923290230334)",13,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478505.114478987408802 6892450.388551495037973,1478533.022578559117392 6892428.221367940306664,1478547.111923375166953 6892412.922061143442988,1478557.151747890049592 6892398.465929266996682,1478563.580594633240253 6892385.098246153444052,1478568.479207897325978 6892368.143395646475255,1478570.681251191534102 6892353.135470101609826,1478571.632981767877936 6892338.326860104687512,1478570.699912574607879 6892311.990289855748415,1478550.256366555579007 6892207.533986137248576)",14,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478037.180278623942286 6891587.247253092937171,1478066.105423611123115 6891589.776435805484653,1478080.782602020073682 6891593.133352279663086,1478089.777389043709263 6891593.945756936445832,1478098.884144365321845 6891592.826784512028098,1478108.280151141108945 6891589.991033161990345,1478117.424229234224185 6891583.093263810500503,1478125.476616371888667 6891573.681650285609066,1478129.395506983622909 6891564.699241130612791,1478130.711134545970708 6891555.425603993237019,1478130.459205863298848 6891544.006015922874212,1478127.743974510813132 6891534.318539171479642,1478122.014929663855582 6891524.998952300287783,1478111.527231932384893 6891513.242186243645847,1478097.792453409638256 6891504.566409018822014,1478038.747834869194776 6891476.270564619451761)",15,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478508.650811232859269 6892023.658011235296726,1478483.16869156784378 6891955.519962281920016,1478463.396955363918096 6891854.103409341536462,1478457.220037306193262 6891812.31697329133749,1478454.476813877699897 6891793.539206840097904,1478438.726605898933485 6891697.918901789933443,1478429.171977360732853 6891676.535548973828554,1478420.335812099277973 6891665.75958699919283,1478408.149928435916081 6891657.88072778377682,1478399.071165190311149 6891653.864658541046083,1478385.448354968335479 6891648.729611102491617,1478367.953307596268132 6891647.825229956768453)",16,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1477868.43471504189074 6891004.698037818074226,1477841.366377748781815 6890998.337224533781409,1477822.247789982473478 6890988.803677652962506,1477801.393693512771279 6890979.193505993112922,1477780.595581200672314 6890971.77513572294265,1477763.119195208651945 6890968.602405070327222,1477746.32394973305054 6890970.012507430277765,1477735.211095642531291 6890976.940405210480094,1477727.559928260045126 6890986.489265248179436,1477721.952182406792417 6890998.613115126267076,1477719.236951056867838 6891012.116438466124237,1477720.869822144042701 6891025.681093722581863,1477726.029694780707359 6891040.45663124602288,1477739.381914934143424 6891078.698423445224762)",17,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478394.816369665553793 6891123.469907105900347,1478404.940170413581654 6891151.136080365628004,1478410.678545950446278 6891170.249553177505732,1478414.494798951782286 6891184.58085570205003,1478417.368652066681534 6891201.778452461585402,1478418.320382643025368 6891218.041097856126726,1478418.320382643025368 6891238.089720109477639,1478416.407590797403827 6891256.253079305402935,1478411.630276529816911 6891276.317124638706446,1478407.814023525686935 6891294.449914567172527,1478403.027378567960113 6891311.663074205629528,1478399.211125569650903 6891327.895286121405661,1478395.394872565520927 6891349.875500658527017,1478393.444757953984663 6891367.855176903307438,1478392.315744229592383 6891385.528333493508399,1478394.909676586044952 6891406.956896369345486,1478402.159624219173566 6891432.263520221225917)",22,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478458.908892544917762 6890873.620319033972919,1478432.279097772669047 6890943.113314905203879,1478416.715503631858155 6890979.362105399370193)",28,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478178.904158371733502 6891520.431132415309548,1478160.308089353842661 6891514.3304911153391,1478117.685488610062748 6891501.086903820745647,1478038.747834869194776 6891476.270564619451761)",31,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1477490.821612572530285 6890732.214502855204046,1477527.397924944991246 6890777.857686535455287,1477549.996860799379647 6890805.108844520524144,1477565.439155949512497 6890821.738533561117947,1477585.817387126618996 6890841.295704958960414,1477601.213028812082484 6890855.31988144479692,1477614.901153875980526 6890865.680928098037839,1477632.489508171333 6890878.494311951100826,1477649.452706102281809 6890888.77875323779881,1477668.282042416976765 6890898.771993438713253,1477686.439568916801363 6890907.033285750076175,1477707.200358462985605 6890915.171969769522548,1477725.833750249585137 6890922.13047450594604,1477746.855799174401909 6890927.847488413564861,1477770.742370518157259 6890933.595160651952028,1477794.628941864939407 6890937.411617287434638,1477821.380035630892962 6890941.228075731545687,1477850.043921245029196 6890945.059863138943911,1477902.482409899821505 6890949.82660922780633,1477940.458326059626415 6890951.343998450785875,1478028.540057893376797 6890957.306267951615155,1478070.472187433857471 6890961.96573100425303,1478111.23798048379831 6890968.004644367843866,1478151.201334026642144 6890975.683573756366968,1478187.992252313066274 6890986.795809898525476,1478222.38518277136609 6890997.340953027829528)",35,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1477811.713438789127395 6891164.670315036550164,1477832.45556695247069 6891186.404841492883861,1477851.910059632034972 6891203.111957489512861,1477871.719118598848581 6891219.497226990759373,1477905.897443146212026 6891245.355058864690363,1477930.74507576203905 6891262.215574943460524,1477950.162245669867843 6891274.998935245908797)",36,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1477917.271556612337008 6890861.695908572524786,1477919.660213744733483 6890873.497702899388969,1477929.681376882363111 6890876.225912362337112,1477939.068052962422371 6890882.433358696289361,1477964.755447848467156 6890903.79927234724164,1477993.242050317581743 6890920.735707654617727,1478017.072637509787455 6890931.70992370788008,1478043.179913533618674 6890940.982841396704316,1478070.173605292104185 6890947.926041314378381,1478124.907444161828607 6890961.429279524832964,1478156.893056107452139 6890970.763540306128561,1478188.804022510070354 6890982.151659685187042,1478222.38518277136609 6890997.340953027829528)",37,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478269.187933499692008 6891469.572158829309046,1478243.696483144769445 6891462.383258138783276,1478210.012685272842646 6891459.041724401526153,1478135.451126047875732 6891458.290645903907716,1478102.224532076856121 6891458.014739540405571,1478074.335093893809244 6891455.730848299339414,1478037.478860765462741 6891447.7142419135198,1478001.229122610529885 6891433.137220955453813,1477972.136025168234482 6891416.506267188116908,1477933.730897177709267 6891384.440046058036387,1477898.6754875916522 6891342.364820868708193,1477840.787874848581851 6891266.277431831695139,1477763.688367415918037 6891163.168213126249611)",38,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478396.486563521204516 6891050.220149672590196,1478391.046770125860348 6891088.599935160949826,1478387.930319021223113 6891118.01332129817456,1478386.372093471698463 6891145.495545344427228,1478382.163951405556872 6891187.385808815248311,1478378.506320169428363 6891208.921137149445713,1478372.991881239460781 6891239.009382877498865,1478369.520863838493824 6891260.422227461822331,1478362.756112190661952 6891278.784898377023637,1478355.926045695319772 6891294.327292013913393,1478345.830237028654665 6891312.904630331322551,1478327.989954053191468 6891332.294389794580638,1478310.998764046467841 6891350.411978059448302,1478297.571898355614394 6891364.145811591297388,1478283.641175301978365 6891375.396536458283663,1478263.253613431937993 6891389.712876693345606,1478242.194241744000465 6891402.603735917247832,1478220.360422622412443 6891413.885170697234571,1478198.479950044536963 6891423.005363918840885,1478177.131326905218884 6891429.734387061558664,1478158.199352977098897 6891435.007247400470078,1478137.298603048780933 6891440.096174038946629,1478114.988918640185148 6891442.518013746477664,1478088.275147637585178 6891441.828249195590615,1478056.961345518007874 6891437.214492295868695,1478035.164849167922512 6891430.991289503872395,1478017.959053244441748 6891424.292921440675855,1478000.762588013662025 6891417.594558958895504,1477984.517853362252936 6891408.04518685489893,1477967.237411904148757 6891395.414895111694932,1477937.668449172284454 6891367.441322010941803,1477910.376175272278488 6891334.287015947513282,1477853.272340653231367 6891256.406356768682599,1477773.756184012396261 6891153.373902422375977)",39,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478279.554332237923518 6891684.153840911574662,1478256.003665801370516 6891694.469970066100359,1478242.875382254831493 6891699.988261526450515)",41,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1477739.381914934143424 6891078.698423445224762,1477811.713438789127395 6891164.670315036550164)",42,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478697.42003969871439 6892579.422395704314113,1478646.241194454720244 6892500.149962106719613,1478632.450431780423969 6892479.929561247117817,1478614.591487424913794 6892458.988699334673584,1478590.975506143877283 6892442.984153510071337,1478571.063809560844675 6892437.419361997395754,1478552.589039536425844 6892437.266062008216977,1478536.241667274385691 6892440.991252523846924,1478522.674841206986457 6892446.663356624543667,1478512.373757313471287 6892454.711619316600263)",43,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478524.373027135850862 6892700.593760442920029,1478524.317042984068394 6892666.928051271475852,1478522.40425114124082 6892647.811019618995488,1478513.801353176590055 6892615.325967458076775,1478499.973267736379057 6892576.157048926688731,1478487.572778159286827 6892544.546107861213386,1478482.29160652612336 6892521.520175693556666,1478482.29160652612336 6892500.594535555690527,1478486.285142672481015 6892481.140637652948499,1478493.348476464860141 6892465.0440674116835,1478505.114478987408802 6892450.388551495037973)",45,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478512.373757313471287 6892454.711619316600263,1478501.456847751280293 6892464.492185577750206,1478494.216230813646689 6892477.461418758146465,1478490.399977812543511 6892496.578045293688774,1478490.399977812543511 6892516.629856382496655,1478495.335913845105097 6892541.725350976921618,1478506.187508562812582 6892572.999015279114246,1478520.015594006050378 6892612.183248752728105,1478528.618491964880377 6892644.66828821413219,1478531.91222621477209 6892665.68628600705415,1478531.977541062282398 6892701.467599032446742)",46,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1477773.756184012396261 6891153.373902422375977,1477609.890572311356664 6890941.044149981811643,1477495.477627843851224 6890800.066300450824201)",47,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1477763.688367415918037 6891163.168213126249611,1477606.559515292756259 6890944.523412792012095,1477495.477627843851224 6890800.066300450824201)",48,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478038.747834869194776 6891476.270564619451761,1478016.783386061200872 6891466.046684342436492,1477987.559658932499588 6891449.476974944584072,1477960.565967173781246 6891425.565151103772223,1477940.439664676785469 6891408.397731687873602,1477893.683567407075316 6891346.396062412299216,1477835.012176543008536 6891269.78749094158411,1477773.252326647052541 6891185.147977290675044,1477763.688367415918037 6891163.168213126249611)",50,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1477353.800401557935402 6890557.690723114646971,1477430.918570373440161 6890653.711285330355167)",51,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478431.31803650339134 6891617.70479725766927,1478395.805423010606319 6891558.521924624219537)",59,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478247.979270739946514 6891351.914114957675338,1478261.359482969157398 6891334.716197027824819,1478269.953050238080323 6891318.483971345238388,1478276.643156351288781 6891303.20210421551019,1478282.381531891180202 6891285.988962695933878,1478286.19778489228338 6891267.825536315329373,1478290.023368583526462 6891245.860873832367361,1478291.926829739008099 6891217.565939981490374,1478294.632730398792773 6891179.905936032533646,1478299.419375359313563 6891131.670120283961296,1478305.633616185979918 6891110.012379135005176,1478315.561472400324419 6891089.36630654707551,1478323.389922930859029 6891076.905116900801659,1478350.271646386012435 6891029.512921379879117)",62,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1478222.38518277136609 6890997.340953027829528,1478265.38101119431667 6891016.607333100400865,1478304.32731931633316 6891039.64428252261132)",63,motorway_link,0,0,1,motorways,3,0
|
||||
"LINESTRING (1479505.653905502287671 6891073.088594046421349,1479511.261651349952444 6891082.208400661125779,1479521.71202631550841 6891092.493102550506592,1479746.936268157558516 6891225.214452367275953,1479755.165938443038613 6891230.977664898149669,1479832.228123104199767 6891286.387485591694713,1479913.489119135309011 6891344.817286965437233,1479959.526753128273413 6891366.429676809348166,1480017.134445112897083 6891393.45290981978178,1480128.822827531956136 6891445.108463356271386)",165,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479467.789957643020898 6890509.550598309375346,1479441.747996460879222 6890586.856943410821259,1479449.529793532565236 6890590.320726469159126,1479457.666156894760206 6890598.397783920168877,1479463.22724928939715 6890607.670317178592086,1479467.556690343189985 6890622.843576487153769,1479469.021608978044242 6890645.833417885005474,1479472.46463430300355 6890697.59145475551486,1479478.305647450499237 6890719.830500395968556,1479480.489029361866415 6890744.552544073201716,1479485.7422089218162 6890800.280876728706062,1479493.141447621630505 6890875.21432897169143,1479491.368616155348718 6890886.081193597055972,1479490.071649975609034 6890894.005277621559799,1479503.097295911749825 6891055.03294020332396,1479505.653905502287671 6891073.088594046421349)",166,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1478892.478154525859281 6890538.8086022362113,1478857.935932998079807 6890331.031569452024996,1479014.271676310105249 6890305.038744745776057,1479049.942911565070972 6890299.475432928651571,1479065.637135392287746 6890291.306720341555774,1479071.926021756138653 6890284.80853839032352,1479078.233569500269368 6890275.796917401254177)",167,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479046.145319949602708 6890513.27489566989243,1479014.271676310105249 6890305.038744745776057)",168,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479203.460785916773602 6890490.040212746709585,1479046.145319949602708 6890513.27489566989243,1478892.478154525859281 6890538.8086022362113,1478782.002762058749795 6890554.196301298215985,1478765.692712562624365 6890556.571894911117852,1478744.437396341003478 6890562.901705839671195,1478733.203243254218251 6890567.423002410680056,1478725.150856119580567 6890575.346772366203368,1478720.952044752193615 6890584.603952579200268,1478718.61004107282497 6890595.868913067504764,1478718.684686610475183 6890607.517052077688277,1478721.138658590381965 6890619.165207961574197)",169,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479490.071649975609034 6890894.005277621559799,1479245.458230298943818 6890915.64710977114737,1479232.777819963172078 6890911.35552369710058)",170,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479186.796170124784112 6890329.437667407095432,1479194.335369206732139 6890321.713377351872623,1479221.870241096476093 6890288.900553298182786,1479238.29225889313966 6890269.344725587405264,1479371.861113895662129 6890102.84625062905252,1479378.177992332726717 6890095.842478349804878,1479401.150155866052955 6890069.130116234533489,1479433.070452967192978 6890027.628814021125436,1479445.853500913595781 6890008.594684292562306)",171,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479356.241535600507632 6892244.984189610928297,1479596.926733975531533 6891723.011840671300888)",173,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479565.510294239735231 6892254.902467562817037,1479723.329617572249845 6891860.342268580570817)",174,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479608.944665183546022 6891709.660609316080809,1479997.390700987540185 6891805.618287485092878)",175,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479584.125024646287784 6890393.883670332841575,1479781.721087680663913 6890154.202325228601694)",176,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479482.392490514554083 6891545.140309852547944,1479497.461557985516265 6891543.408212435431778,1480046.890021679922938 6891672.780055603943765)",177,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479238.29225889313966 6890269.344725587405264,1479244.002642357023433 6890273.712598342448473,1479250.888693001354113 6890278.75481229275465,1479261.31107589113526 6890279.383173528127372,1479275.157822717214003 6890275.015297694131732,1479297.010303219081834 6890236.869282925501466,1479430.597819601651281 6890091.566655383445323,1479511.784170098369941 6889997.928235160186887,1479526.340049513848498 6889979.62979072984308,1479584.209000873845071 6889912.566501155495644,1479958.248448334634304 6889556.784876331686974,1479970.714252753648907 6889544.877743250690401,1479991.111145313596353 6889525.645538517273962,1480003.334351745434105 6889522.212862986139953,1480012.739689214387909 6889526.059298608452082,1480015.688187863910571 6889532.327000443823636,1480017.050468885339797 6889535.238648432306945,1480013.766065325355157 6889548.034587628208101,1480003.222383442102 6889555.972677503712475,1479990.989846320124343 6889554.624121142551303,1479970.714252753648907 6889544.877743250690401)",178,unclassified,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1478735.713199388701469 6892210.431273595429957,1478737.803274379577488 6892156.517370771616697,1478747.012667317176238 6892105.30179741140455,1478856.713612355990335 6891712.665017653256655,1478875.897514964221045 6891664.70191867928952,1478898.291175603168085 6891642.306974301114678,1478920.675505543360487 6891632.711349874734879,1479150.145212217466906 6891598.774201380088925)",179,residential,0,0,1,minorroads,3,0
|
||||
"LINESTRING (1479232.777819963172078 6890911.35552369710058,1479225.509210946969688 6890904.029178469441831,1479219.015049364650622 6890835.992580109275877,1479415.566074902191758 6890596.129463358782232,1479426.510976537596434 6890588.466222968883812,1479433.854231088422239 6890586.182578745298088,1479441.747996460879222 6890586.856943410821259)",185,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479723.329617572249845 6891860.342268580570817,1479596.926733975531533 6891723.011840671300888)",188,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479094.002438864903525 6890258.861840659752488,1479102.166794305900112 6890249.972855378873646,1479110.592409119475633 6890237.283079625107348,1479113.904804755235091 6890222.585646998137236,1479107.16804518038407 6890125.037674428895116,1479369.173874618951231 6890088.94599081762135,1479378.177992332726717 6890095.842478349804878)",197,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479150.145212217466906 6891598.774201380088925,1479134.525633922312409 6891683.923912476748228,1479122.50770271429792 6891741.850757068023086,1479112.365240588784218 6891776.922836208716035,1479083.458756984677166 6891830.404985710047185,1479039.623166288714856 6891874.843419559299946,1478994.845175709342584 6891943.793224707245827,1478968.961836289614439 6891994.609211077913642,1478956.608000173931941 6892018.875299187377095,1478935.147408731281757 6892081.709938492625952,1478923.026839912869036 6892143.012125051580369,1478922.522982550086454 6892195.055733603425324,1478922.243061791639775 6892224.595805050805211)",200,residential,0,0,1,minorroads,3,0
|
||||
"LINESTRING (1478948.648919956991449 6892418.042266790755093,1478932.982688202988356 6892462.407298980280757,1478924.323806092375889 6892507.707714077085257,1478923.16680029197596 6892543.764267535880208,1478928.690569914877415 6892595.135937471874058,1478954.200681655900553 6892647.565733219496906,1478981.091735800961033 6892698.110219702124596,1478998.14824065216817 6892739.042748300358653,1479008.262710707494989 6892770.393833446316421,1479017.257497728569433 6892806.252266069874167,1479018.65710151870735 6892835.779252862557769,1479019.179620267124847 6892907.067596364766359)",201,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1478917.605707900365815 6892380.08537070825696,1478948.648919956991449 6892418.042266790755093,1478994.257342116441578 6892488.667711554095149,1479021.055089343804866 6892527.437619337812066,1479045.053628993919119 6892554.863341205753386,1479059.282934189308435 6892565.96243020426482,1479069.22945178928785 6892573.719537409953773,1479138.341886926209554 6892625.474657708778977,1479163.90798281878233 6892643.380535209551454,1479204.5151541037485 6892671.818462022580206,1479218.987057288642973 6892679.161748955026269,1479293.669915507314727 6892716.982082463800907,1479382.861999682616442 6892764.108276013284922)",202,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1478922.690935002407059 6892238.254484030418098,1478923.446721050655469 6892317.493675459176302,1478917.605707900365815 6892380.08537070825696)",203,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479434.777969588991255 6891585.561131720431149,1479383.543140193447471 6891577.667022745124996)",204,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479354.879254579078406 6892263.487076595425606,1479349.467453256715089 6892329.95678826700896,1479349.355484956176952 6892342.527229115366936,1479352.994454809231684 6892359.236747993156314,1479354.991222882410511 6892368.404003384523094,1479365.450928538106382 6892387.980267693288624,1479382.470110620604828 6892403.647445440292358,1479415.538082826416939 6892422.043387837707996,1479449.315187618602067 6892436.146972191520035,1479465.634567807661369 6892439.780182166956365,1479506.027133178431541 6892443.306083716452122,1479520.704311587382108 6892443.949944161809981,1479571.528590538073331 6892439.105662046931684,1479589.126275520771742 6892444.087914266623557,1479616.297250424511731 6892460.996934827417135,1479667.821331271668896 6892498.969543068669736,1479700.124186736298725 6892523.865690400823951,1479709.174957911716774 6892527.560260701924562,1479717.899154869839549 6892526.05790411029011,1479767.417136950884014 6892498.601620291359723,1479779.584359225351363 6892492.408255994319916)",215,residential,0,0,1,minorroads,3,0
|
||||
"LINESTRING (1479064.209539529168978 6890130.202399942092597,1479107.16804518038407 6890125.037674428895116)",216,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479511.784170098369941 6889997.928235160186887,1479577.425587837351486 6890050.785533404909074)",218,unclassified,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1478743.644287527073175 6890644.500005290843546,1478764.862280979752541 6890650.661292929202318,1478794.823132770834491 6890656.071581743657589,1478844.219815858406946 6890657.343689843080938,1478888.745877755107358 6890655.642436888068914,1478931.480446802219376 6890650.891191814094782,1478963.578027048613876 6890644.591964773833752,1479008.439993852749467 6890630.675441741943359,1479056.194475160446018 6890605.585912075825036,1479095.672632720787078 6890583.837629308924079,1479133.965792407980189 6890555.943512021563947,1479203.460785916773602 6890490.040212746709585,1479266.862837587017566 6890414.650566106662154)",235,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479383.543140193447471 6891577.667022745124996,1479323.005610939580947 6891573.329098201356828,1479299.119039598386735 6891575.842948182485998,1479238.852100410265848 6891583.553114917129278,1479171.10194629477337 6891595.187356659211218,1479150.145212217466906 6891598.774201380088925)",236,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479596.926733975531533 6891723.011840671300888,1479465.550591580104083 6891589.531181692145765,1479434.777969588991255 6891585.561131720431149)",285,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1478721.138658590381965 6890619.165207961574197,1478727.371560799656436 6890630.690768297761679,1478735.050720260944217 6890638.997764837928116,1478743.644287527073175 6890644.500005290843546)",289,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1478553.951320560649037 6891315.418398878537118,1478529.78482845518738 6891312.260860466398299,1478502.221964489435777 6891308.628160036168993,1478489.158995784586295 6891306.911441416479647)",296,unclassified,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1478598.850610133260489 6891319.848151468671858,1478619.014235399430618 6891314.222825936973095,1478629.520594513742253 6891309.455863785929978,1478638.123492472805083 6891299.891292298212647,1478656.850191182689741 6891252.574420961551368)",318,unclassified,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1478362.989379487698898 6891563.457646118476987,1478372.702629790874198 6891539.468841813504696,1478383.955444257706404 6891522.730370282195508,1478405.789263379527256 6891501.899299177341163,1478420.401126943761483 6891493.03959580976516,1478439.109164268011227 6891484.793029486201704,1478451.080442011589184 6891482.585771531797945,1478466.158840178279206 6891481.390173728577793,1478478.036811004159972 6891474.906357950530946,1478487.899352376582101 6891463.640165685676038,1478507.064593604533002 6891401.454134074039757,1478520.276853378862143 6891359.056933037005365,1478529.78482845518738 6891312.260860466398299)",320,unclassified,0,0,1,minorroads,3,0
|
||||
"LINESTRING (1478237.248975021298975 6891675.033351420424879,1478264.074714324669912 6891662.709210627712309)",322,unclassified,0,0,1,minorroads,3,0
|
||||
"LINESTRING (1478917.605707900365815 6892380.08537070825696,1478763.248071275651455 6892276.22604011092335,1478747.908413741970435 6892253.584117701277137,1478739.464137542527169 6892228.489522617310286)",323,residential,0,0,1,minorroads,3,0
|
||||
"LINESTRING (1478079.187053699046373 6892810.37622603494674,1478145.453627796843648 6892613.685621440410614,1478151.313302329974249 6892587.37880960572511,1478163.71379190729931 6892357.366506541147828,1478160.606671495363116 6892351.387868744321167,1478139.976511632790789 6892311.59171611443162)",330,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1478763.248071275651455 6892276.22604011092335,1478726.867703434312716 6892307.789936803281307)",335,residential,0,0,1,minorroads,3,0
|
||||
"LINESTRING (1478755.606234583305195 6889945.040633909404278,1478753.161593299126253 6889966.633935891091824,1478748.785498783690855 6889984.227385916747153,1478740.005317673785612 6890001.008630651049316,1478657.895228676730767 6890098.125983302481472)",338,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1477786.39927157945931 6890262.126246342435479,1478094.340097397565842 6890523.819417727179825,1478155.810695839114487 6890564.786856304854155)",346,unclassified,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1477842.131494486937299 6889810.838566199876368,1477906.373308435780928 6889868.935817634686828,1478137.494547579903156 6890058.632166887633502,1478153.804597075795755 6890076.363747696392238,1478161.362457540817559 6890099.060841219499707,1478176.627469539875165 6890170.079709811136127,1478184.745171522023156 6890192.792393619194627,1478195.494128623511642 6890209.911240221001208,1478209.71410313132219 6890228.547376076690853,1478261.070231520570815 6890273.49803611356765,1478292.038798042573035 6890286.525038770399988)",432,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1478726.867703434312716 6892307.789936803281307,1478725.262824423145503 6892320.069077261723578,1478849.314373653382063 6892600.225598565302789)",449,residential,0,0,1,minorroads,3,0
|
||||
"LINESTRING (1477170.004431890556589 6892330.416682093404233,1477226.473779457621276 6892480.77271568775177)",497,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1477206.375469039194286 6890495.557677546516061,1477167.625105448300019 6890527.559048051945865,1477202.689845727290958 6890575.867871635593474)",504,residential,0,0,1,minorroads,3,0
|
||||
"LINESTRING (1477056.785815992159769 6892691.840049274265766,1477047.42713198508136 6892531.960020915605128,1477034.205541517818347 6892466.163161252625287,1477014.965654755244032 6892407.817188702523708,1477005.485671751899645 6892378.107815207913518,1476984.137048612581566 6892331.842353134416044,1476956.555523263756186 6892281.284839883446693,1476909.892732914770022 6892184.90758672170341)",523,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1476392.496534616453573 6892429.171826844103634,1476550.259873797185719 6892335.797441869974136,1476622.861987715121359 6892298.960004699416459,1476700.521336662117392 6892264.85141708701849,1476909.892732914770022 6892184.90758672170341,1477091.430675133131444 6892112.736543129198253,1477219.41977636096999 6892066.212010371498764,1477229.84215924795717 6892055.54283092636615)",525,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1477005.485671751899645 6892378.107815207913518,1477065.827256471849978 6892358.362946599721909,1477125.282425462966785 6892342.404590574093163,1477170.004431890556589 6892330.416682093404233)",526,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1477226.473779457621276 6892480.77271568775177,1477166.915972861694172 6892497.804454318247736,1477136.208665715297684 6892506.573284320533276,1477105.706633787136525 6892515.296133446507156,1477047.42713198508136 6892531.960020915605128)",527,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1477091.430675133131444 6892112.736543129198253,1477170.004431890556589 6892330.416682093404233)",528,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1477226.473779457621276 6892480.77271568775177,1477255.268294758396223 6892486.061595555394888,1477275.814478393411264 6892495.91885052062571)",529,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1477275.814478393411264 6892495.91885052062571,1477328.626194727374241 6892664.521173093467951)",530,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1477459.5917866777163 6892447.751787870191038,1477537.027199015021324 6892540.912850533612072,1477573.267606480047107 6892584.466056008823216,1477587.123683996265754 6892602.264529967680573)",531,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1477275.814478393411264 6892495.91885052062571,1477459.5917866777163 6892447.751787870191038)",532,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1476599.497935119783506 6892427.807458454743028,1476729.035931204212829 6892369.20115651935339,1476956.555523263756186 6892281.284839883446693)",533,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1476699.578936775680631 6892648.255601234734058,1476829.256893242476508 6892551.184088567271829,1477014.965654755244032 6892407.817188702523708)",534,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1477131.048793075839058 6890631.24252425506711,1476933.564698341768235 6890379.676385825499892)",536,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1477050.235670255264267 6890288.333494927734137,1476933.564698341768235 6890379.676385825499892,1476902.820068429457024 6890398.910633538849652,1476831.654881067806855 6890456.920177238993347)",537,residential,0,0,1,minorroads,3,0
|
||||
"LINESTRING (1476942.736768513685092 6890783.32936832588166,1476752.110732350964099 6890533.904162514954805,1476753.948878661962226 6890517.596921934746206,1476575.592702392954379 6890272.946304704993963,1476409.226465250365436 6890059.260510915890336,1476395.724954024655744 6890059.306487303227186,1476182.322698862291873 6889785.015997536480427)",552,residential,0,0,1,minorroads,3,0
|
||||
"LINESTRING (1475786.729353038361296 6891662.356654640287161,1475992.471110128099099 6891500.68837027810514,1476100.436546466313303 6891415.663224364630878,1476197.223813875345513 6891340.402848524972796,1476278.139574306318536 6891277.49736415874213,1476321.676582857733592 6891244.343429019674659,1476489.871635615592822 6891115.576251862570643,1476493.678557923762128 6891113.246475487947464,1476512.825137766078115 6891098.624078639782965,1476574.920892572263256 6891049.53041878528893,1476642.055221018847078 6890998.321897276677191,1476664.887424173066393 6890986.290011228993535,1476689.865686475299299 6890974.840577159076929,1476942.736768513685092 6890783.32936832588166,1477029.446888633305207 6890709.37768148444593,1477131.048793075839058 6890631.24252425506711,1477191.548999560764059 6890584.63460551109165,1477202.689845727290958 6890575.867871635593474,1477245.125832630088553 6890544.065551890060306)",553,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1476209.33505200385116 6889063.703335772268474,1476378.08994627604261 6889279.645944504998624,1476389.286776594119146 6889290.434032781980932,1476403.721357013098896 6889290.434032781980932,1476463.493769522989169 6889363.667758987285197,1476927.490417897468433 6889968.91740414686501,1477296.220701646525413 6890447.448577187024057,1477305.336787663633004 6890453.180579769425094)",554,unclassified,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1477029.446888633305207 6890709.37768148444593,1476831.654881067806855 6890456.920177238993347,1476647.672297562239692 6890213.635398782789707)",559,residential,0,0,0,minorroads,3,0
|
||||
"LINESTRING (1479591.626900956500322 6890520.325010627508163,1479593.922251174226403 6890511.037251781672239,1479600.099169231951237 6890495.251151624135673,1479608.85135826584883 6890481.411518443375826,1479619.36704807030037 6890469.027902306057513,1479629.257581518730149 6890462.728817746974528,1479643.738815393997356 6890454.146131407469511,1479658.985166010214016 6890448.720652269199491,1479858.307407052256167 6890380.24345064163208,1480100.522838903823867 6890293.513651255518198)",67,tertiary,0,0,0,mainroads,4,0
|
||||
"LINESTRING (1477367.992383987177163 6890698.603015801869333,1477349.881510943174362 6890675.812269823625684,1477245.125832630088553 6890544.065551890060306)",76,tertiary,0,0,0,mainroads,4,0
|
||||
"LINESTRING (1477245.125832630088553 6890544.065551890060306,1477206.375469039194286 6890495.557677546516061,1477050.235670255264267 6890288.333494927734137,1476863.48187124566175 6890045.559557152912021,1476700.614643579581752 6889836.354716989211738,1476482.229798923013732 6889550.532479927875102,1476148.77886136691086 6889111.926746366545558,1476140.558521774364635 6889102.134934161789715,1476127.560867911204696 6889083.470761761069298,1476121.029383563203737 6889075.579109120182693)",98,tertiary,0,0,0,mainroads,4,0
|
||||
"LINESTRING (1477440.221270225942135 6890807.515166061930358,1477433.064629515865818 6890796.72504198551178,1477425.628068044548854 6890779.620272696949542,1477416.483989951433614 6890762.960017169825733)",140,tertiary,0,0,0,mainroads,4,0
|
||||
"LINESTRING (1477601.352989191422239 6891019.243627357296646,1477589.045806534821168 6891029.896104246377945,1477529.049457415007055 6891078.468512326478958,1477462.521623944398016 6891132.436495768837631)",65,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1478347.248502201633528 6892208.147168586961925,1478342.172605789732188 6892190.916759766638279,1478325.657281069783494 6892141.203251630999148)",66,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479405.974123598309234 6890464.384051165543497,1479414.754304702393711 6890467.663866545073688,1479438.323632521787658 6890477.058859107084572,1479453.616636599646881 6890482.744903990067542)",68,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478942.192081137793139 6890130.999331175349653,1478922.700265695340931 6890097.880774687975645,1478913.39756584004499 6890080.455656515434384)",69,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478371.433655687142164 6890928.767115697264671,1478421.474156513577327 6890821.386014446616173,1478431.82189386873506 6890796.433831455186009,1478464.609945313073695 6890729.379055060446262,1478502.968419844750315 6890668.378852861002088,1478530.932503562653437 6890635.120143613778055,1478590.24771217443049 6890558.411064649000764,1478600.64210298541002 6890542.839440878480673,1478604.346387683181092 6890537.306617256253958,1478629.184689603513107 6890499.098052786663175,1478658.809636487159878 6890449.410331619903445,1478680.783415985293686 6890415.018393527716398)",70,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479356.241535600507632 6892244.984189610928297,1479354.879254579078406 6892263.487076595425606)",71,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1478687.930726005230099 6892209.189578847959638,1478735.713199388701469 6892210.431273595429957,1478922.243061791639775 6892224.595805050805211)",72,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478357.316318792523816 6892236.261633796617389,1478331.460971454158425 6892240.814530819654465,1478302.573149230098352 6892246.517152946442366,1478272.724265742348507 6892252.940272497013211,1478243.276602006983012 6892261.908121032640338,1478210.040677348850295 6892275.42889619525522,1478139.976511632790789 6892311.59171611443162,1478016.484803919447586 6892382.200895741581917,1477743.403443159302697 6892544.331485021859407,1477660.07103352015838 6892595.227919272147119,1477634.187694100197405 6892612.566507063806057,1477623.578697375254706 6892624.202238139696419,1477615.778238917700946 6892632.756580822169781,1477604.963966968702152 6892661.623721974901855,1477604.609400675399229 6892681.859910343773663)",73,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478512.980252289446071 6892501.529672888107598,1478525.371411173837259 6892530.396342795342207,1478531.641636149259284 6892551.858618092723191,1478539.078197620576248 6892576.92356213927269,1478543.603583205491304 6892616.000502363778651,1478545.647004743106663 6892654.541068081744015,1478545.684327509021387 6892718.913729729130864,1478543.836850505322218 6892759.263800947926939,1478540.533785562496632 6892805.838337119668722,1478537.08142954739742 6892857.456974725238979)",74,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478185.743555557215586 6892242.623426643200219,1478266.323411077726632 6892206.675530795939267,1478294.147534419083968 6892193.936677500605583)",75,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1477462.521623944398016 6891132.436495768837631,1477504.994933616137132 6891184.151682637631893,1477516.453023307025433 6891195.61674244236201,1477529.674613774055615 6891209.641537031158805,1477544.967617851914838 6891218.546911101788282,1477559.924717016518116 6891225.87354295141995,1477576.020160598680377 6891231.130941885523498,1477592.899382304633036 6891232.878299727104604,1477611.047578108729795 6891232.878299727104604,1477626.340582186589018 6891228.111385807394981,1477641.6242555687204 6891222.363503010012209,1477687.951141010504216 6891192.24466432724148,1477698.952026794664562 6891185.101994454860687)",77,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1478086.567631015786901 6891649.909905299544334,1478125.196695613209158 6891674.772766153328121,1478142.915679592173547 6891681.685942734591663,1478159.589626074302942 6891686.315168510191143,1478175.087905370397493 6891688.721753821708262,1478194.67302773357369 6891689.365553838200867,1478206.467022337485105 6891687.633425346575677)",78,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478237.248975021298975 6891675.033351420424879,1478242.875382254831493 6891699.988261526450515)",79,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478347.248502201633528 6892208.147168586961925,1478371.750899214530364 6892203.548301403410733)",80,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478371.750899214530364 6892203.548301403410733,1478382.453202857170254 6892232.153297962620854)",81,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478357.316318792523816 6892236.261633796617389,1478347.248502201633528 6892208.147168586961925)",82,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478382.453202857170254 6892232.153297962620854,1478357.316318792523816 6892236.261633796617389)",83,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479591.626900956500322 6890520.325010627508163,1479585.384668057085946 6890546.502448085695505)",84,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1478242.875382254831493 6891699.988261526450515,1478212.02811472909525 6891713.140204788185656)",85,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478913.39756584004499 6890080.455656515434384,1478902.919198798481375 6890060.471222716383636,1478901.482272242428735 6890051.766362176276743,1478896.611651054350659 6890025.77444030251354,1478895.202716574305668 6890003.031577592715621,1478891.041227969806641 6889935.293782743625343)",86,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478206.467022337485105 6891687.633425346575677,1478237.248975021298975 6891675.033351420424879)",87,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478891.041227969806641 6889935.293782743625343,1478923.241445826832205 6889993.42258417326957,1478944.664714500773698 6890030.004252052865922,1478948.424983350094408 6890035.276194448582828,1478965.164244676940143 6890062.325604433193803)",88,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1480004.127460559597239 6892298.699399212375283,1479952.398104491410777 6892295.096912450157106,1479897.916194301797077 6892292.076956707052886,1479756.929439219413325 6892285.025287828408182,1479744.82753178384155 6892283.798911259509623,1479593.00784336659126 6892275.26026960555464,1479563.980060763191432 6892273.619992980733514,1479551.467602882767096 6892272.914827428758144,1479354.879254579078406 6892263.487076595425606,1479238.124306440819055 6892256.75735551957041)",89,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1477166.010895744198933 6890934.453480053693056,1477233.434475639369339 6890900.503951973281801,1477338.096847037784755 6890853.449989835731685,1477440.221270225942135 6890807.515166061930358)",90,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478922.690935002407059 6892238.254484030418098,1478922.243061791639775 6892224.595805050805211)",91,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1477743.403443159302697 6892544.331485021859407,1477711.763066816842183 6892498.678270866163075)",93,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1478394.097906388808042 6892344.934010887518525,1478418.469673712505028 6892336.287995646707714)",94,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1478206.467022337485105 6891687.633425346575677,1478203.621161298360676 6891671.952314448542893,1478190.950081655522808 6891606.959570964798331,1478184.297298308229074 6891568.669280803762376,1478181.7500194106251 6891550.612513891421258,1478178.904158371733502 6891520.431132415309548,1478177.205972440075129 6891489.069593496620655)",95,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478739.464137542527169 6892228.489522617310286,1478735.713199388701469 6892210.431273595429957)",96,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478544.135432646842673 6892221.683182909153402,1478529.290301782777533 6892221.10065860580653,1478515.340917346067727 6892220.410827253945172,1478479.884288007859141 6892219.751655120402575,1478450.119380745105445 6892221.514557450078428,1478435.358226108597592 6892223.185482617467642,1478397.102389190113172 6892229.700561141595244,1478382.453202857170254 6892232.153297962620854)",99,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478371.750899214530364 6892203.548301403410733,1478390.356298925122246 6892200.773652814328671,1478423.946789876557887 6892198.397573292255402,1478426.568714311579242 6892198.351584662683308,1478451.742921142140403 6892197.86103930324316,1478527.237549557816237 6892200.804311908781528)",100,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478472.802292829845101 6892429.708376270718873,1478484.279043906368315 6892448.686919055879116)",101,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478431.579295878997073 6892449.652710394002497,1478394.097906388808042 6892344.934010887518525,1478379.915254652500153 6892302.271228101104498,1478363.931779373902828 6892254.166644357144833,1478357.316318792523816 6892236.261633796617389)",103,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478382.453202857170254 6892232.153297962620854,1478389.077994128456339 6892251.89785656798631,1478418.469673712505028 6892336.287995646707714,1478423.265649365726858 6892349.165043009445071,1478442.53352820710279 6892385.251545143313706,1478472.802292829845101 6892429.708376270718873)",104,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1480128.794835455948487 6890683.199713693931699,1480037.745943589601666 6890661.297954847104847,1479908.067987125832587 6890628.069927993230522,1479700.842650018632412 6890575.729933591559529,1479627.876639111666009 6890557.491479728370905,1479585.384668057085946 6890546.502448085695505)",105,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479285.906779821496457 6890425.80800533015281,1479266.862837587017566 6890414.650566106662154)",106,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479220.367999695939943 6892255.622961183078587,1479175.095482441131026 6892253.338843335397542,1478949.302068391814828 6892240.109368146397173,1478922.690935002407059 6892238.254484030418098,1478739.464137542527169 6892228.489522617310286)",108,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478973.058010046370327 6890074.815872622653842,1478987.24999247584492 6890117.681394563056529,1478991.019592018099502 6890132.409286628477275,1478995.115765775088221 6890146.44755226187408,1479000.21032356726937 6890161.589289834722877,1479007.926805797265843 6890178.493510303087533,1479018.778400514973328 6890192.562507837079465,1479037.449115067487583 6890212.026194254867733,1479094.002438864903525 6890258.861840659752488,1479124.859037083573639 6890282.417699187062681,1479175.655323958257213 6890321.176968595944345,1479186.796170124784112 6890329.437667407095432)",111,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479233.776204001158476 6892239.772116457112134,1479356.241535600507632 6892244.984189610928297,1479565.510294239735231 6892254.902467562817037,1479746.880284008570015 6892264.08493363391608,1479758.142429168568924 6892264.774768739938736,1479997.623968284577131 6892279.721210523508489)",113,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479173.966468716738746 6890346.066372577100992,1479186.796170124784112 6890329.437667407095432)",114,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1479078.233569500269368 6890275.796917401254177,1479094.002438864903525 6890258.861840659752488)",116,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1477871.81242551933974 6890936.997784550301731,1477872.456243261462077 6890928.291974918916821,1477877.485486214514822 6890906.496837940067053,1477884.352875475771725 6890890.617998971603811,1477892.591876451391727 6890882.540647934190929,1477899.328636026475579 6890876.057315123267472,1477917.271556612337008 6890861.695908572524786)",117,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1478191.472600403940305 6891373.802427344955504,1478196.94038587808609 6891352.28198526147753,1478203.341240539913997 6891334.992099165916443,1478208.361152797238901 6891321.442249881103635,1478221.190854205284268 6891283.076680599711835,1478240.664008267689496 6891229.552189072594047,1478281.392478548688814 6891130.99570990819484,1478329.772116212407127 6891020.117283202707767)",118,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478420.186521029798314 6891416.536923290230334,1478405.378712934441864 6891441.123156609944999,1478385.07512729219161 6891463.931400388479233)",119,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478385.07512729219161 6891463.931400388479233,1478355.739431857131422 6891480.838359414599836,1478325.330706852255389 6891498.09790275990963,1478305.652277571614832 6891510.099898357875645,1478287.214830313343555 6891523.757363410666585,1478269.365216647740453 6891538.748412380926311,1478261.592750268988311 6891547.424226494506001,1478253.922921500634402 6891557.556240336969495,1478246.822264939546585 6891571.428382882848382,1478241.718376454431564 6891583.645085142925382,1478236.801101807504892 6891598.774201380088925,1478234.319137751823291 6891611.496783165261149,1478233.152801261516288 6891624.955150639638305,1478233.227446796139702 6891641.785805906169116,1478234.375121903605759 6891657.788756710477173,1478237.248975021298975 6891675.033351420424879)",121,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478922.243061791639775 6892224.595805050805211,1478942.052120761480182 6892225.622887848876417,1479174.98351413779892 6892237.625969672575593,1479215.245449822163209 6892238.729702232405543)",122,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478436.51523190876469 6891092.385810512118042,1478442.458882669685408 6891118.810350452549756,1478447.432141468161717 6891137.770471206866205,1478455.363229612121359 6891162.769696334376931,1478465.543014509370551 6891191.432300264947116,1478473.483433340443298 6891211.542166809551418,1478480.826687894295901 6891235.974496131762862,1478485.594671468948945 6891257.954459356144071,1478487.899352376582101 6891275.734668834134936,1478489.158995784586295 6891289.759603191167116,1478489.158995784586295 6891306.911441416479647)",123,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478739.464137542527169 6892228.489522617310286,1478695.637877542292699 6892227.661724239587784)",124,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479563.980060763191432 6892273.619992980733514,1479565.510294239735231 6892254.902467562817037)",126,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1478942.192081137793139 6890130.999331175349653,1478922.401683553820476 6890133.711963083595037,1478910.029186052503064 6890135.275175113230944,1478897.096847034059465 6890139.121904042549431,1478884.817656453233212 6890149.711912300437689,1478838.360141325276345 6890218.141173175536096,1478809.602948790416121 6890263.490247231908143,1478795.187029757071286 6890294.724398334510624,1478786.481494184816256 6890326.46442789491266,1478781.480243310332298 6890359.43066562525928,1478776.385685515357181 6890382.649645018391311,1478763.472007882548496 6890417.455250608734787,1478747.693807828007266 6890450.713059439323843)",127,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478680.783415985293686 6890415.018393527716398,1478708.486240330385044 6890367.231622180901468,1478737.150125944754109 6890321.376206131651998,1478779.343514857813716 6890266.785306516103446,1478790.773612475488335 6890251.980539125390351,1478894.400277064414695 6890106.524382934905589,1478899.942708073183894 6890099.612560700625181,1478913.39756584004499 6890080.455656515434384)",128,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478809.602948790416121 6890263.490247231908143,1478790.773612475488335 6890251.980539125390351)",129,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478747.693807828007266 6890450.713059439323843,1478714.336584170814604 6890522.455372669734061,1478696.636261577485129 6890557.292236343957484,1478687.492183484369889 6890575.28546657320112,1478674.457206855295226 6890599.087476109154522,1478663.092424082104117 6890614.521270107477903,1478635.884126409655437 6890651.596215098164976,1478600.660764371277764 6890704.365850842557847,1478580.217218346660957 6890739.310790088959038,1478575.94376144465059 6890746.238489062525332,1478525.688654698198661 6890826.290629548951983,1478502.744483237853274 6890866.248027193360031,1478484.400342902867123 6890899.676290327683091,1478466.102856026496738 6890932.568242912180722,1478451.155087549006566 6890967.130994181148708)",130,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478212.02811472909525 6891713.140204788185656,1478199.170421248069033 6891718.367265134118497,1478187.143159347353503 6891720.421301508322358,1478175.936998336343095 6891718.750480834394693,1478161.875645596301183 6891715.209568447433412,1478141.842650016769767 6891706.65620210301131,1478116.659112496068701 6891686.514439879916608,1478086.567631015786901 6891649.909905299544334)",131,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479186.796170124784112 6890329.437667407095432,1479194.130093982676044 6890335.261541805230081,1479279.664546919055283 6890398.466176299378276,1479297.47683781851083 6890409.209787493571639)",132,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478086.567631015786901 6891649.909905299544334,1478075.426784849492833 6891635.39383159019053,1478052.874502453953028 6891606.26979230903089,1478037.180278623942286 6891587.247253092937171,1478002.040892810327932 6891541.829398297704756,1477825.784122222103179 6891305.424640764482319,1477691.104914883850142 6891132.620425897650421,1477677.911316492594779 6891115.560924383811653,1477601.352989191422239 6891019.243627357296646,1477547.608203666983172 6890950.087170991115272,1477456.633957332465798 6890828.666303563863039,1477454.497228882741183 6890826.259975696913898,1477452.211209358181804 6890823.685052404180169,1477440.221270225942135 6890807.515166061930358)",133,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1479627.876639111666009 6890557.491479728370905,1479634.464107617270201 6890532.50946301408112)",134,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1478016.484803919447586 6892382.200895741581917,1477995.042873862665147 6892323.962841073982418)",136,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1478472.802292829845101 6892429.708376270718873,1478431.579295878997073 6892449.652710394002497)",137,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1476901.859007160179317 6891178.373176074586809,1476933.797965641599149 6891127.102523874491453,1476969.217272213893011 6891077.533540516160429,1477002.779771094908938 6891043.859300371259451,1477030.258658833103254 6891020.699720491655171,1477070.79118458321318 6890988.573769110254943,1477117.099408636335284 6890959.789270952343941,1477166.010895744198933 6890934.453480053693056)",139,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1477342.883491998305544 6890867.014377377927303,1477338.096847037784755 6890853.449989835731685)",141,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1477452.211209358181804 6890823.685052404180169,1477342.883491998305544 6890867.014377377927303,1477317.485348558053374 6890876.701050061732531,1477166.010895744198933 6890934.453480053693056)",142,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1477801.412354895845056 6891105.552087247371674,1477825.746799453394488 6891083.940398719161749,1477842.486060780240223 6891060.520138014107943,1477854.112102926243097 6891041.897400882095098,1477860.41031997743994 6891025.880348713137209,1477868.43471504189074 6891004.698037818074226,1477870.207546508172527 6890978.105273565277457)",144,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1478212.02811472909525 6891713.140204788185656,1478206.467022337485105 6891687.633425346575677)",145,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478325.657281069783494 6892141.203251630999148,1478321.449139009229839 6892126.425690860487521,1478318.136743376497179 6892116.154995526187122,1478308.647429679986089 6892080.483592945151031,1478266.19278139132075 6891904.336327421478927,1478249.052300312556326 6891837.149678730405867,1478217.355939821107313 6891730.72214855439961,1478215.956336030969396 6891726.108225850388408,1478212.02811472909525 6891713.140204788185656)",146,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478185.743555557215586 6892242.623426643200219,1478218.251686245668679 6892235.403175389394164,1478245.870534363202751 6892229.562594718299806,1478299.018155604368076 6892218.111389826983213,1478347.248502201633528 6892208.147168586961925)",147,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479585.384668057085946 6890546.502448085695505,1479467.789957643020898 6890509.550598309375346)",148,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479591.626900956500322 6890520.325010627508163,1479634.464107617270201 6890532.50946301408112)",149,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478973.058010046370327 6890074.815872622653842,1478972.078287394251674 6890093.298440041951835,1478970.389432155527174 6890104.179573393426836,1478967.524909733561799 6890114.463024233467877,1478959.080633534118533 6890122.340371028520167,1478942.192081137793139 6890130.999331175349653)",150,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478965.164244676940143 6890062.325604433193803,1478973.058010046370327 6890074.815872622653842)",151,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478913.39756584004499 6890080.455656515434384,1478927.160336438566446 6890063.367736498825252,1478940.176651681773365 6890058.325657619163394,1478952.801077865762636 6890058.877374304458499,1478965.164244676940143 6890062.325604433193803)",152,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478242.875382254831493 6891699.988261526450515,1478246.253092732280493 6891712.113187463954091,1478248.763048860942945 6891721.111089956946671,1478265.091759745730087 6891789.477083542384207,1478290.042029966600239 6891901.331847446970642,1478313.816633009817451 6892003.132225465960801,1478335.35186998709105 6892086.538675913587213,1478348.993341592140496 6892131.4230787018314,1478366.684333492536098 6892186.885094705037773,1478371.750899214530364 6892203.548301403410733)",153,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1477711.763066816842183 6892498.678270866163075,1477867.380346852121875 6892398.006031540222466,1477903.396817710250616 6892373.278902645222843,1477936.726049288874492 6892354.607134696096182,1477974.254092237679288 6892334.525068153627217,1477995.042873862665147 6892323.962841073982418,1478115.819350223056972 6892267.411472347564995,1478185.743555557215586 6892242.623426643200219)",154,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478512.00052963453345 6892854.268168974667788,1478514.146588779985905 6892802.557567667216063,1478515.00501243583858 6892781.048631047829986,1478514.333202617941424 6892738.414194788783789,1478511.673955417005345 6892685.2786047719419,1478511.56198711367324 6892666.652103416621685,1478509.882462567882612 6892647.565733219496906,1478505.338415597099811 6892630.104427010752261,1478498.247089728945866 6892607.768114305101335,1478458.563656944548711 6892511.739540040493011,1478431.579295878997073 6892449.652710394002497)",155,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1477587.123683996265754 6892602.264529967680573,1477695.331718327244744 6892512.33741554338485,1477711.763066816842183 6892498.678270866163075)",156,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478115.819350223056972 6892267.411472347564995,1478139.976511632790789 6892311.59171611443162)",157,secondary,0,0,0,mainroads,5,0
|
||||
"LINESTRING (1478489.158995784586295 6891306.911441416479647,1478483.047392571577802 6891339.299239296466112,1478476.786498283268884 6891360.712351007387042,1478468.631473538232967 6891378.140244230628014,1478458.498342099832371 6891397.361552857793868,1478446.163167367456481 6891415.663224364630878,1478431.457996882498264 6891431.757693529129028,1478410.566577647114173 6891449.216396995820105,1478385.07512729219161 6891463.931400388479233)",158,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478294.147534419083968 6892193.936677500605583,1478305.512317192507908 6892186.823776624165475,1478311.166716501815245 6892179.726211540400982,1478316.130644607590511 6892167.67722771782428,1478325.657281069783494 6892141.203251630999148)",159,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479634.464107617270201 6890532.50946301408112,1479915.066006073495373 6890602.474631934426725,1480044.492033854592592 6890635.825165513902903,1480127.133972293231636 6890656.025601936504245)",160,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479266.862837587017566 6890414.650566106662154,1479180.236693697748706 6890350.648851290345192,1479173.966468716738746 6890346.066372577100992,1479161.817907822318375 6890337.253920855000615,1479078.233569500269368 6890275.796917401254177)",161,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479467.789957643020898 6890509.550598309375346,1479446.292043434455991 6890501.872114131227136,1479396.176897070370615 6890481.549454870633781)",162,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479453.616636599646881 6890482.744903990067542,1479477.671160398516804 6890489.641729325987399,1479591.626900956500322 6890520.325010627508163)",163,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1479078.233569500269368 6890275.796917401254177,1479020.719184436369687 6890226.708281797356904,1478981.269018949009478 6890181.160181148909032,1478961.497282745083794 6890155.520330861210823,1478951.065569168189541 6890141.650631228461862,1478942.192081137793139 6890130.999331175349653)",164,secondary,0,0,1,mainroads,5,0
|
||||
"LINESTRING (1478662.672542944317684 6890646.814319248311222,1478692.838669959222898 6890659.106249583885074,1478720.354880469152704 6890669.221817328594625,1478746.378180262632668 6890677.222320823930204,1478774.342263983329758 6890683.613533364608884,1478827.965750514063984 6890691.230884444899857,1478891.339810111327097 6890693.790438639931381,1478955.012451852904633 6890686.755498230457306,1478996.935250700218603 6890678.03463292773813,1479037.234509153524414 6890665.926593106240034,1479067.913824223913252 6890655.213292057625949,1479097.352157269604504 6890641.112831750884652,1479130.522767085814849 6890623.793821963481605,1479163.77735312958248 6890603.80803756415844,1479240.186389355920255 6890541.674635590054095,1479271.705466702114791 6890510.700072621926665,1479303.32718165894039 6890476.185262273997068,1479403.389521929202601 6890361.407724624499679,1479517.373254568781704 6890228.70063394960016,1479567.199149484280497 6890173.895804021507502)",683,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1476778.273992526577786 6891183.002112032845616,1476810.838107366813347 6891118.825677935034037,1476844.288637944497168 6891066.17594079952687,1476886.575333778047934 6891009.372855611145496,1476930.149665095610544 6890957.382903834804893,1476992.422703049844131 6890898.036294349469244,1477053.594719349872321 6890849.986093406565487,1477124.750576021615416 6890812.741637612693012,1477186.743693214608356 6890783.666558920405805,1477242.522569580934942 6890762.929363554343581,1477299.747703199042007 6890745.947280360385776,1477363.233731099637225 6890724.581786209717393,1477492.921018256340176 6890688.380124446004629,1477610.926279115257785 6890655.443191071972251,1477670.204164955532178 6890644.070861050859094,1477770.350481458939612 6890631.3498101439327,1477885.024685293668881 6890629.909114081412554,1477979.656562864314765 6890634.936224867589772,1478114.718328571645543 6890651.703501258045435,1478209.443513062782586 6890670.325334578752518,1478311.623920405516401 6890696.625873879529536,1478387.155871592927724 6890721.531766928732395,1478441.24589272052981 6890743.985453568398952)",684,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479267.721261245664209 6890576.89474381506443,1479349.710051246453077 6890499.956325806677341)",685,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1480035.058704312890768 6891629.36974533367902,1479728.956024808576331 6891543.530838788487017,1479512.717239294666797 6891494.143226150423288,1479401.821965686744079 6891469.265595769509673,1479333.754568046657369 6891453.922129524871707,1479271.490860788151622 6891437.490397951565683,1479207.566290363902226 6891415.111414563842118)",686,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1476557.509821424959227 6892224.91772651206702,1476579.56757715344429 6892197.033244075253606,1476602.661039686063305 6892155.474967340938747,1476614.604325356660411 6892127.820666904561222,1476626.193044736748561 6892100.902270716615021,1476640.860892452765256 6892073.416780357249081,1476659.326331784250215 6892043.785288944840431,1476691.171983344946057 6891992.432471443898976,1476760.032489801989868 6891879.840651011094451,1476778.273992526577786 6891853.275649514980614,1476800.042496806709096 6891828.059673327021301,1476826.420362893491983 6891804.192709765397012,1476842.833050002809614 6891792.113631258718669,1476896.139293009182438 6891750.480804309248924,1476928.358172246254981 6891725.740338440053165,1476937.716856256127357 6891718.275293369777501,1476958.085756740299985 6891704.908741282299161,1476967.575070433784276 6891697.474372724071145,1477252.002552584279329 6891480.071950710378587,1477319.762037389911711 6891425.979008984751999,1477450.111803674371913 6891326.285858543589711)",687,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479344.55950930272229 6890482.33109465893358,1479381.891607720637694 6890430.850314672105014,1479559.622627633390948 6890217.144998343661427,1479616.707800869364291 6890150.324937810190022,1479735.832744759973139 6890003.951099094934762,1479757.517272809520364 6889977.315668813884258,1479906.463108111871406 6889794.287592766806483,1479968.549532222328708 6889699.85574609786272,1480013.924687087535858 6889632.978685894981027,1480063.200071178842336 6889572.814326574094594,1480595.105495428200811 6888922.40596410445869,1480676.674404293997213 6888823.617269230075181,1481192.549699805909768 6888190.108256537467241,1481629.319389119045809 6887662.561815643683076,1481736.099827584112063 6887530.067787102423608,1481774.91550601972267 6887482.558607625775039,1481844.793057894799858 6887399.016058546490967,1481868.278409486636519 6887371.761121637187898)",688,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479315.839639539364725 6890486.729735681787133,1479082.600333325797692 6890751.342306513339281,1478999.1466246873606 6890835.195578991435468,1478910.113162280060351 6890921.118885340169072,1478875.048422001069412 6890958.17991707008332,1478845.218199896393344 6890996.482626908458769,1478808.305982613703236 6891048.641432393342257,1478761.083350750152022 6891124.619469199329615)",689,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1476557.509821424959227 6892224.91772651206702,1476576.040575603721663 6892207.426679218187928,1476622.861987715121359 6892172.689970703795552,1476647.1591095039621 6892154.43256404530257,1476668.713007867103443 6892134.718903675675392,1476686.254708698019385 6892114.39211630821228,1476697.955396381672472 6892099.200712250545621,1476709.628091989317909 6892081.188741613179445,1476879.773259358713403 6891804.805861446075141,1476894.207839777693152 6891782.165266772732139,1476907.783996538026258 6891763.433556890115142,1476948.400498515926301 6891721.019118160009384,1476956.704814333235845 6891716.067971306852996,1476966.007514191325754 6891708.173734177835286,1477005.746931127505377 6891679.095416892319918,1477256.22935602767393 6891486.632411575876176,1477326.153561364393681 6891432.983940120786428,1477454.375929886475205 6891332.524308172985911)",690,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478578.537693798076361 6892046.973773205652833,1478584.938548462698236 6892094.35663787741214,1478595.808804563246667 6892162.1739446753636,1478606.221856760093942 6892214.478280032984912,1478616.578924805158749 6892272.623563419096172,1478646.530445903539658 6892364.080981981940567,1478711.369424138218164 6892514.636937133036554,1478787.84377520903945 6892676.55557119846344,1478826.81807540403679 6892755.92172808945179,1478854.548891827696934 6892815.098086142912507,1478923.894594261655584 6892997.93432189617306,1478943.321094862185419 6893067.721645668148994,1478958.240871261106804 6893144.040726294741035,1478968.271365088876337 6893217.554868974722922,1478973.869780246401206 6893291.606290957890451,1478974.466944529442117 6893364.12521836720407)",691,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479276.548095814418048 6891179.446108014322817,1479307.358040571212769 6891231.606100558303297,1479339.17570005916059 6891279.306043236516416,1479366.542619493789971 6891318.974463047459722,1479402.260508207604289 6891358.597094771452248,1479431.306952188257128 6891389.360332677140832,1479472.697901599807665 6891421.380589242093265,1479515.283179575111717 6891449.063115849159658,1479565.827537767123431 6891472.499836646020412,1479622.035625964170322 6891492.334498732350767,1479731.885862075258046 6891519.496109201572835,1480048.737498683854938 6891593.869114982895553)",692,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478602.097690927330405 6891164.808263186365366,1478585.890279041836038 6891284.364215715788305,1478582.717843782622367 6891342.10424639005214,1478565.502717171795666 6891616.09531166497618,1478560.296191073488444 6891715.332197420299053,1478556.013403475517407 6891851.006974860094488,1478567.415509017417207 6891960.501914793625474,1478578.537693798076361 6892046.973773205652833)",693,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1475827.439161936519668 6888429.393967813812196,1475897.979192936560139 6888504.029522120021284,1476023.309046963695437 6888628.280639900825918,1476225.150574827333912 6888800.601991452276707,1476400.138371311826631 6888947.490241937339306,1476464.28687833994627 6889000.647103982046247,1476631.903428197605535 6889142.129735194146633,1476745.103382710367441 6889237.949506449513137,1476791.197000852320343 6889272.33640996273607,1476838.662230708403513 6889305.65077849291265,1477053.790663880994543 6889449.851177944801748,1477102.916756902821362 6889486.154534038156271,1477127.755058822920546 6889504.834965611808002,1477167.513137144735083 6889537.935754880309105,1477506.179931489285082 6889826.255522099323571,1477606.680814286228269 6889910.988007251173258,1477636.93091752869077 6889934.542846583761275,1477663.88728651846759 6889953.79135469160974,1477695.201088640838861 6889973.530318510718644,1477754.889524928759784 6890008.701961868442595,1477817.227877719327807 6890043.245416264049709,1477908.538028964074329 6890093.375067686662078,1477952.914799788501114 6890118.462998975068331,1478006.174389333231375 6890147.750230991281569,1478042.330820570699871 6890171.137181520462036,1478075.501430386910215 6890194.033776975236833,1478102.308508307440206 6890215.076020252890885,1478166.429023256991059 6890265.697170505300164,1478183.560173645848408 6890279.046004079282284)",695,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478598.449390378547832 6890845.709869343787432,1478556.414623227668926 6890825.447648616507649)",696,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478927.88813040801324 6890978.978924939408898,1479441.859964764444157 6891217.979787161573768,1479558.960148505866528 6891274.753690734505653,1479694.432464661076665 6891336.67816798388958,1479814.882366804173216 6891392.165357237681746,1480077.364061532309279 6891515.142887800931931)",697,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478569.785504766972736 6890803.361579650081694,1478595.75282041169703 6890816.082902735099196)",700,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478850.574017061386257 6890963.099942809902132,1478627.402527447091416 6890858.032757756300271)",703,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478183.560173645848408 6890279.046004079282284,1478405.86390891415067 6890456.521695459261537,1478453.245162542676553 6890498.408369177952409,1478496.56756518012844 6890547.360726167447865,1478533.153208245523274 6890597.539500389248133)",704,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478343.516225425293669 6890759.5421401290223,1478223.607503416249529 6890749.472439081408083,1478071.965098144253716 6890723.922736717388034,1477935.876956322928891 6890680.27232330199331,1477861.231420873198658 6890651.795460822060704)",705,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479207.566290363902226 6891415.111414563842118,1479145.39589002286084 6891388.195404731668532,1479060.327971686143428 6891345.599010691978037,1478962.775587541749701 6891295.568845461122692,1478908.82552679348737 6891268.132091694511473,1478785.175197315169498 6891204.261530964635313,1478658.75365233537741 6891138.674794974736869)",708,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478183.560173645848408 6890279.046004079282284,1478275.262213947018608 6890340.70227038115263,1478305.01779051986523 6890362.756416314281523,1478420.541087323101237 6890454.559939289465547,1478460.187197338789701 6890491.067073968239129,1478510.171714016469195 6890538.195547109469771,1478530.773881800472736 6890556.893749584443867,1478551.954552487237379 6890575.162854988127947)",709,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478575.831793141085654 6891339.988995048217475,1478579.592061987845227 6891283.046025006100535,1478593.50412365840748 6891161.252267209812999)",710,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477781.108769256155938 6890678.065286220051348,1477905.421577859437093 6890735.141912166029215,1478103.250908190850168 6890828.69695742521435,1478294.856667005689815 6890931.571979558095336,1478411.714252757374197 6890990.995472802780569,1478613.145230175927281 6891098.501459069550037,1478665.191829765914008 6891124.772744154557586)",713,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478604.868906431598589 6891027.229151873849332,1478611.251099710585549 6890982.580821967683733,1478613.247867786558345 6890914.635521415621042,1478611.652319462504238 6890865.451023075729609,1478607.640121933305636 6890811.484831825830042,1478591.227434826781973 6890756.093610955402255)",714,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478625.956270195310935 6890829.907785100862384,1478861.276320709846914 6890948.416510410606861)",715,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479616.707800869364291 6890150.324937810190022,1479664.443620794219896 6890101.926717818714678,1479699.98422635695897 6890058.524888642132282,1479734.657077576732263 6890015.874237441457808,1479788.523162097437307 6889964.457745274528861)",718,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478782.273352124495432 6891113.062545800581574,1478812.280857374193147 6891067.999899725429714,1478834.945108078885823 6891038.540714574977756,1478859.28888332657516 6891009.74071024172008,1478876.867906926199794 6890991.439962794072926,1478897.348775716731325 6890970.962793939746916,1478936.528351138578728 6890935.541706578806043,1478983.667006774339825 6890894.219856407493353,1479029.200783401727676 6890851.304213112220168,1479066.794141192454845 6890814.289654764346778,1479101.980180467711762 6890775.926505616866052,1479143.14719326980412 6890729.808203851804137,1479181.440352956997231 6890681.77433499135077,1479267.721261245664209 6890576.89474381506443,1479344.55950930272229 6890482.33109465893358)",719,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479735.832744759973139 6890003.951099094934762,1479699.98422635695897 6890058.524888642132282,1479669.062313296599314 6890105.972662986256182,1479632.952535520773381 6890164.209978073835373)",720,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478572.827310339780524 6890796.249909016303718,1478594.185264169238508 6890806.013130874373019)",723,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478714.065994105068967 6891217.213403515517712,1478673.654767348431051 6891300.887601297348738,1478632.870312915416434 6891389.360332677140832,1478605.372763794381171 6891470.307910224422812,1478585.83429489005357 6891564.484644450247288,1478578.593677949858829 6891611.80335165001452,1478569.23499394278042 6891715.255554312840104,1478573.153884557308629 6891842.852014512754977,1478573.49912015767768 6891933.752698284573853,1478578.537693798076361 6892046.973773205652833)",724,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478438.502669292036444 6890750.315412051975727,1478385.625638116383925 6890728.62804473284632,1478310.177663156529889 6890703.384942455217242,1478208.071901348652318 6890677.774079982191324,1478114.541045426623896 6890658.554491711780429,1477979.628570788539946 6890640.561075114645064,1477885.481889200396836 6890636.698779699392617,1477771.03162196977064 6890638.5839474638924,1477672.135618184227496 6890651.933400171808898,1477611.794033464044333 6890663.01453560963273,1477495.402982309227809 6890694.725365828722715,1477367.273920707637444 6890730.942382912151515,1477302.826831534970552 6890753.058906504884362,1477244.845911874435842 6890771.420418604277074,1477189.309633497847244 6890792.32623135112226,1477128.520175561308861 6890819.209592456929386,1477058.07345147873275 6890859.25891683716327,1476996.164310513529927 6890906.328240063972771,1476934.367137851659209 6890964.709297677502036,1476892.463000384392217 6891013.940385126508772,1476850.120320399058983 6891069.716567330062389,1476816.053964158287272 6891122.121087796986103,1476784.497564045945182 6891185.623133247718215)",727,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477785.139628168661147 6890619.962187672965229,1477670.577392631676048 6890570.948082859627903,1477610.665019739652053 6890546.318531366065145,1477551.331149747828022 6890517.719532645307481)",728,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478598.971909126965329 6890754.806160444393754,1478614.376881508156657 6890813.262752261944115,1478617.549316764576361 6890865.542985087260604,1478618.976912630489096 6890914.083746002987027,1478617.614631609292701 6890981.584552413783967,1478611.950901604257524 6891032.133892551995814)",730,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478624.789933702209964 6890819.929957416839898,1478866.398870577802882 6890942.408266056329012)",731,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478565.502717171795666 6891616.09531166497618,1478561.677133480552584 6891537.138942591845989)",735,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478595.276955124922097 6890826.290629548951983,1478565.344095406820998 6890811.423524235375226)",736,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1476576.040575603721663 6892207.426679218187928,1476618.149988292017952 6892167.615909783169627,1476640.273058862425387 6892146.093342563137412,1476655.827322310302407 6892126.916231859475374,1476670.784421477932483 6892106.114253824576735,1476680.329719322966412 6892090.386338596232235,1476691.657179324654862 6892070.780140379443765,1476829.630120918620378 6891846.576929586008191,1476847.059853446204215 6891819.168952871114016,1476865.683914539869875 6891793.661837009713054,1476884.354629097972065 6891773.197953407652676,1476901.187197342514992 6891757.54733301512897,1476948.400498515926301 6891721.019118160009384)",737,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1476937.716856256127357 6891718.275293369777501,1476957.72185975429602 6891707.821176195517182,1476966.875268540112302 6891701.980978826992214,1477005.746931127505377 6891679.095416892319918)",739,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477252.002552584279329 6891480.071950710378587,1477286.414144428446889 6891458.857786803506315,1477326.153561364393681 6891432.983940120786428)",741,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478855.416646176483482 6890957.168323368765414,1478625.368436602409929 6890839.900952127762139)",742,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477256.22935602767393 6891486.632411575876176,1477286.414144428446889 6891458.857786803506315,1477319.762037389911711 6891425.979008984751999)",743,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478430.310321775265038 6890777.137325343675911,1478363.717173459939659 6890762.914036750793457)",746,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478932.544145682128146 6890972.940003331750631,1479191.92805068846792 6891093.642660211771727,1479300.29470678162761 6891144.070084678940475,1479955.859791199443862 6891450.764536706730723,1480073.361194689990953 6891504.167875309474766,1480081.059015537146479 6891508.153213307261467)",747,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478614.35822012508288 6895547.603960990905762,1478615.365934853209183 6895453.089168295264244,1478618.7716374094598 6895322.46029799990356,1478627.934376885648817 6895235.953195017762482,1478677.928224253468215 6894754.545370802283287,1478689.899502002634108 6894669.838488157838583,1478708.728838320123032 6894564.201485143043101,1478728.612542824819684 6894486.274192513898015,1478750.604983708821237 6894401.156126040033996,1478775.648560852976516 6894316.60630351677537,1478799.17123521049507 6894234.572051984257996,1478819.176238714251667 6894162.305936777964234,1478835.234359527472407 6894088.062495077960193,1478888.839184675598517 6893836.372824227437377,1478909.506667304085568 6893747.121864621527493,1478924.529081313405186 6893665.614724689163268,1478939.710117084905505 6893584.200404370203614,1478951.018915706546977 6893509.088375779800117,1478957.755675281397998 6893436.798119088634849,1478962.271730176173151 6893365.505077449604869,1478961.907833192963153 6893291.146342131309211,1478955.684261673595756 6893219.30265864636749,1478946.036326214903966 6893145.742505932226777,1478932.404185302788392 6893069.54605878982693,1478912.567134257173166 6893000.47927956096828,1478842.764227916719392 6892818.547498689033091,1478815.686559933237731 6892760.919507294893265,1478777.505368549609557 6892681.10871759429574,1478695.451263701310381 6892523.329134689643979,1478630.239057793281972 6892371.377998174168169,1478598.673326985212043 6892274.539774225093424,1478586.73937200778164 6892214.110370276495814,1478576.382303962484002 6892165.36247589904815,1478565.717323085758835 6892097.821070521138608,1478557.963518089847639 6892049.073881317861378,1478550.666917 6892009.018629167228937,1478547.363852057838812 6891970.695765716023743,1478545.954917574767023 6891928.402865662239492,1478544.294054409023374 6891850.393819660879672,1478547.634442123584449 6891714.841681536287069,1478555.74281340977177 6891610.715033587068319,1478561.677133480552584 6891537.138942591845989,1478566.193188372533768 6891473.710761290974915,1478575.831793141085654 6891339.988995048217475)",749,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477556.565667921910062 6890511.175188716500998,1477614.798516265349463 6890538.701317588798702,1477682.334064466878772 6890563.668027113191783,1477739.55919808219187 6890579.638179088011384,1477786.753837872762233 6890589.339832002297044,1477886.918815756216645 6890608.05347993876785,1477979.441956950351596 6890621.326249268837273,1478115.203524554148316 6890637.250536070205271,1478210.255283262813464 6890657.389669657684863,1478313.182145957835019 6890686.479618338868022,1478388.508821921423078 6890711.523420327343047,1478445.080807101679966 6890735.663021787069738)",750,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478347.229840818792582 6891012.392329533584416,1478476.030712238047272 6891063.922815636731684)",751,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478094.470727083971724 6890836.620984894223511,1478107.888262082124129 6890843.119612865149975,1478290.601871486520395 6890940.323774167336524,1478460.821684390539303 6891029.313666300848126,1478546.72936500585638 6891074.130857136100531,1478570.382669050013646 6891085.365848724730313,1478660.983687705593184 6891132.375185729004443,1478788.133026657626033 6891198.023180870339274,1478968.12207401660271 6891290.617960623465478,1479014.626242603408173 6891313.885613084770739,1479051.445152965839952 6891332.922833372838795,1479137.968659247271717 6891374.814073477871716,1479237.54580354061909 6891417.272669827565551,1479286.979809394106269 6891432.999268201179802)",753,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477521.612895943690091 6890502.255271850153804,1477475.761875794501975 6890473.181315985508263,1477442.637919437140226 6890448.153582629747689,1477408.198335519991815 6890419.110474707558751,1477351.449067191453651 6890359.875120709650218,1477284.827926800120622 6890281.743360051885247,1477035.661129459738731 6889969.653018221259117,1477000.447098108474165 6889923.002958968281746,1476967.005898226518184 6889873.855176855809987,1476902.036290308227763 6889765.446070476435125,1476666.398996269330382 6889354.24341909494251,1476618.523215968394652 6889274.71162486448884,1476574.892900496488437 6889215.837150192819536,1476535.629348847083747 6889162.648217984475195,1476495.936585372779518 6889113.780909334309399,1476444.403173832688481 6889058.600589515641332,1476398.720106138614938 6889012.645371961407363,1476350.088539789430797 6888967.02753147855401,1476127.411576841957867 6888777.08111983910203,1476049.882857584161684 6888709.813339100219309,1475992.648393273120746 6888654.528531948104501,1475915.940774908289313 6888571.127032433636487,1475859.518080794485286 6888503.707749617286026,1475810.438641237094998 6888443.337326082400978)",754,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478087.146133915986866 6890851.273559163324535,1478099.686583872418851 6890857.588275128975511,1478284.284993046661839 6890953.198585663922131,1478356.989744574995711 6890988.497132927179337,1478420.373134867986664 6891017.419679494574666)",755,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477405.483104167273268 6890465.763412615284324,1477442.693903588689864 6890498.193800956942141,1477484.448749980889261 6890527.267847270704806,1477538.921329480595887 6890561.752224069088697,1477579.621807685820386 6890584.404708518646657,1477683.612369260750711 6890631.518402252346277)",757,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478638.020854862174019 6891161.880697418935597,1478549.817824034951627 6891106.839593932963908,1478476.030712238047272 6891063.922815636731684)",758,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477654.761869808426127 6890641.77187445666641,1477570.934933496639132 6890599.225414553657174,1477528.592253511305898 6890576.43495028745383,1477478.915649668080732 6890539.130456198938191,1477438.289816997246817 6890504.661502741277218,1477401.172324493527412 6890470.315307054668665)",759,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478908.82552679348737 6891268.132091694511473,1478968.12207401660271 6891290.617960623465478)",760,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477344.973566989181563 6890408.949243260547519,1477311.504375034244731 6890367.109013764187694,1476949.016324184834957 6889894.743330676108599,1476911.338990163756534 6889833.412309887818992,1476874.352127346210182 6889766.059066688641906,1476800.67698385566473 6889633.913489734753966,1476653.438665177905932 6889368.648105666041374,1476600.757578530581668 6889286.419145964086056,1476556.250178016955033 6889229.536690140143037)",761,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478951.550765147898346 6891271.872068259865046,1479014.626242603408173 6891313.885613084770739)",762,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478665.191829765914008 6891124.772744154557586,1478570.382669050013646 6891085.365848724730313)",764,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478613.145230175927281 6891098.501459069550037,1478512.373757313471287 6891032.731658027507365,1478391.186730505200103 6890953.244567170739174)",766,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1475352.861508915899321 6893202.392042903229594,1475384.884443622082472 6893185.496794159524143,1475415.40513693029061 6893166.639162816107273,1475452.914518496021628 6893139.104034236632288,1475485.021429432556033 6893109.6065957788378,1475514.525077319936827 6893077.932231985032558,1475539.596646539866924 6893046.978557553142309,1475559.415036202641204 6893018.186688029207289,1475577.078036027029157 6892989.057638514786959,1475610.024709239369258 6892929.052129200659692,1475653.543056407710537 6892853.762252791784704,1475678.120098955230787 6892816.385866651311517,1475710.124372278340161 6892775.744226446375251,1475739.320107336854562 6892744.73039329610765,1475768.805093838367611 6892714.682502984069288,1475840.838035549037158 6892642.246086311526597,1475907.869726384989917 6892584.328083496540785,1475976.898185294354334 6892529.445871927775443,1476109.086097889812663 6892446.571376527659595,1476194.667204285040498 6892393.790303630754352,1476235.65693393885158 6892368.557302054949105,1476273.334267959930003 6892339.721872925758362,1476309.854596180841327 6892310.288686713203788,1476343.585047514177859 6892278.724780205637217,1476371.26921047619544 6892251.223352207802236,1476396.396763845114037 6892220.564123103395104,1476441.333376189693809 6892160.288419598713517,1476485.271604493027553 6892090.876877398230135,1476503.046572620980442 6892057.520307081751525,1476521.353390193078667 6892020.162952153012156,1476548.636333400150761 6891949.31168732047081,1476565.347602651221678 6891885.28242499101907,1476579.390294005395845 6891822.020113877020776,1476596.904002760536969 6891745.790226866491139,1476612.318305834662169 6891669.8369763167575,1476641.18746667006053 6891532.141924168914557,1476660.623297963757068 6891452.527270408347249,1476674.292761641787365 6891406.190494714304805,1476690.145607233978808 6891361.524732173420489,1476706.138413205510005 6891325.274218517355621,1476725.210347512969747 6891292.150741980411112,1476789.237555547850206 6891203.280561587773263,1476851.547916265204549 6891125.75370395090431,1476899.52633417956531 6891059.339930346235633,1476944.845504887402058 6891000.314440655522048,1476973.220139053184539 6890965.077150264754891,1476999.598005142761394 6890935.066565403714776,1477026.824964198283851 6890910.297954620793462,1477054.87302414374426 6890884.992973770014942,1477130.479620868572965 6890828.405745735391974,1477242.401270584436134 6890777.627784022130072,1477373.040288320509717 6890737.992688745260239,1477489.468662241240963 6890705.561333095654845)",767,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478411.714252757374197 6890990.995472802780569,1478512.373757313471287 6891032.731658027507365,1478671.266110216034576 6891093.428076104260981)",768,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477489.468662241240963 6890705.561333095654845,1477590.081513338722289 6890676.256742395460606,1477641.279019968351349 6890665.849960001185536,1477684.806697827065364 6890661.926345975138247,1477737.515776550164446 6890662.217551639303565,1477788.27474065637216 6890666.984130036085844,1477827.081088401842862 6890675.505737031809986,1477872.446912571322173 6890688.977864359505475,1477922.702019314747304 6890709.776175797916949,1478339.364067516522482 6890923.509914490394294,1478391.186730505200103 6890953.244567170739174,1478671.266110216034576 6891093.428076104260981,1478812.467471212381497 6891164.624332321807742,1478920.47023032233119 6891225.199124677106738,1478966.713139536324888 6891258.153720107860863,1479043.168829224305227 6891308.045701892115176,1479111.833391147432849 6891342.71736282389611,1479235.297106784768403 6891399.41550721321255)",769,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478460.821684390539303 6891029.313666300848126,1478493.917648672126234 6891050.955862689763308,1478535.485881229164079 6891075.832198646850884)",770,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478546.72936500585638 6891074.130857136100531,1478493.917648672126234 6891050.955862689763308,1478458.08779165497981 6891036.594143707305193)",772,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478560.296191073488444 6891715.332197420299053,1478571.828926299000159 6891609.948612500913441,1478579.424109532730654 6891563.518959445878863,1478599.410451650619507 6891468.039343643933535,1478627.72910166461952 6891387.229740903712809,1478666.022261348785833 6891297.469495555385947,1478708.467578947311267 6891213.902627007104456)",773,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478749.074750232277438 6891229.766776816919446,1478697.252087243599817 6891335.283329210244119,1478680.839400137076154 6891369.265349286608398,1478665.275805993471295 6891403.860634117387235,1478650.579966201679781 6891440.893235126510262,1478636.807864910224453 6891480.31720149051398,1478625.71367220277898 6891516.50710129737854,1478615.524556615622714 6891556.452601296827197,1478606.27784091187641 6891606.162493411451578,1478598.524035915965214 6891650.400417221710086,1478592.160504020052031 6891714.366494299843907,1478591.815268416889012 6891798.812305805273354,1478593.541446424322203 6891856.908596065826714,1478596.872503443155438 6891908.797062506899238,1478605.195480649126694 6892008.037561585195363,1478619.499431378906593 6892103.09436908364296,1478629.772523196646944 6892163.722221702337265,1478641.538525721756741 6892218.479299768805504,1478655.889129913412035 6892270.998617016710341,1478670.920874612871557 6892319.547864924184978,1478688.173323994968086 6892364.908794411458075,1478723.713929563527927 6892447.276557306759059,1478779.240877247182652 6892575.543838411569595,1478816.097110378323123 6892663.448042929172516,1478871.092208620626479 6892789.173881882801652,1478923.194792367983609 6892912.464073054492474,1478951.923992824042216 6892984.013724349439144,1478964.156529946019873 6893022.080790019594133,1478974.028402008581907 6893060.37800376676023,1478982.360709904693067 6893100.990420570597053,1478987.305976627394557 6893130.380508157424629)",774,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478162.239542582305148 6890271.275784828700125,1478102.308508307440206 6890215.076020252890885)",775,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477639.31024397094734 6890001.207860252819955,1477597.219492668518797 6889960.565124080516398,1477572.390521438326687 6889934.420244771055877,1477555.05409582844004 6889916.489749496802688,1477065.258084264583886 6889497.847038632258773,1477030.715862737037241 6889473.036882025189698,1476963.954761966597289 6889426.634892208501697,1476919.242086228914559 6889398.606871547177434)",776,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477532.455159971257672 6889929.485523279756308,1477564.646047132555395 6889952.427406344562769,1477596.025164099410176 6889970.817740640603006,1477639.31024397094734 6890001.207860252819955)",777,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478526.565739739919081 6890602.627896940335631,1478491.594306378625333 6890551.6980971544981,1478448.131943361833692 6890503.527355609461665,1478399.733644315274432 6890460.41455677524209,1478162.239542582305148 6890271.275784828700125,1478101.907288549700752 6890224.102898960933089,1478071.293288323795423 6890200.317325276322663,1478038.579882414080203 6890177.742551427334547,1478001.96624727291055 6890154.355581684969366,1477949.630396228516474 6890124.501278791576624,1477904.553823507856578 6890099.152794464491308,1477813.999458313919604 6890050.080562806688249,1477751.007957082940266 6890014.740159252658486,1477691.636764322407544 6889979.752393233589828,1477660.929457176011056 6889961.024882393889129,1477632.35887848213315 6889940.381760180927813,1477601.996806936105713 6889916.796253352425992,1477500.964074700837955 6889831.695906238630414,1477162.465232811402529 6889543.621135639958084,1477122.604516879189759 6889510.397727609612048,1477098.494008928304538 6889492.268960924819112,1477048.098941802745685 6889454.93884819932282,1476833.278421464608982 6889311.933632552623749,1476738.459930056007579 6889246.285711977630854,1476692.198359458940104 6889212.803027050569654,1476648.502729142317548 6889177.5735699608922,1476570.432829750468954 6889112.309837851673365,1476404.710410355357453 6888972.559274631552398)",778,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477852.236633849330246 6890212.394012399949133,1478308.479477224871516 6890605.202749434858561,1478362.784104266436771 6890650.676619523204863,1478396.178650686750188 6890676.946441259235144,1478453.133194239344448 6890714.128961123526096)",779,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1482784.748301694169641 6886965.537159140221775,1482693.28885937994346 6886972.002020028419793,1482596.454938515089452 6886983.813426220789552,1482487.295173607533798 6887003.177429282106459,1482381.643748866859823 6887039.102067950181663,1482275.889686515787616 6887083.636586944572628,1482198.407620716840029 6887123.973706754855812,1482126.533300768584013 6887170.745409660041332,1482052.44760683295317 6887226.985180730931461,1481981.702300606062636 6887286.71834568399936,1481968.443387370323762 6887300.031594241969287,1481893.564584620529786 6887373.415718881413341,1481786.998752072220668 6887491.950112945400178,1481743.732333586551249 6887544.959467724896967,1481636.671974362805486 6887667.648355164565146,1481197.382998225279152 6888196.696677305735648,1480772.771200496470556 6888722.807162684388459,1480690.84772533737123 6888841.269510939717293,1480527.495301691815257 6889044.931987857446074,1480432.555511289509013 6889146.512319353409111,1480354.168368370272219 6889229.996406652964652,1480070.375373274553567 6889577.472987326793373,1480025.877303453860804 6889645.238416977226734,1479985.932611293857917 6889713.004417773336172,1479958.108487955294549 6889763.959554866887629,1479928.418226227164268 6889811.788715708069503,1479883.397637658054009 6889871.648361132480204,1479800.475778460968286 6889970.710463566705585,1479752.823934766696766 6890021.713210099376738,1479702.307568650459871 6890079.44417324475944,1479632.952535520773381 6890164.209978073835373,1479578.181373882573098 6890234.309874192811549,1479501.660369355697185 6890327.797787746414542,1479399.125395719893277 6890440.429178510792553,1479372.187688112957403 6890474.959161611273885,1479349.710051246453077 6890499.956325806677341,1479267.189411807339638 6890593.876469925045967,1479186.413611755473539 6890685.71328535862267,1479147.700570930493996 6890733.747177755460143,1479106.981431342195719 6890780.861746666021645,1479071.1049208662007 6890819.224919372238219,1479033.035697785904631 6890855.687729027122259,1478987.819164683111012 6890899.323767800815403,1478941.10039018210955 6890940.752934218384326,1478905.223879706114531 6890974.625996216200292,1478886.235921626212075 6890995.65495538059622,1478870.345753268105909 6891016.116859840229154,1478849.874215167714283 6891047.476553818210959,1478830.513029411667958 6891078.085327141918242,1478803.090125825256109 6891124.665451684966683)",780,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477856.34213829645887 6890206.462946793064475,1478312.584981674794108 6890600.190983732230961,1478372.161449659382924 6890649.036674340255558,1478398.940535501111299 6890670.218048175796866,1478437.774875319562852 6890694.98591932002455)",781,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1482783.740586966043338 6886947.980951749719679,1482690.806895327055827 6886951.780197567306459,1482595.2606099487748 6886967.00783793721348,1482485.121122389100492 6886988.62378338817507,1482377.426276116399094 6887024.134725640527904,1482269.460839775390923 6887069.113434969447553,1482189.804722755216062 6887109.159404909238219,1482114.440724022919312 6887154.138589794747531,1482034.290080333128572 6887211.098286444321275,1481972.978103650966659 6887259.325908213853836,1481901.262405461864546 6887325.861504116095603,1481730.342790664173663 6887524.123379080556333,1481461.170989822829142 6887854.10595522634685,1481188.752108187647536 6888186.614863532595336,1480670.170912018744275 6888817.763843473047018,1480055.054377123713493 6889565.443227421492338,1479862.077006594510749 6889808.447867930866778,1479841.60546849691309 6889834.730262932367623,1479692.510342122521251 6890026.310829350724816,1479549.928038716083393 6890208.225407693535089,1479413.634621670935303 6890373.821827123872936,1479315.839639539364725 6890486.729735681787133)",782,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477861.343389173736796 6890200.087439280003309,1478318.509971052641049 6890594.719426577910781,1478390.477597918594256 6890656.393440401181579,1478437.774875319562852 6890694.98591932002455,1478455.288584077497944 6890709.31637466698885)",783,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1480071.877614675322548 6891532.785711640492082,1479083.878638119669631 6891071.034723062068224,1478918.445470173377544 6890994.888592929579318)",784,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477866.363301434088498 6890193.696611104533076,1478323.520552617264912 6890589.707667414098978,1478345.643623190466315 6890607.563031607307494,1478390.477597918594256 6890656.393440401181579)",785,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479235.297106784768403 6891399.41550721321255,1479323.42549207736738 6891429.473809752613306,1479404.817117797909304 6891454.412629490718246,1479515.861682475078851 6891481.696737250313163,1479730.990115647669882 6891529.674072655849159,1480047.17927313153632 6891600.766893580555916)",786,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477872.288290809141472 6890185.972451457753778,1478330.359949802746996 6890582.412268224172294,1478408.961698635946959 6890650.630639746785164,1478459.636686514364555 6890694.801999206654727,1478463.210341525729746 6890697.438187943771482)",787,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478805.488113650586456 6894342.55076818075031,1478857.320107331965119 6894072.714029368944466,1478926.292582089779899 6893755.217427032999694,1478940.615194202633575 6893690.161840692162514,1478969.521677806740627 6893554.241368629038334,1478978.189890613080934 6893508.015132857486606,1478983.816297846613452 6893465.484164356254041,1478989.190776400035247 6893405.965717462822795,1478991.168883087579161 6893344.040629624389112,1478990.7023484937381 6893285.075020092539489,1478985.887711454415694 6893222.721581661142409,1478980.597209128318354 6893177.72376514505595,1478972.638128911377862 6893132.434905360452831,1478968.709907609736547 6893107.061603565700352,1478959.323231523856521 6893066.157863318920135,1478950.49639695812948 6893030.804198566824198,1478937.797325239283964 6892990.912695890292525,1478857.497390477219597 6892791.243522559292614,1478802.642252611462027 6892668.445764632895589,1478757.547018504701555 6892584.742001041769981,1478697.793267377885059 6892455.217510379850864,1478660.498491725884378 6892373.738798955455422,1478642.947460204828531 6892327.228085407055914,1478624.09013180853799 6892263.195812923833728,1478611.559012545039877 6892213.55850566457957,1478604.887567814672366 6892161.637413104996085,1478597.898879556916654 6892089.83448248077184,1478592.841644530883059 6892002.932946247048676,1478584.938548462698236 6891893.805323468521237,1478581.840758743695915 6891800.866362730972469,1478581.532845909241587 6891711.040184433571994,1478585.181146452436224 6891648.944210037589073,1478590.415664629545063 6891604.461039665155113,1478597.721596408868209 6891552.206658062525094,1478605.596700401278213 6891511.44878276437521,1478616.131051591597497 6891471.442193754017353,1478628.074337264988571 6891433.029924367554486,1478641.19329012138769 6891395.13899090141058,1478656.962159483227879 6891360.574399496428668,1478672.087211105972528 6891325.688071240670979,1478697.252087243599817 6891275.382129811681807,1478725.31880857469514 6891220.416887637227774)",788,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477882.775988540612161 6890173.665918780490756,1478339.476035819854587 6890570.105128699913621,1478400.685374894412234 6890626.399334325455129,1478459.636686514364555 6890694.801999206654727)",789,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477908.538028964074329 6890093.375067686662078,1477813.999458313919604 6890050.080562806688249)",790,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477877.298872376326472 6890180.041405342519283,1478334.922658159164712 6890576.036462583579123,1478373.15050300443545 6890608.819805517792702,1478408.961698635946959 6890650.630639746785164)",791,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478441.880379769485444 6890723.922736717388034,1478448.113281978992745 6890727.11069754883647)",792,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477872.288290809141472 6890238.830985979177058,1478303.935430257115513 6890611.578578202985227,1478358.687930509448051 6890655.504497475922108,1478392.194445233326405 6890681.43714867066592,1478448.794422489590943 6890719.355371965095401)",793,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478374.52211471600458 6890689.882137652486563,1478441.880379769485444 6890723.922736717388034)",794,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477881.404376826249063 6890257.972941686399281,1478297.543906279606745 6890617.050146820954978,1478351.223376962356269 6890659.979866296984255,1478385.718945034081116 6890686.908764844760299,1478441.880379769485444 6890723.922736717388034)",795,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477639.31024397094734 6890001.207860252819955,1477650.339121833909303 6890011.138695799745619,1477667.871491971891373 6890027.245678919367492,1477711.333854988683015 6890056.072814892046154,1477872.288290809141472 6890185.972451457753778)",796,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477711.333854988683015 6890056.072814892046154,1477765.601159261539578 6890092.271629626862705,1477877.298872376326472 6890180.041405342519283)",797,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477765.601159261539578 6890092.271629626862705,1477828.779274330707267 6890136.347967855632305,1477882.775988540612161 6890173.665918780490756)",798,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477667.871491971891373 6890027.245678919367492,1477709.663661133032292 6890068.854257536120713,1477866.363301434088498 6890193.696611104533076)",799,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477709.663661133032292 6890068.854257536120713,1477738.43018435779959 6890100.348186734132469,1477861.343389173736796 6890200.087439280003309)",800,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477738.43018435779959 6890100.348186734132469,1477767.485959034180269 6890134.800081231631339,1477856.34213829645887 6890206.462946793064475)",801,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477767.485959034180269 6890134.800081231631339,1477796.280474334955215 6890170.96859906706959,1477852.236633849330246 6890212.394012399949133)",802,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477796.280474334955215 6890170.96859906706959,1477825.522862849291414 6890206.815438941121101,1477872.288290809141472 6890238.830985979177058)",803,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477825.522862849291414 6890206.815438941121101,1477854.522653371095657 6890233.896077645942569,1477881.404376826249063 6890257.972941686399281)",804,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477335.922795813763514 6889793.260820533148944,1477382.669562393333763 6889831.527330902405083,1477414.291277347132564 6889860.415065491572022,1477448.665546425385401 6889897.256655850447714,1477629.102466995362192 6890037.329800856299698,1477696.330102362437174 6890102.263879836536944,1477741.44399785483256 6890151.443709483370185,1477774.763898740522563 6890185.328771825879812,1477834.890877549303696 6890236.608744276687503,1478292.505332639208063 6890623.870454665273428,1478342.340558242052794 6890664.056745544075966,1478374.52211471600458 6890689.882137652486563)",805,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477335.922795813763514 6889793.260820533148944,1477374.542529721045867 6889835.496514805592597,1477399.390162334311754 6889867.6638342756778,1477427.400899513624609 6889893.532643830403686,1477590.072182645788416 6890022.694035316817462,1477621.115394705208018 6890055.337192909792066,1477774.763898740522563 6890185.328771825879812)",806,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478113.020142643013969 6890567.867468994110823,1478206.914895548252389 6890612.88133230060339,1478324.761534644989297 6890666.15649242606014)",807,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478632.758344612084329 6890816.420094702392817,1478872.753071786370128 6890934.054974609985948)",808,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477627.702863208018243 6890097.421008551493287,1477642.613308914005756 6890109.068425429053605,1477684.3868166890461 6890145.849852683022618,1477714.636919934535399 6890174.52415706217289,1477745.222928084433079 6890205.788614028133452,1477770.891661590430886 6890232.807946092449129,1478127.641336897388101 6890537.229985372163355,1478178.017742637079209 6890574.044024353846908,1478255.014612456317991 6890619.533044742420316)",809,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1477633.282616982702166 6890089.78889452945441,1477648.622274519409984 6890102.432460854761302,1477690.694364438997582 6890138.202367076650262,1477719.246281747007743 6890165.696567691862583,1477750.653390789870173 6890198.846054994501173,1477777.712397390045226 6890226.217856734059751,1478134.965930065372959 6890527.988186067901552,1478179.100102899828926 6890562.058752524666488,1478255.014612456317991 6890619.533044742420316)",810,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478119.13174585881643 6890559.131406237371266,1478211.729532587574795 6890605.67787111364305,1478274.851663501933217 6890634.675673317164183)",811,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478578.658992794342339 6890784.938687206245959,1478592.291133706457913 6890793.812937114387751)",814,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478576.662224721163511 6890790.042529220692813,1478592.869636606657878 6890797.951191720552742)",816,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478255.014612456317991 6890619.533044742420316,1478274.851663501933217 6890634.675673317164183,1478324.761534644989297 6890666.15649242606014,1478374.52211471600458 6890689.882137652486563)",819,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478624.575327788246796 6890811.791369803249836,1478632.758344612084329 6890816.420094702392817)",821,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478624.575327788246796 6890812.481080299243331,1478632.758344612084329 6890816.420094702392817)",823,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479311.071655961917713 6890483.128060797229409,1479409.174550930503756 6890368.840857767499983,1479522.103915374726057 6890231.44395041000098,1479567.199149484280497 6890173.895804021507502,1479618.872521397890523 6890109.175704349763691,1479907.088264473713934 6889740.297941270284355,1480050.090449015144259 6889560.462758839130402,1480664.171277103479952 6888813.320146127603948,1481185.187783869216219 6888181.696536475792527,1481455.404622207395732 6887849.387007832527161,1481725.210910100489855 6887521.289062367752194,1481896.998279252555221 6887321.387990654446185,1481969.926967390812933 6887255.449916490353644,1482031.50020344578661 6887206.440996480174363,1482112.350649032043293 6887148.7459767004475,1482187.733309147180989 6887103.322546837851405,1482267.604032081319019 6887064.410267961211503,1482375.364193198736757 6887018.619642356410623,1482484.141399736981839 6886983.154683265835047,1482594.028958613984287 6886961.53875251673162,1482690.424336957978085 6886945.468548243865371,1482783.236729600699618 6886939.279460026882589)",824,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479076.507391492836177 6891028.424682137556374,1479191.92805068846792 6891093.642660211771727)",825,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478938.59976474638097 6890964.157518833875656,1479076.507391492836177 6891028.424682137556374,1479885.31042950367555 6891405.531389341689646,1479995.26330322236754 6891461.448241677135229,1480073.361194689990953 6891504.167875309474766)",827,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1475815.159971352899447 6888439.460763610899448,1475864.211418837308884 6888499.693255602382123,1475920.802065403433517 6888566.576213048771024,1475997.071141253225505 6888649.85508313588798,1476055.490603434853256 6888704.557588589377701,1476132.328851491678506 6888770.982559802941978,1476354.128729394637048 6888961.802259580232203,1476403.460097637493163 6889007.343453120440245,1476449.217810868984088 6889054.064817779697478,1476500.732561023207381 6889108.907986088655889,1476539.548239458817989 6889157.376847730018198,1476580.500646346947178 6889211.990862969309092,1476624.84009440545924 6889271.003225136548281,1476671.465561988530681 6889351.255216074176133,1476907.158840176416561 6889762.457714626565576,1476971.960495642386377 6889870.391702450811863,1477004.384650106076151 6889919.784666567109525,1477040.15852296887897 6889966.741212910972536,1477288.289613505359739 6890277.007661812007427,1477353.996346088824794 6890353.8979682167992,1477413.740766525734216 6890414.619913823902607,1477448.021728683495894 6890442.958000471815467,1477480.277930689277127 6890466.284504777751863,1477526.68879235861823 6890495.281804216094315)",828,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1475804.159085565945134 6888448.485649089328945,1475830.975494176382199 6888481.704669660888612,1475911.042161641409621 6888576.367373092100024,1475986.294192070141435 6888660.810877257026732,1476043.97652958938852 6888715.605394661426544,1476111.773337163729593 6888773.20439646858722,1476344.24752664193511 6888971.976985700428486,1476393.14968305407092 6889017.380325557664037,1476438.403538923012093 6889064.254984210245311,1476487.604277476668358 6889117.994917658157647,1476533.557935239281505 6889174.907231950201094,1476567.698937014909461 6889219.606819932349026,1476608.427407295908779 6889281.208990493789315,1476659.587591157061979 6889363.897621073760092,1476806.275399013189599 6889630.894533473998308,1476879.651960362214595 6889764.051504278555512,1476916.340241038240492 6889830.99095484893769,1476954.605408649425954 6889891.371798135340214,1477316.729562512831762 6890362.909676750190556,1477349.396314963698387 6890405.439559964463115)",829,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478755.951470183674246 6891121.998467871919274,1478802.306347704026848 6891043.660044934600592,1478839.731753036612645 6890992.834741913713515,1478870.849610630888492 6890954.65466683357954,1478904.841321337036788 6890917.057202836498618,1478994.527932184981182 6890830.566843283362687,1479078.056286355247721 6890746.790252956561744,1479311.071655961917713 6890483.128060797229409)",831,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478476.030712238047272 6891063.922815636731684,1478281.896335911471397 6890962.59414563048631,1477896.856002663495019 6890755.863709062337875,1477714.347668485715985 6890670.003475363366306)",832,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478476.030712238047272 6891063.922815636731684,1478633.626098963664845 6891126.550733875483274)",833,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478633.626098963664845 6891126.550733875483274,1478535.485881229164079 6891075.832198646850884,1478458.08779165497981 6891036.594143707305193,1478420.373134867986664 6891017.419679494574666,1478287.233491696184501 6890945.580986365675926,1478057.745123639237136 6890824.282802382484078,1478049.450138514628634 6890819.79201518651098)",834,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479207.566290363902226 6891415.111414563842118,1479099.610184715595096 6891375.703095939941704,1478899.448181400541216 6891294.403931108303368,1478781.23764532036148 6891236.143100920133293,1478638.020854862174019 6891161.880697418935597)",835,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478638.020854862174019 6891161.880697418935597,1478347.229840818792582 6891012.392329533584416,1478274.310483370674774 6890973.691036481410265,1477887.81456218380481 6890777.459188850596547,1477799.630192739423364 6890730.620521273463964,1477771.712762480368838 6890717.776719653978944,1477743.422104542376474 6890708.212852067314088,1477709.010512698208913 6890701.438452739268541,1477673.143332915147766 6890694.740692501887679,1477614.537256892537698 6890691.997217950411141,1477570.645682045025751 6890694.648732445202768,1477526.22225776175037 6890703.461575921624899,1477450.475700660608709 6890727.95366817060858,1477383.070782145252451 6890752.73704397585243,1477250.239051808137447 6890804.419134659692645,1477138.028150640428066 6890855.948287741281092,1477061.32986296294257 6890902.18992966786027,1477035.62380669103004 6890922.253091386519372,1477009.283263367367908 6890945.443041983060539,1476980.022213472751901 6890972.051025399938226,1476950.705179423559457 6891005.096546770073473,1476903.846444540657103 6891063.493649013340473,1476855.672082100762054 6891129.723526864312589,1476793.529673835728317 6891209.472932793200016,1476732.255019919481128 6891296.519170454703271,1476712.110056042205542 6891330.976191231049597,1476696.051935228751972 6891364.161139542236924,1476680.646962850354612 6891407.355425265617669,1476666.734901179792359 6891453.354988979175687,1476646.729897676035762 6891533.07694885134697,1476618.121996216243133 6891670.986616539768875,1476602.045214017154649 6891746.771262445487082,1476585.455243762582541 6891822.893856970593333,1476570.768734660698101 6891886.907293429598212,1476553.786875346908346 6891951.166504768654704,1476526.279995532939211 6892021.971798327751458,1476508.187783877598122 6892059.191198166459799,1476490.170217757113278 6892094.923823652788997,1476446.866476502502337 6892164.733967241831124,1476401.873880009399727 6892224.289213199168444,1476348.166417250875384 6892284.197483622469008,1476315.499664797214791 6892317.447686146944761,1476280.761498738545924 6892349.870215245522559,1476244.129202214302495 6892379.34953604824841,1476205.294862395850942 6892409.380842979066074,1476120.198951980331913 6892465.657269499264657,1475994.131973290815949 6892548.271348089911044,1475918.823958713328466 6892599.934322696179152,1475847.500149589264765 6892656.135431186296046,1475775.420554416952655 6892722.209795576520264,1475745.310411553597078 6892752.058416236191988,1475710.488269264576957 6892789.52648729365319,1475659.496037861565128 6892857.211681927554309,1475614.400803754804656 6892932.133648023940623,1475582.536490808241069 6892991.587262314744294,1475563.931091094622388 6893021.605525500141084,1475543.394238155335188 6893050.612043621018529,1475518.527944159228355 6893081.657719410024583,1475488.809690357884392 6893114.466613277792931,1475455.89100922155194 6893143.642111292108893,1475418.689540492836386 6893171.989819569513202,1475387.095817609224468 6893190.74014341738075,1475353.1974138233345 6893208.371313671581447)",836,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478658.75365233537741 6891138.674794974736869,1478633.626098963664845 6891126.550733875483274)",837,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478665.191829765914008 6891124.772744154557586,1478792.53711324906908 6891190.098797177895904,1478951.550765147898346 6891271.872068259865046,1479057.696716560982168 6891325.611431846395135,1479110.443118050228804 6891347.499672620557249,1479235.297106784768403 6891399.41550721321255)",838,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478557.963518089847639 6892049.073881317861378,1478556.050726244226098 6892008.252170108258724,1478555.892104479251429 6891960.287307545542717,1478556.013403475517407 6891851.006974860094488)",839,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478566.193188372533768 6891473.710761290974915,1478566.314487369032577 6891421.901743350550532,1478564.35504206456244 6891386.677933054976165,1478562.041030463995412 6891340.556127598509192,1478559.988278241828084 6891280.026449425145984,1478552.421087084105238 6891228.617199691012502,1478536.680209795245901 6891184.841425079852343,1478515.882097477559 6891146.093319251202047,1478490.17604120564647 6891115.22371987067163,1478460.448456714395434 6891086.806626409292221,1478416.528889790875837 6891054.77237503696233,1478271.417968872701749 6890980.772209639661014,1477885.407243662746623 6890784.019076376222074,1477796.569725786335766 6890736.781874912790954,1477769.296113269403577 6890724.014697107486427,1477741.248053323943168 6890714.527455672621727,1477707.312326766550541 6890707.385210207663476,1477672.322232022183016 6890701.285185849294066,1477614.070722295902669 6890697.269594454206526,1477572.231899673352018 6890700.074377545155585,1477526.175604302901775 6890708.120891856960952,1477455.775533676613122 6890734.314267538487911,1477389.107739823870361 6890759.603447327390313,1477324.548682353226468 6890788.141999081708491,1477257.99285680684261 6890813.109483245760202,1477200.954337026691064 6890839.057969767600298,1477139.474407889414579 6890870.033797833137214,1477067.376151334261522 6890914.604867226444185,1477017.195690128253773 6890957.275613599456847,1476964.794524239376187 6891008.238637273199856,1476915.929690593155101 6891070.344990382902324,1476870.666504034306854 6891132.22191062476486,1476788.761690261075273 6891251.961311405524611,1476754.90060923830606 6891323.971348975785077,1476738.030718227848411 6891370.399618566036224,1476719.761223427485675 6891450.917817885056138,1476702.368813663022593 6891509.915959592908621,1476623.253876777132973 6891838.284014022909105,1476608.446068681776524 6891899.1704620430246,1476585.417920996667817 6891971.646170520223677,1476560.598280456615612 6892035.553486871533096,1476540.061427514301613 6892081.755926453508437,1476514.971196911530569 6892126.241737992502749,1476469.894624190637842 6892196.55802833661437,1476420.703216326888651 6892263.563724930398166,1476371.01728179352358 6892312.496171937324107,1476327.321651474107057 6892356.41605613194406,1476278.49414059962146 6892398.205320552922785,1476225.598448038101196 6892436.177632182836533,1476038.051540214335546 6892556.212400928139687,1476025.800341709284112 6892564.613368845544755)",840,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478564.35504206456244 6891386.677933054976165,1478557.991510165855289 6891469.69478405546397,1478557.17973996582441 6891485.973299608565867)",841,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479372.187688112957403 6890474.959161611273885,1479284.45119188237004 6890585.155705378390849,1479257.214902134146541 6890621.678759607486427,1479238.068322289036587 6890653.343446989543736,1479217.820720798335969 6890695.077879380434752,1479200.521617954364046 6890742.973886811174452,1479189.595377702033147 6890782.241162405349314,1479182.326768688624725 6890823.608417795971036,1479178.603822610806674 6890869.190812314860523,1479179.844804635737091 6890923.985054980032146,1479185.153968344675377 6890968.203897933475673,1479195.361745317699388 6891013.066729949787259,1479215.254780515097082 6891069.072816937230527)",842,light_rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479618.872521397890523 6890109.175704349763691,1479692.510342122521251 6890026.310829350724816)",843,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479213.220689673209563 6891123.270649696700275,1479083.878638119669631 6891071.034723062068224)",844,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479300.29470678162761 6891144.070084678940475,1479441.859964764444157 6891217.979787161573768)",845,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1479384.009674790082499 6891203.495148631744087,1479558.960148505866528 6891274.753690734505653)",846,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1480034.237603422952816 6891507.38680200651288,1479869.214985921513289 6891429.1672482220456,1479384.009674790082499 6891203.495148631744087,1479213.220689673209563 6891123.270649696700275,1478922.187077639857307 6890988.451151218265295)",847,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1476931.73588272370398 6891636.221568983048201,1476803.457530052866787 6891734.431683016009629,1476778.572574671125039 6891759.448092334903777,1476760.209772950038314 6891782.226581771858037,1476741.193822791567072 6891808.684046884998679,1476723.484169505303726 6891841.487745635211468,1476712.809857935877517 6891868.19066839851439,1476703.031292790779844 6891897.499604214914143,1476694.307095838477835 6891943.869869998656213)",848,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1476934.208516089478508 6891653.941301063634455,1476814.523730684537441 6891746.801919807679951,1476788.603068495867774 6891772.722762719728053,1476773.235418886179104 6891792.128960026428103,1476754.74198747612536 6891818.172579637728631,1476737.676151934778318 6891848.401065579615533,1476720.880906458944082 6891883.688214769586921,1476708.900298016844317 6891916.369587530381978,1476699.78421199973673 6891943.992502459324896)",849,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1476935.00162490340881 6891674.266924197785556,1476822.473480205750093 6891761.793384700082242,1476799.939859193284065 6891783.790114367380738,1476785.346657011890784 6891800.345184058882296,1476766.722595915198326 6891824.54937045276165,1476723.736098188208416 6891895.798088805750012,1476711.624860059702769 6891917.672553083859384,1476699.78421199973673 6891943.992502459324896)",850,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1476691.171983344946057 6891992.432471443898976,1476706.772900257259607 6891960.961787490174174,1476716.439497095998377 6891939.271154,1476729.035931204212829 6891916.139652455225587,1476782.090245527913794 6891832.382406485266984,1476799.4173404420726 6891808.806677283719182,1476812.181727005401626 6891794.474261927418411,1476832.625273029785603 6891774.68484057392925,1476935.253553586313501 6891694.699898800812662)",851,rail,0,0,0,railways,7,0
|
||||
"LINESTRING (1478630.015121186384931 6891858.76339219789952,1478635.520229423418641 6891908.122586939483881,1478636.070740247843787 6891978.06907045096159,1478638.916601286735386 6892047.004431717097759,1478643.134074043016881 6892094.463943293318152,1478650.887879036134109 6892145.250223226845264,1478658.464400883996859 6892179.312314847484231,1478671.471385437063873 6892218.341333535499871,1478691.635010700207204 6892270.921968608163297,1478834.935777385951951 6892617.579527481459081)",1,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1478313.583365709986538 6891281.068739344365895,1478311.064078888390213 6891244.052202273160219,1478311.791872860630974 6891206.913214413449168,1478314.357813141075894 6891179.61471161711961,1478320.152172832516953 6891150.063152204267681,1478327.019562090979889 6891118.93297032918781,1478335.622460052836686 6891089.810801983810961,1478345.895551870344207 6891061.240524603053927,1478354.07856869418174 6891040.180739216506481)",2,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1478376.7148273200728 6891043.997246447019279,1478366.012523674638942 6891069.379364733584225,1478349.170624737394974 6891124.496849230490625,1478341.099576216889545 6891155.581069990992546,1478337.404622212052345 6891183.400629828684032,1478334.409470103681087 6891212.032651987858117,1478334.120218652067706 6891244.757277576252818,1478336.770135160302743 6891278.29440912604332)",3,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1478997.037888313643634 6890015.629031332209706,1479043.672686586854979 6889994.847840843722224,1479081.350020605139434 6889979.614465416409075,1479123.524748138152063 6889968.564922427758574,1479170.215530562913045 6889961.760495744645596,1479209.572389130014926 6889960.028739424422383,1479277.229236325016245 6889958.00580330286175,1479339.371644590049982 6889955.538434940390289,1479394.28276660759002 6889949.515607272274792,1479445.900154372444376 6889934.450895222835243,1479482.691072656074539 6889919.309585420414805,1479513.939559936523438 6889901.930829749442637,1479538.787192549789324 6889886.636329824104905,1479557.066018043085933 6889872.138764577917755,1479576.044645432848483 6889857.028222269378603,1479623.267277299193665 6889818.424440407194197,1479929.099366740556434 6889533.936068938113749)",6,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1479942.302295821951702 6889547.176416218280792,1479792.936579379020259 6889681.205510908737779,1479634.277493779081851 6889834.561687532812357,1479584.358291943091899 6889878.774539081379771,1479537.527549138991162 6889912.305973013862967,1479500.783284314209595 6889934.512196131981909,1479450.145619201473892 6889955.569085474126041,1479395.169182339450344 6889971.124246567487717,1479341.666994804749265 6889978.327139240689576,1479278.190297594293952 6889979.032103547826409,1479243.788036443060264 6889981.116346220485866,1479210.038923726649955 6889982.848107086494565,1479169.683681121794507 6889986.541509824804962,1479130.242846327135339 6889994.863166186027229,1479095.224759506992996 6890005.008548954501748,1479058.321872920030728 6890019.537004569545388,1479016.87493935925886 6890040.272282585501671)",8,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1478777.253439866937697 6890329.912772791460156,1478754.393244634149596 6890382.84888407215476,1478729.78821000806056 6890439.463628521189094,1478709.120727382134646 6890476.890270238742232,1478688.985094192204997 6890512.937716416083276,1478670.454340018797666 6890542.195732670836151,1478633.747397957136855 6890586.473781661130488,1478588.71747869788669 6890651.550235321745276,1478534.739425873849541 6890732.521037810482085,1478511.935214792611077 6890776.462944713421166,1478472.820954215712845 6890853.679894518107176,1478458.908892544917762 6890873.620319033972919,1478415.84774928027764 6890956.907761368900537)",18,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1478394.163221230730414 6890950.225115459412336,1478448.831745258299634 6890845.265387403778732,1478487.684746459824964 6890764.078874094411731,1478528.161288061179221 6890690.694451033137739,1478570.830542263807729 6890627.870682856999338,1478588.708148004952818 6890605.53993255738169,1478636.835856985999271 6890548.770754639059305,1478661.664828216191381 6890514.378391520120203,1478677.918893560534343 6890487.618659947998822,1478693.202566948253661 6890460.874343669973314,1478710.613638089969754 6890427.81573298573494,1478734.294934212695807 6890372.963567573577166,1478758.974614370847121 6890316.165379947982728)",20,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1477398.289140685694292 6890680.900715908035636,1477271.680981867713854 6890519.972504733130336,1476953.084505865816027 6890110.692934914492071,1476865.413324474124238 6889991.261711636558175)",32,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1476973.733327108668163 6890098.677702718414366,1477006.950590386521071 6890149.282794474624097,1477137.477639816235751 6890317.958516811951995,1477307.492177499225363 6890529.505495676770806,1477414.468560495181009 6890666.92282354272902)",44,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1476882.217900645453483 6889977.560873750597239,1476973.733327108668163 6890098.677702718414366)",49,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1478361.561783624347299 6891449.124428308568895,1478345.746260801097378 6891406.083198485895991,1478336.760804470162839 6891379.550418416969478)",53,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1478843.389384278329089 6893924.490144995972514,1478859.260891250800341 6893860.031164361163974,1478879.54581551020965 6893775.931677811779082,1478890.938590359175578 6893720.826675555668771,1478904.066873905947432 6893655.58737968839705,1478915.562286365544423 6893583.970421583391726,1478926.843092911178246 6893487.393564508296549,1478932.180248695891351 6893415.977419194765389,1478936.435044218087569 6893333.093783299438655,1478934.214339534984902 6893251.146226578392088,1478925.770063341362402 6893158.988803039304912,1478919.71444427408278 6893114.221312643960118,1478911.20485323574394 6893073.302204750478268,1478903.451048239832744 6893044.080968570895493,1478888.521941148210317 6892996.8458161521703,1478859.027623953763396 6892921.984570599161088,1478827.620514913694933 6892843.919889785349369,1478773.241242334712297 6892718.913729729130864,1478735.255995481973514 6892636.665826476179063,1478681.044675360899419 6892531.377474130131304,1478640.75474760052748 6892447.521837593987584,1478616.914829715620726 6892391.18421838991344,1478585.778310738503933 6892312.450182654894888,1478550.256366555579007 6892207.533986137248576,1478535.308598081115633 6892151.82655640784651,1478521.71377993770875 6892092.363823323510587,1478508.650811232859269 6892023.658011235296726,1478497.593941294122487 6891948.391943287104368,1478489.672183843096718 6891879.334796157665551,1478479.958933542715386 6891808.776019685901701,1478470.609580228338018 6891754.910796630196273,1478462.314595098374411 6891717.861420435830951,1478450.408632193692029 6891673.592468312941492,1478431.31803650339134 6891617.70479725766927,1478396.617193207610399 6891531.804702173918486)",57,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1478357.829506850801408 6891368.391655500978231,1478371.993497204268351 6891403.906618202105165,1478390.850825597764924 6891440.249455007724464)",61,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1477495.477627843851224 6890800.066300450824201,1477451.250148088904098 6890745.763359077274799)",64,motorway,0,0,1,motorways,9,0
|
||||
"LINESTRING (1478967.31030381959863 6890667.658501483500004,1478973.720489174127579 6890696.33466696832329)",206,service,0,1,0,minorroads,10,1
|
||||
"LINESTRING (1479327.960208358010277 6889996.932087614201009,1479283.12623362406157 6889933.470080768689513)",208,footway,0,1,0,minorroads,10,1
|
||||
"LINESTRING (1478931.601745795924217 6891332.723570773378015,1479038.970017851097509 6891272.239934901706874)",252,footway,0,1,0,minorroads,10,1
|
||||
"LINESTRING (1479334.09980364702642 6891680.858200660906732,1479344.391556847607717 6891681.793242639862001)",260,footway,0,1,0,minorroads,10,1
|
||||
"LINESTRING (1478994.415963881416246 6892026.73918299935758,1479007.749522649217397 6892003.975329895503819)",268,footway,0,1,0,minorroads,10,1
|
||||
"LINESTRING (1478550.844200145918876 6890545.552211744710803,1478684.179787848610431 6890636.959331315010786)",290,path,0,1,0,minorroads,10,1
|
||||
"LINESTRING (1478483.35530540603213 6892391.046249195933342,1478493.69371206802316 6892418.992724485695362,1478523.77586285257712 6892467.619516485370696)",329,service,0,1,1,minorroads,10,1
|
||||
"LINESTRING (1478314.525765596190467 6891576.70133616309613,1478278.31335021276027 6891560.652561791241169,1478215.200549985514954 6891534.686417824588716)",376,service,0,1,1,minorroads,10,1
|
||||
"LINESTRING (1478215.228542061522603 6891874.245591463521123,1478297.571898355614394 6891853.750844960100949,1478291.20836645970121 6891823.66029835306108)",378,footway,0,1,0,minorroads,10,1
|
||||
"LINESTRING (1477112.210126065183431 6890858.29331654496491,1477075.419207778759301 6890879.996360674500465,1477069.279612489743158 6890889.912954720668495,1477083.490256302058697 6890932.47628013510257)",501,footway,0,1,0,minorroads,10,1
|
||||
"LINESTRING (1477502.205056728795171 6890571.39254963491112,1477519.588135797530413 6890535.436799609102309)",541,service,0,1,0,minorroads,10,1
|
||||
"LINESTRING (1477221.817764186300337 6890863.182627168484032,1477209.725187440868467 6890834.291289354674518,1477200.338511357782409 6890838.981335008516908,1477183.972477710107341 6890800.265549850650132,1477192.883288506418467 6890795.897391020320356,1477188.460540529107675 6890785.490453751757741)",556,footway,0,1,0,minorroads,10,1
|
||||
"LINESTRING (1477943.453478170791641 6891735.30541658680886,1477934.290738694835454 6891718.244636114686728)",570,footway,0,1,0,minorroads,10,1
|
||||
"LINESTRING (1477770.406465607928112 6892066.840511322021484,1477790.178201811853796 6892050.76009990926832)",583,footway,0,1,0,minorroads,10,1
|
||||
"LINESTRING (1477118.508343119407073 6891093.428076104260981,1477088.584814094239846 6891117.76808157004416)",613,footway,0,1,0,minorroads,10,1
|
||||
"LINESTRING (1478304.32731931633316 6891039.64428252261132,1478336.73281239438802 6891063.202428812161088,1478362.868080493994057 6891085.381176148541272,1478384.421978857368231 6891108.402995181269944,1478394.816369665553793 6891123.469907105900347)",23,motorway_link,0,1,1,motorways,13,1
|
||||
"LINESTRING (1478416.715503631858155 6890979.362105399370193,1478402.775449885288253 6891019.994664833880961,1478396.486563521204516 6891050.220149672590196)",29,motorway_link,0,1,1,motorways,13,1
|
||||
"LINESTRING (1478444.334351749392226 6890965.598274794407189,1478436.291295301867649 6890993.279232017695904,1478432.251105696661398 6891019.442882195115089,1478432.932246207259595 6891054.266572091728449)",30,motorway_link,0,1,1,motorways,13,1
|
||||
"LINESTRING (1477430.918570373440161 6890653.711285330355167,1477490.821612572530285 6890732.214502855204046)",34,motorway_link,0,1,1,motorways,13,1
|
||||
"LINESTRING (1478402.159624219173566 6891432.263520221225917,1478419.636010205605999 6891465.801433998160064,1478516.63788352557458 6891599.647920207120478,1478542.959765463601798 6891648.515012176707387)",55,motorway_link,0,1,1,motorways,13,1
|
||||
"LINESTRING (1478395.805423010606319 6891558.521924624219537,1478375.240577995311469 6891530.716394937597215,1478359.005174034042284 6891515.434124372899532,1478339.886586264939979 6891502.06790954247117,1478316.951745497528464 6891488.686388740316033,1478294.97796599916182 6891479.136932187713683,1478269.187933499692008 6891469.572158829309046)",58,motorway_link,0,1,1,motorways,13,1
|
||||
"LINESTRING (1478350.271646386012435 6891029.512921379879117,1478380.699032773729414 6890977.676111518405378)",60,motorway_link,0,1,1,motorways,13,1
|
||||
"LINESTRING (1479445.853500913595781 6890008.594684292562306,1479466.810234990902245 6889974.786993312649429,1479481.711350003723055 6889943.24758021812886,1479491.517907224595547 6889916.918854899704456,1479498.478603403549641 6889887.111409046687186)",172,residential,0,1,0,minorroads,13,1
|
||||
"LINESTRING (1478553.951320560649037 6891315.418398878537118,1478598.850610133260489 6891319.848151468671858)",317,unclassified,0,1,0,minorroads,13,1
|
||||
"LINESTRING (1477416.483989951433614 6890762.960017169825733,1477397.141465578228235 6890736.030863894149661,1477367.992383987177163 6890698.603015801869333)",135,tertiary,0,1,0,mainroads,14,1
|
||||
"LINESTRING (1478177.205972440075129 6891489.069593496620655,1478177.317940743407235 6891468.652469684369862,1478178.577584154205397 6891445.077807144261897,1478182.907025211025029 6891420.261640835553408,1478186.732608902268112 6891397.361552857793868,1478191.472600403940305 6891373.802427344955504)",92,secondary,0,1,1,mainroads,15,1
|
||||
"LINESTRING (1478695.637877542292699 6892227.661724239587784,1478544.135432646842673 6892221.683182909153402)",97,secondary,0,1,1,mainroads,15,1
|
||||
"LINESTRING (1478527.237549557816237 6892200.804311908781528,1478681.837784175062552 6892208.622385010123253,1478687.930726005230099 6892209.189578847959638)",102,secondary,0,1,1,mainroads,15,1
|
||||
"LINESTRING (1479238.124306440819055 6892256.75735551957041,1479220.367999695939943 6892255.622961183078587)",107,secondary,0,1,1,mainroads,15,1
|
||||
"LINESTRING (1479396.176897070370615 6890481.549454870633781,1479348.459738528588787 6890459.663571572862566,1479285.906779821496457 6890425.80800533015281)",109,secondary,0,1,1,mainroads,15,1
|
||||
"LINESTRING (1479215.245449822163209 6892238.729702232405543,1479233.776204001158476 6892239.772116457112134)",110,secondary,0,1,1,mainroads,15,1
|
||||
"LINESTRING (1479297.47683781851083 6890409.209787493571639,1479361.448061698814854 6890444.184096252545714,1479405.974123598309234 6890464.384051165543497)",112,secondary,0,1,1,mainroads,15,1
|
||||
"LINESTRING (1478329.772116212407127 6891020.117283202707767,1478371.433655687142164 6890928.767115697264671)",120,secondary,0,1,1,mainroads,15,1
|
||||
"LINESTRING (1478451.155087549006566 6890967.130994181148708,1478439.454399868380278 6891002.920075045898557,1478435.899406239856035 6891020.515792922116816,1478432.932246207259595 6891054.266572091728449,1478436.51523190876469 6891092.385810512118042)",125,secondary,0,1,1,mainroads,15,1
|
||||
"LINESTRING (1478484.279043906368315 6892448.686919055879116,1478512.980252289446071 6892501.529672888107598)",138,secondary,0,1,1,mainroads,15,1
|
||||
"LINESTRING (1478441.24589272052981 6890743.985453568398952,1478569.785504766972736 6890803.361579650081694)",698,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478556.414623227668926 6890825.447648616507649,1478501.363540833583102 6890799.943685433827341,1478430.310321775265038 6890777.137325343675911)",699,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478627.402527447091416 6890858.032757756300271,1478598.449390378547832 6890845.709869343787432)",701,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478595.75282041169703 6890816.082902735099196,1478625.956270195310935 6890829.907785100862384)",702,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1477861.231420873198658 6890651.795460822060704,1477785.139628168661147 6890619.962187672965229)",706,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478533.153208245523274 6890597.539500389248133,1478563.608586709247902 6890651.657521475106478,1478583.986817886354402 6890702.90981500223279,1478598.971909126965329 6890754.806160444393754)",707,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478551.954552487237379 6890575.162854988127947,1478588.605510394554585 6890603.547487018629909,1478617.885221674805507 6890622.138555723242462,1478642.714192904997617 6890636.468881220556796,1478662.672542944317684 6890646.814319248311222)",711,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478591.227434826781973 6890756.093610955402255,1478577.12875931779854 6890705.745253457687795,1478556.750528137898073 6890657.573588914237916,1478526.565739739919081 6890602.627896940335631)",712,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478593.50412365840748 6891161.252267209812999,1478604.868906431598589 6891027.229151873849332)",716,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478861.276320709846914 6890948.416510410606861,1478927.88813040801324 6890978.978924939408898)",717,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478445.080807101679966 6890735.663021787069738,1478572.827310339780524 6890796.249909016303718)",721,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478725.31880857469514 6891220.416887637227774,1478753.684112047543749 6891165.635952131822705,1478782.273352124495432 6891113.062545800581574)",722,light_rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478565.344095406820998 6890811.423524235375226,1478438.502669292036444 6890750.315412051975727)",725,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478761.083350750152022 6891124.619469199329615,1478714.065994105068967 6891217.213403515517712)",726,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478594.185264169238508 6890806.013130874373019,1478624.789933702209964 6890819.929957416839898)",729,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478611.950901604257524 6891032.133892551995814,1478602.097690927330405 6891164.808263186365366)",732,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478625.368436602409929 6890839.900952127762139,1478595.276955124922097 6890826.290629548951983)",733,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478918.445470173377544 6890994.888592929579318,1478850.574017061386257 6890963.099942809902132)",738,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478922.187077639857307 6890988.451151218265295,1478855.416646176483482 6890957.168323368765414)",740,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478363.717173459939659 6890762.914036750793457,1478343.516225425293669 6890759.5421401290223)",744,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478866.398870577802882 6890942.408266056329012,1478932.544145682128146 6890972.940003331750631)",745,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1477526.68879235861823 6890495.281804216094315,1477556.565667921910062 6890511.175188716500998)",748,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1477551.331149747828022 6890517.719532645307481,1477521.612895943690091 6890502.255271850153804)",752,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478803.090125825256109 6891124.665451684966683,1478749.074750232277438 6891229.766776816919446)",771,light_rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478455.288584077497944 6890709.31637466698885,1478485.305420020362362 6890732.873553024604917,1478551.777269339188933 6890776.279022733680904)",812,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478463.210341525729746 6890697.438187943771482,1478515.826113325776532 6890741.441210155375302,1478545.09649391612038 6890764.354756650514901,1478578.658992794342339 6890784.938687206245959)",813,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478448.113281978992745 6890727.11069754883647,1478488.795098801376298 6890745.211595254950225,1478551.777269339188933 6890776.279022733680904,1478576.662224721163511 6890790.042529220692813)",815,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478448.794422489590943 6890719.355371965095401,1478488.795098801376298 6890745.211595254950225)",817,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478453.133194239344448 6890714.128961123526096,1478485.305420020362362 6890732.873553024604917)",818,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478592.291133706457913 6890793.812937114387751,1478624.575327788246796 6890811.791369803249836)",820,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478592.869636606657878 6890797.951191720552742,1478624.575327788246796 6890812.481080299243331)",822,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478872.753071786370128 6890934.054974609985948,1478938.59976474638097 6890964.157518833875656)",826,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478708.467578947311267 6891213.902627007104456,1478755.951470183674246 6891121.998467871919274)",830,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1478556.050726244226098 6890567.974754032678902,1478593.896012717625126 6890597.156338127329946,1478621.766789517831057 6890615.134331055916846,1478643.236711653415114 6890627.472192604094744,1478666.591433558845893 6890639.610827658325434)",852,rail,0,1,0,railways,17,1
|
||||
"LINESTRING (1477451.250148088904098 6890745.763359077274799,1477398.289140685694292 6890680.900715908035636)",24,motorway,0,1,1,motorways,19,1
|
||||
"LINESTRING (1478390.850825597764924 6891440.249455007724464,1478416.4169214903377 6891479.535464659333229,1478439.883611699100584 6891511.923958003520966,1478473.362134346971288 6891559.089072591625154,1478503.668221738422289 6891600.536967532709241,1478542.959765463601798 6891648.515012176707387,1478591.927236720221117 6891731.335294630378485,1478610.709919579094276 6891779.927269681356847,1478623.922179353423417 6891826.787379971705377,1478630.015121186384931 6891858.76339219789952)",25,motorway,0,1,1,motorways,19,1
|
||||
"LINESTRING (1478354.07856869418174 6891040.180739216506481,1478380.699032773729414 6890977.676111518405378,1478394.163221230730414 6890950.225115459412336)",26,motorway,0,1,1,motorways,19,1
|
||||
"LINESTRING (1478415.84774928027764 6890956.907761368900537,1478376.7148273200728 6891043.997246447019279)",27,motorway,0,1,1,motorways,19,1
|
||||
"LINESTRING (1477414.468560495181009 6890666.92282354272902,1477470.023500254843384 6890738.375857715494931)",33,motorway,0,1,1,motorways,19,1
|
||||
"LINESTRING (1478336.770135160302743 6891278.29440912604332,1478342.517841390101239 6891313.25717099942267,1478349.375899961218238 6891340.387520620599389,1478357.829506850801408 6891368.391655500978231)",52,motorway,0,1,1,motorways,19,1
|
||||
"LINESTRING (1478336.760804470162839 6891379.550418416969478,1478326.310429504606873 6891342.334165048785508,1478318.892529421718791 6891313.10389244556427,1478313.583365709986538 6891281.068739344365895)",54,motorway,0,1,1,motorways,19,1
|
||||
"LINESTRING (1478396.617193207610399 6891531.804702173918486,1478382.845091919181868 6891499.554082627408206,1478361.561783624347299 6891449.124428308568895)",56,motorway,0,1,1,motorways,19,1
|
|
|
@ -1,87 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE Map[]>
|
||||
<Map
|
||||
srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over"
|
||||
font-directory="../../fonts/dejavu-fonts-ttf-2.37/ttf/DejaVuSans.ttf"
|
||||
background-color="#dfd8c9">
|
||||
|
||||
<Style name="marking" filter-mode="first">
|
||||
<Rule>
|
||||
<Filter>([class] = 'railways')</Filter>
|
||||
<LineSymbolizer stroke="#ffffff" stroke-width="1.8" stroke-dasharray="5, 5" clip="false" />
|
||||
</Rule>
|
||||
</Style>
|
||||
<Style name="fill" filter-mode="first">
|
||||
<Rule>
|
||||
<Filter>([class] = 'minorroads')</Filter>
|
||||
<LineSymbolizer stroke-width="2.5" stroke="#ffffff" stroke-linecap="round" clip="false" />
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>([class] = 'mainroads')</Filter>
|
||||
<LineSymbolizer stroke-width="4" stroke="#ff9999" stroke-linecap="round" clip="false" />
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>([class] = 'motorways')</Filter>
|
||||
<LineSymbolizer stroke-width="6" stroke="#ff6666" stroke-linecap="round" clip="false" />
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>([class] = 'railways')</Filter>
|
||||
<LineSymbolizer stroke-width="3" stroke="#333333" stroke-linecap="round" clip="false" />
|
||||
</Rule>
|
||||
</Style>
|
||||
<Style name="bridge" filter-mode="first">
|
||||
<Rule>
|
||||
<Filter>([class] = 'railways') and ([bridge] = 1)</Filter>
|
||||
<LineSymbolizer stroke-width="6" stroke="#ffffff" clip="false" />
|
||||
</Rule>
|
||||
</Style>
|
||||
<Style name="casing" filter-mode="first">
|
||||
<Rule>
|
||||
<Filter>([class] = 'railways') and ([bridge] = 1)</Filter>
|
||||
<LineSymbolizer stroke-width="8" stroke="#333333" clip="false" />
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>([class] = 'minorroads')</Filter>
|
||||
<LineSymbolizer stroke-width="3" stroke="#a69269" clip="false" />
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>([class] = 'mainroads')</Filter>
|
||||
<LineSymbolizer stroke-width="5" stroke="#ff0000" clip="false" />
|
||||
</Rule>
|
||||
<Rule>
|
||||
<Filter>([class] = 'motorways')</Filter>
|
||||
<LineSymbolizer stroke-width="8" stroke="#990000" clip="false" />
|
||||
</Rule>
|
||||
</Style>
|
||||
<Style name="labels">
|
||||
<Rule>
|
||||
<TextSymbolizer
|
||||
halo-rasterizer="fast"
|
||||
placement="line"
|
||||
face-name="DejaVu Sans Book"
|
||||
halo-radius="2"
|
||||
allow-overlap="false"
|
||||
clip="false"
|
||||
>[type]</TextSymbolizer>
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="layer"
|
||||
srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
||||
<!--
|
||||
<StyleName>casing</StyleName>
|
||||
<StyleName>bridge</StyleName>
|
||||
<StyleName>fill</StyleName>
|
||||
<StyleName>marking</StyleName>
|
||||
-->
|
||||
<StyleName>labels</StyleName>
|
||||
<Datasource>
|
||||
<!--
|
||||
ogr2ogr -f CSV tests/visual_tests/data/roads.csv -lco GEOMETRY=AS_WKT tests/visual_tests/data/grouped-rendering.sqlite roads -sql "SELECT fid,geometry, type, tunnel, bridge, oneway, class, z_order, CAST((z_order / 10.0) AS INTEGER) AS z FROM roads ORDER BY z_order"
|
||||
-->
|
||||
<Parameter name="file">./roads.csv</Parameter>
|
||||
<Parameter name="extent">1477001.12245,6890242.37746,1480004.49012,6892244.62256</Parameter>
|
||||
<Parameter name="type">csv</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
|
||||
</Map>
|
Binary file not shown.
|
@ -1,302 +0,0 @@
|
|||
#ifndef MAPNIK_BENCH_FRAMEWORK_HPP
|
||||
#define MAPNIK_BENCH_FRAMEWORK_HPP
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/mapnik.hpp>
|
||||
#include <mapnik/debug.hpp>
|
||||
#include <mapnik/params.hpp>
|
||||
#include <mapnik/value/types.hpp>
|
||||
#include <mapnik/safe_cast.hpp>
|
||||
#include "../test/cleanup.hpp"
|
||||
|
||||
// stl
|
||||
#include <chrono>
|
||||
#include <cmath> // log10, round
|
||||
#include <cstdio> // snprintf
|
||||
#include <iomanip>
|
||||
#include <iostream>
|
||||
#include <thread>
|
||||
#include <mutex>
|
||||
#include <vector>
|
||||
|
||||
namespace benchmark {
|
||||
|
||||
template<typename T>
|
||||
using milliseconds = std::chrono::duration<T, std::milli>;
|
||||
|
||||
template<typename T>
|
||||
using seconds = std::chrono::duration<T>;
|
||||
|
||||
class test_case
|
||||
{
|
||||
protected:
|
||||
mapnik::parameters params_;
|
||||
std::size_t threads_;
|
||||
std::size_t iterations_;
|
||||
|
||||
public:
|
||||
test_case(mapnik::parameters const& params)
|
||||
: params_(params)
|
||||
, threads_(mapnik::safe_cast<std::size_t>(*params.get<mapnik::value_integer>("threads", 0)))
|
||||
, iterations_(mapnik::safe_cast<std::size_t>(*params.get<mapnik::value_integer>("iterations", 0)))
|
||||
{}
|
||||
std::size_t threads() const { return threads_; }
|
||||
std::size_t iterations() const { return iterations_; }
|
||||
mapnik::parameters const& params() const { return params_; }
|
||||
virtual bool validate() const = 0;
|
||||
virtual bool operator()() const = 0;
|
||||
};
|
||||
|
||||
// gathers --long-option values in 'params';
|
||||
// returns the index of the first non-option argument,
|
||||
// or negated index of an ill-formed option argument
|
||||
inline int parse_args(int argc, char** argv, mapnik::parameters& params)
|
||||
{
|
||||
for (int i = 1; i < argc; ++i)
|
||||
{
|
||||
const char* opt = argv[i];
|
||||
if (opt[0] != '-')
|
||||
{
|
||||
// non-option argument, return its index
|
||||
return i;
|
||||
}
|
||||
if (opt[1] != '-')
|
||||
{
|
||||
// we only accept --long-options, but instead of throwing,
|
||||
// just issue a warning and let the caller decide what to do
|
||||
std::clog << argv[0] << ": invalid option '" << opt << "'\n";
|
||||
return -i; // negative means ill-formed option #i
|
||||
}
|
||||
if (opt[2] == '\0')
|
||||
{
|
||||
// option-list terminator '--'
|
||||
return i + 1;
|
||||
}
|
||||
|
||||
// take option name without the leading '--'
|
||||
std::string key(opt + 2);
|
||||
size_t eq = key.find('=');
|
||||
if (eq != std::string::npos)
|
||||
{
|
||||
// one-argument form '--foo=bar'
|
||||
params[key.substr(0, eq)] = key.substr(eq + 1);
|
||||
}
|
||||
else if (i + 1 < argc)
|
||||
{
|
||||
// two-argument form '--foo' 'bar'
|
||||
params[key] = std::string(argv[++i]);
|
||||
}
|
||||
else
|
||||
{
|
||||
// missing second argument
|
||||
std::clog << argv[0] << ": missing option '" << opt << "' value\n";
|
||||
return -i; // negative means ill-formed option #i
|
||||
}
|
||||
}
|
||||
return argc; // there were no non-option arguments
|
||||
}
|
||||
|
||||
inline void handle_common_args(mapnik::parameters const& params)
|
||||
{
|
||||
if (auto severity = params.get<std::string>("log"))
|
||||
{
|
||||
if (*severity == "debug")
|
||||
mapnik::logger::set_severity(mapnik::logger::debug);
|
||||
else if (*severity == "warn")
|
||||
mapnik::logger::set_severity(mapnik::logger::warn);
|
||||
else if (*severity == "error")
|
||||
mapnik::logger::set_severity(mapnik::logger::error);
|
||||
else if (*severity == "none")
|
||||
mapnik::logger::set_severity(mapnik::logger::none);
|
||||
else
|
||||
std::clog << "ignoring option --log='" << *severity << "' (allowed values are: debug, warn, error, none)\n";
|
||||
}
|
||||
}
|
||||
|
||||
inline int handle_args(int argc, char** argv, mapnik::parameters& params)
|
||||
{
|
||||
int res = parse_args(argc, argv, params);
|
||||
handle_common_args(params);
|
||||
return res;
|
||||
}
|
||||
|
||||
#define BENCHMARK(test_class, name) \
|
||||
int main(int argc, char** argv) \
|
||||
{ \
|
||||
mapnik::setup(); \
|
||||
try \
|
||||
{ \
|
||||
mapnik::parameters params; \
|
||||
benchmark::handle_args(argc, argv, params); \
|
||||
test_class test_runner(params); \
|
||||
auto result = run(test_runner, name); \
|
||||
testing::run_cleanup(); \
|
||||
return result; \
|
||||
} \
|
||||
catch (std::exception const& ex) \
|
||||
{ \
|
||||
std::clog << ex.what() << "\n"; \
|
||||
testing::run_cleanup(); \
|
||||
return -1; \
|
||||
} \
|
||||
}
|
||||
|
||||
struct big_number_fmt
|
||||
{
|
||||
int w;
|
||||
double v;
|
||||
const char* u;
|
||||
|
||||
big_number_fmt(int width, double value, int base = 1000)
|
||||
: w(width)
|
||||
, v(value)
|
||||
, u("")
|
||||
{
|
||||
static const char* suffixes = "\0\0k\0M\0G\0T\0P\0E\0Z\0Y\0\0";
|
||||
u = suffixes;
|
||||
|
||||
while (v > 1 && std::log10(std::round(v)) >= width && u[2])
|
||||
{
|
||||
v /= base;
|
||||
u += 2;
|
||||
}
|
||||
|
||||
// adjust width for proper alignment without suffix
|
||||
w += (u == suffixes);
|
||||
}
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
int run(T const& test_runner, std::string const& name)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (!test_runner.validate())
|
||||
{
|
||||
std::clog << "test did not validate: " << name << "\n";
|
||||
return 1;
|
||||
}
|
||||
// run test once before timing
|
||||
// if it returns false then we'll abort timing
|
||||
if (!test_runner())
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
|
||||
std::chrono::high_resolution_clock::time_point start;
|
||||
std::chrono::high_resolution_clock::duration elapsed;
|
||||
auto opt_min_duration = test_runner.params().template get<double>("min-duration", 0.0);
|
||||
std::chrono::duration<double> min_seconds(*opt_min_duration);
|
||||
auto min_duration = std::chrono::duration_cast<decltype(elapsed)>(min_seconds);
|
||||
auto num_iters = test_runner.iterations();
|
||||
auto num_threads = test_runner.threads();
|
||||
auto total_iters = 0;
|
||||
|
||||
if (num_threads > 0)
|
||||
{
|
||||
std::mutex mtx_ready;
|
||||
std::unique_lock<std::mutex> lock_ready(mtx_ready);
|
||||
|
||||
auto stub = [&](T const& test_copy) {
|
||||
// workers will wait on this mutex until the main thread
|
||||
// constructs all of them and starts measuring time
|
||||
std::unique_lock<std::mutex> my_lock(mtx_ready);
|
||||
my_lock.unlock();
|
||||
test_copy();
|
||||
};
|
||||
|
||||
std::vector<std::thread> tg;
|
||||
tg.reserve(num_threads);
|
||||
for (auto i = num_threads; i-- > 0;)
|
||||
{
|
||||
tg.emplace_back(stub, test_runner);
|
||||
}
|
||||
start = std::chrono::high_resolution_clock::now();
|
||||
lock_ready.unlock();
|
||||
// wait for all workers to finish
|
||||
for (auto& t : tg)
|
||||
{
|
||||
if (t.joinable())
|
||||
t.join();
|
||||
}
|
||||
elapsed = std::chrono::high_resolution_clock::now() - start;
|
||||
// this is actually per-thread count, not total, but I think
|
||||
// reporting average 'iters/thread/second' is more useful
|
||||
// than 'iters/second' multiplied by the number of threads
|
||||
total_iters += num_iters;
|
||||
}
|
||||
else
|
||||
{
|
||||
start = std::chrono::high_resolution_clock::now();
|
||||
do
|
||||
{
|
||||
test_runner();
|
||||
elapsed = std::chrono::high_resolution_clock::now() - start;
|
||||
total_iters += num_iters;
|
||||
} while (elapsed < min_duration);
|
||||
}
|
||||
|
||||
char msg[200];
|
||||
double dur_total = milliseconds<double>(elapsed).count();
|
||||
auto elapsed_nonzero = std::max(elapsed, decltype(elapsed){1});
|
||||
big_number_fmt itersf(4, total_iters);
|
||||
big_number_fmt ips(5, total_iters / seconds<double>(elapsed_nonzero).count());
|
||||
|
||||
std::clog << std::left << std::setw(43) << name;
|
||||
std::clog << std::resetiosflags(std::ios::adjustfield);
|
||||
if (num_threads > 0)
|
||||
{
|
||||
std::clog << ' ' << std::setw(3) << num_threads << " worker" << (num_threads > 1 ? "s" : " ");
|
||||
}
|
||||
else
|
||||
{
|
||||
std::clog << " main thread";
|
||||
}
|
||||
std::snprintf(msg,
|
||||
sizeof(msg),
|
||||
" %*.0f%s iters %6.0f milliseconds %*.0f%s i/t/s\n",
|
||||
itersf.w,
|
||||
itersf.v,
|
||||
itersf.u,
|
||||
dur_total,
|
||||
ips.w,
|
||||
ips.v,
|
||||
ips.u);
|
||||
std::clog << msg;
|
||||
return 0;
|
||||
}
|
||||
catch (std::exception const& ex)
|
||||
{
|
||||
std::clog << "test runner did not complete: " << ex.what() << "\n";
|
||||
return 4;
|
||||
}
|
||||
}
|
||||
|
||||
struct sequencer
|
||||
{
|
||||
sequencer(int argc, char** argv)
|
||||
: exit_code_(0)
|
||||
{
|
||||
benchmark::handle_args(argc, argv, params_);
|
||||
}
|
||||
|
||||
int done() const { return exit_code_; }
|
||||
|
||||
template<typename Test, typename... Args>
|
||||
sequencer& run(std::string const& name, Args&&... args)
|
||||
{
|
||||
// Test instance lifetime is confined to this function
|
||||
Test test_runner(params_, std::forward<Args>(args)...);
|
||||
// any failing test run will make exit code non-zero
|
||||
exit_code_ |= benchmark::run(test_runner, name);
|
||||
return *this; // allow chaining calls
|
||||
}
|
||||
|
||||
protected:
|
||||
mapnik::parameters params_;
|
||||
int exit_code_;
|
||||
};
|
||||
|
||||
} // namespace benchmark
|
||||
|
||||
#endif // MAPNIK_BENCH_FRAMEWORK_HPP
|
|
@ -1,35 +0,0 @@
|
|||
#ifndef MAPNIK_COMPARE_IMAGES_HPP
|
||||
#define MAPNIK_COMPARE_IMAGES_HPP
|
||||
|
||||
#include <mapnik/image.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include <mapnik/image_reader.hpp>
|
||||
|
||||
namespace benchmark {
|
||||
|
||||
bool compare_images(std::string const& src_fn, std::string const& dest_fn)
|
||||
{
|
||||
std::unique_ptr<mapnik::image_reader> reader1(mapnik::get_image_reader(dest_fn, "png"));
|
||||
if (!reader1.get())
|
||||
{
|
||||
throw mapnik::image_reader_exception("Failed to load: " + dest_fn);
|
||||
}
|
||||
|
||||
std::unique_ptr<mapnik::image_reader> reader2(mapnik::get_image_reader(src_fn, "png"));
|
||||
if (!reader2.get())
|
||||
{
|
||||
throw mapnik::image_reader_exception("Failed to load: " + src_fn);
|
||||
}
|
||||
|
||||
const mapnik::image_any desc_any = reader1->read(0, 0, reader1->width(), reader1->height());
|
||||
const mapnik::image_any src_any = reader2->read(0, 0, reader2->width(), reader2->height());
|
||||
|
||||
mapnik::image_rgba8 const& dest = mapnik::util::get<mapnik::image_rgba8>(desc_any);
|
||||
mapnik::image_rgba8 const& src = mapnik::util::get<mapnik::image_rgba8>(src_any);
|
||||
|
||||
return compare(dest, src, 0, true) == 0;
|
||||
}
|
||||
|
||||
} // namespace benchmark
|
||||
|
||||
#endif // MAPNIK_COMPARE_IMAGES_HPP
|
|
@ -1,69 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
cd "$( dirname "${BASH_SOURCE[0]}" )"
|
||||
cd ../
|
||||
source ./localize.sh
|
||||
|
||||
BASE=./benchmark/out
|
||||
function run {
|
||||
local runner="$BASE/$1 --log=none"
|
||||
local threads="$2"
|
||||
local iters="$3"
|
||||
shift 3
|
||||
$runner --threads 0 --iterations $iters "$@"
|
||||
if test $threads -gt 0; then
|
||||
$runner --threads $threads --iterations $((iters/threads)) "$@"
|
||||
fi
|
||||
}
|
||||
run test_getline 30 10000000
|
||||
#run test_array_allocation 20 100000
|
||||
#run test_png_encoding1 10 1000
|
||||
#run test_png_encoding2 10 50
|
||||
#run test_to_string1 10 100000
|
||||
#run test_to_string2 10 100000
|
||||
#run test_polygon_clipping 10 1000
|
||||
#run test_polygon_clipping_rendering 10 100
|
||||
run test_proj_transform1 10 100
|
||||
run test_expression_parse 10 10000
|
||||
run test_face_ptr_creation 10 1000
|
||||
run test_font_registration 10 100
|
||||
run test_offset_converter 10 1000
|
||||
#run normalize_angle 0 1000000 --min-duration=0.2
|
||||
|
||||
# commented since this is really slow on travis
|
||||
: '
|
||||
./benchmark/out/test_rendering \
|
||||
--name "text rendering" \
|
||||
--map benchmark/data/roads.xml \
|
||||
--extent 1477001.12245,6890242.37746,1480004.49012,6892244.62256 \
|
||||
--width 600 \
|
||||
--height 600 \
|
||||
--iterations 20 \
|
||||
--threads 10
|
||||
'
|
||||
|
||||
./benchmark/out/test_rendering \
|
||||
--name "gdal tiff rendering" \
|
||||
--map benchmark/data/gdal-wgs.xml \
|
||||
--extent -180.0,-120.0,180.0,120.0 \
|
||||
--width 600 \
|
||||
--height 600 \
|
||||
--iterations 20 \
|
||||
--threads 10
|
||||
|
||||
./benchmark/out/test_rendering \
|
||||
--name "raster tiff rendering" \
|
||||
--map benchmark/data/raster-wgs.xml \
|
||||
--extent -180.0,-120.0,180.0,120.0 \
|
||||
--width 600 \
|
||||
--height 600 \
|
||||
--iterations 20 \
|
||||
--threads 10
|
||||
|
||||
./benchmark/out/test_quad_tree \
|
||||
--iterations 10000 \
|
||||
--threads 1
|
||||
|
||||
./benchmark/out/test_quad_tree \
|
||||
--iterations 1000 \
|
||||
--threads 10
|
315
benchmark/run.cpp
Normal file
315
benchmark/run.cpp
Normal file
|
@ -0,0 +1,315 @@
|
|||
#include <mapnik/graphics.hpp>
|
||||
#include <mapnik/image_data.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include <mapnik/image_reader.hpp>
|
||||
#include <mapnik/util/conversions.hpp>
|
||||
|
||||
|
||||
// stl
|
||||
#include <string>
|
||||
#include <iostream>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <cstdio>
|
||||
|
||||
// boost
|
||||
#include <boost/shared_ptr.hpp>
|
||||
#include <boost/make_shared.hpp>
|
||||
#include <boost/bind.hpp>
|
||||
|
||||
#define BOOST_CHRONO_HEADER_ONLY
|
||||
#include <boost/chrono/process_cpu_clocks.hpp>
|
||||
#include <boost/chrono.hpp>
|
||||
#include <boost/thread/thread.hpp>
|
||||
|
||||
using namespace boost::chrono;
|
||||
using namespace mapnik;
|
||||
|
||||
typedef process_cpu_clock clock_type;
|
||||
typedef clock_type::duration dur;
|
||||
|
||||
template <typename T>
|
||||
void benchmark(T test, std::string const& name)
|
||||
{
|
||||
if (!test.validate()) throw std::runtime_error(std::string("test did not validate: ") + name);
|
||||
process_cpu_clock::time_point start;
|
||||
dur elapsed;
|
||||
if (test.threads_ > 0) {
|
||||
boost::thread_group tg;
|
||||
for (unsigned i=0;i<test.threads_;++i)
|
||||
{
|
||||
tg.create_thread(test);
|
||||
}
|
||||
start = process_cpu_clock::now();
|
||||
tg.join_all();
|
||||
elapsed = process_cpu_clock::now() - start;
|
||||
} else {
|
||||
start = process_cpu_clock::now();
|
||||
test();
|
||||
elapsed = process_cpu_clock::now() - start;
|
||||
}
|
||||
std::clog << (test.threads_ ? "threaded -> ": "")
|
||||
<< name << ": "
|
||||
<< boost::chrono::duration_cast<milliseconds>(elapsed) << "\n";
|
||||
}
|
||||
|
||||
bool compare_images(std::string const& src_fn,std::string const& dest_fn)
|
||||
{
|
||||
std::auto_ptr<mapnik::image_reader> reader1(mapnik::get_image_reader(dest_fn,"png"));
|
||||
if (!reader1.get())
|
||||
{
|
||||
throw mapnik::image_reader_exception("Failed to load: " + dest_fn);
|
||||
}
|
||||
boost::shared_ptr<image_32> image_ptr1 = boost::make_shared<image_32>(reader1->width(),reader1->height());
|
||||
reader1->read(0,0,image_ptr1->data());
|
||||
|
||||
std::auto_ptr<mapnik::image_reader> reader2(mapnik::get_image_reader(src_fn,"png"));
|
||||
if (!reader2.get())
|
||||
{
|
||||
throw mapnik::image_reader_exception("Failed to load: " + src_fn);
|
||||
}
|
||||
boost::shared_ptr<image_32> image_ptr2 = boost::make_shared<image_32>(reader2->width(),reader2->height());
|
||||
reader2->read(0,0,image_ptr2->data());
|
||||
|
||||
image_data_32 const& dest = image_ptr1->data();
|
||||
image_data_32 const& src = image_ptr2->data();
|
||||
|
||||
unsigned int width = src.width();
|
||||
unsigned int height = src.height();
|
||||
if ((width != dest.width()) || height != dest.height()) return false;
|
||||
for (unsigned int y = 0; y < height; ++y)
|
||||
{
|
||||
const unsigned int* row_from = src.getRow(y);
|
||||
const unsigned int* row_to = dest.getRow(y);
|
||||
for (unsigned int x = 0; x < width; ++x)
|
||||
{
|
||||
if (row_from[x] != row_to[x]) return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
struct test1
|
||||
{
|
||||
unsigned iter_;
|
||||
unsigned threads_;
|
||||
explicit test1(unsigned iterations, unsigned threads=0) :
|
||||
iter_(iterations),
|
||||
threads_(threads)
|
||||
{}
|
||||
|
||||
bool validate()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void operator()()
|
||||
{
|
||||
mapnik::image_data_32 im(256,256);
|
||||
std::string out;
|
||||
for (unsigned i=0;i<iter_;++i) {
|
||||
out.clear();
|
||||
out = mapnik::save_to_string(im,"png");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct test2
|
||||
{
|
||||
unsigned iter_;
|
||||
unsigned threads_;
|
||||
boost::shared_ptr<image_32> im_;
|
||||
explicit test2(unsigned iterations, unsigned threads=0) :
|
||||
iter_(iterations),
|
||||
threads_(threads),
|
||||
im_()
|
||||
{
|
||||
std::string filename("./benchmark/data/multicolor.png");
|
||||
std::auto_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(filename,"png"));
|
||||
if (!reader.get())
|
||||
{
|
||||
throw mapnik::image_reader_exception("Failed to load: " + filename);
|
||||
}
|
||||
im_ = boost::make_shared<image_32>(reader->width(),reader->height());
|
||||
reader->read(0,0,im_->data());
|
||||
}
|
||||
|
||||
bool validate()
|
||||
{
|
||||
std::string expected("./benchmark/data/multicolor-hextree-expected.png");
|
||||
std::string actual("./benchmark/data/multicolor-hextree-actual.png");
|
||||
mapnik::save_to_file(im_->data(),actual, "png8:m=h");
|
||||
return compare_images(actual,expected);
|
||||
}
|
||||
|
||||
void operator()()
|
||||
{
|
||||
std::string out;
|
||||
for (unsigned i=0;i<iter_;++i) {
|
||||
out.clear();
|
||||
out = mapnik::save_to_string(im_->data(),"png8:m=h");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct test3
|
||||
{
|
||||
unsigned iter_;
|
||||
unsigned threads_;
|
||||
double val_;
|
||||
explicit test3(unsigned iterations, unsigned threads=0) :
|
||||
iter_(iterations),
|
||||
threads_(threads),
|
||||
val_(-0.123) {}
|
||||
bool validate()
|
||||
{
|
||||
std::ostringstream s;
|
||||
s << val_;
|
||||
return (s.str() == "-0.123");
|
||||
}
|
||||
void operator()()
|
||||
{
|
||||
std::string out;
|
||||
for (unsigned i=0;i<iter_;++i) {
|
||||
std::ostringstream s;
|
||||
s << val_;
|
||||
out = s.str();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
struct test4
|
||||
{
|
||||
unsigned iter_;
|
||||
unsigned threads_;
|
||||
double val_;
|
||||
explicit test4(unsigned iterations, unsigned threads=0) :
|
||||
iter_(iterations),
|
||||
threads_(threads),
|
||||
val_(-0.123) {}
|
||||
|
||||
bool validate()
|
||||
{
|
||||
std::string s;
|
||||
mapnik::util::to_string(s,val_);
|
||||
return (s == "-0.123");
|
||||
}
|
||||
void operator()()
|
||||
{
|
||||
std::string out;
|
||||
for (unsigned i=0;i<iter_;++i) {
|
||||
out.clear();
|
||||
mapnik::util::to_string(out,val_);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct test5
|
||||
{
|
||||
unsigned iter_;
|
||||
unsigned threads_;
|
||||
double val_;
|
||||
explicit test5(unsigned iterations, unsigned threads=0) :
|
||||
iter_(iterations),
|
||||
threads_(threads),
|
||||
val_(-0.123) {}
|
||||
|
||||
bool validate()
|
||||
{
|
||||
std::string s;
|
||||
to_string_impl(s,val_);
|
||||
return (s == "-0.123");
|
||||
}
|
||||
bool to_string_impl(std::string &s , double val)
|
||||
{
|
||||
s.resize(s.capacity());
|
||||
while (true)
|
||||
{
|
||||
size_t n2 = static_cast<size_t>(snprintf(&s[0], s.size()+1, "%g", val_));
|
||||
if (n2 <= s.size())
|
||||
{
|
||||
s.resize(n2);
|
||||
break;
|
||||
}
|
||||
s.resize(n2);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
void operator()()
|
||||
{
|
||||
std::string out;
|
||||
for (unsigned i=0;i<iter_;++i)
|
||||
{
|
||||
out.clear();
|
||||
to_string_impl(out , val_);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
int main( int, char*[] )
|
||||
{
|
||||
try
|
||||
{
|
||||
std::cout << "starting benchmark…\n";
|
||||
{
|
||||
test1 runner(100);
|
||||
benchmark(runner,"encoding blank image as png");
|
||||
}
|
||||
|
||||
{
|
||||
test2 runner(100);
|
||||
benchmark(runner,"encoding multicolor image as png8:m=h");
|
||||
}
|
||||
|
||||
{
|
||||
test1 runner(10,10);
|
||||
benchmark(runner,"encoding blank image as png");
|
||||
}
|
||||
|
||||
{
|
||||
test2 runner(10,10);
|
||||
benchmark(runner,"encoding multicolor image as png8:m=h");
|
||||
}
|
||||
|
||||
{
|
||||
test3 runner(1000000);
|
||||
benchmark(runner,"double to string conversion with std::ostringstream");
|
||||
}
|
||||
|
||||
{
|
||||
test4 runner(1000000);
|
||||
benchmark(runner,"double to string conversion with mapnik::util_to_string");
|
||||
}
|
||||
|
||||
{
|
||||
test5 runner(1000000);
|
||||
benchmark(runner,"double to string conversion with snprintf");
|
||||
}
|
||||
|
||||
{
|
||||
test3 runner(1000000,10);
|
||||
benchmark(runner,"double to string conversion with std::ostringstream");
|
||||
}
|
||||
|
||||
{
|
||||
test4 runner(1000000,10);
|
||||
benchmark(runner,"double to string conversion with mapnik::util_to_string");
|
||||
}
|
||||
|
||||
{
|
||||
test5 runner(1000000,10);
|
||||
benchmark(runner,"double to string conversion with snprintf");
|
||||
}
|
||||
|
||||
std::cout << "...benchmark done\n";
|
||||
return 0;
|
||||
}
|
||||
catch (std::exception const& ex)
|
||||
{
|
||||
std::clog << "test error: " << ex.what() << "\n";
|
||||
return -1;
|
||||
}
|
||||
}
|
|
@ -1,65 +0,0 @@
|
|||
#!/bin/bash
|
||||
|
||||
BASE=.
|
||||
function run {
|
||||
local runner="$BASE/$1 --log=none"
|
||||
local threads="$2"
|
||||
local iters="$3"
|
||||
shift 3
|
||||
$runner --threads 0 --iterations $iters "$@"
|
||||
if test $threads -gt 0; then
|
||||
$runner --threads $threads --iterations $((iters/threads)) "$@"
|
||||
fi
|
||||
}
|
||||
run test_getline 30 10000000
|
||||
#run test_array_allocation 20 100000
|
||||
#run test_png_encoding1 10 1000
|
||||
#run test_png_encoding2 10 50
|
||||
#run test_to_string1 10 100000
|
||||
#run test_to_string2 10 100000
|
||||
#run test_polygon_clipping 10 1000
|
||||
#run test_polygon_clipping_rendering 10 100
|
||||
run test_proj_transform1 10 100
|
||||
run test_expression_parse 10 10000
|
||||
run test_face_ptr_creation 10 1000
|
||||
run test_font_registration 10 100
|
||||
run test_offset_converter 10 1000
|
||||
#run normalize_angle 0 1000000 --min-duration=0.2
|
||||
|
||||
# commented since this is really slow on travis
|
||||
: '
|
||||
$BASE/test_rendering \
|
||||
--name "text rendering" \
|
||||
--map benchmark/data/roads.xml \
|
||||
--extent 1477001.12245,6890242.37746,1480004.49012,6892244.62256 \
|
||||
--width 600 \
|
||||
--height 600 \
|
||||
--iterations 20 \
|
||||
--threads 10
|
||||
'
|
||||
|
||||
$BASE/test_rendering \
|
||||
--name "gdal tiff rendering" \
|
||||
--map benchmark/data/gdal-wgs.xml \
|
||||
--extent -180.0,-120.0,180.0,120.0 \
|
||||
--width 600 \
|
||||
--height 600 \
|
||||
--iterations 20 \
|
||||
--threads 10
|
||||
|
||||
$BASE/test_rendering \
|
||||
--name "raster tiff rendering" \
|
||||
--map benchmark/data/raster-wgs.xml \
|
||||
--extent -180.0,-120.0,180.0,120.0 \
|
||||
--width 600 \
|
||||
--height 600 \
|
||||
--iterations 20 \
|
||||
--threads 10
|
||||
|
||||
$BASE/test_quad_tree \
|
||||
--iterations 10000 \
|
||||
--threads 1
|
||||
|
||||
$BASE/test_quad_tree \
|
||||
--iterations 1000 \
|
||||
--threads 10
|
|
@ -1,72 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
|
||||
#include <mapnik/util/math.hpp>
|
||||
|
||||
template<typename T>
|
||||
struct bench_func : benchmark::test_case
|
||||
{
|
||||
T (*const func_)(T);
|
||||
T const value_;
|
||||
|
||||
bench_func(mapnik::parameters const& params, T (*func)(T), T value)
|
||||
: test_case(params)
|
||||
, func_(func)
|
||||
, value_(value)
|
||||
{}
|
||||
|
||||
bool validate() const { return true; }
|
||||
|
||||
bool operator()() const
|
||||
{
|
||||
for (auto i = this->iterations_; i-- > 0;)
|
||||
{
|
||||
func_(value_);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
#define BENCH_FUNC1(func, value) run<bench_func<double>>(#func "(" #value ")", func, value)
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::setup();
|
||||
return benchmark::sequencer(argc, argv)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +3)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +6)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +9)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +12)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +15)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +20)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +30)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +40)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +50)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +70)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +90)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +110)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +130)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +157)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +209)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +314)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +628)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, +942)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -3)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -6)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -9)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -12)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -15)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -20)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -30)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -40)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -50)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -70)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -90)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -110)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -130)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -157)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -209)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -314)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -628)
|
||||
.BENCH_FUNC1(mapnik::util::normalize_angle, -942)
|
||||
.done();
|
||||
}
|
|
@ -1,370 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <cstring>
|
||||
#include <cstdlib>
|
||||
#include <deque>
|
||||
#include <stdexcept>
|
||||
#include <array>
|
||||
#include <valarray>
|
||||
#include <boost/version.hpp>
|
||||
#if BOOST_VERSION >= 105400
|
||||
#include <boost/container/static_vector.hpp>
|
||||
#endif
|
||||
|
||||
// http://stackoverflow.com/questions/17347254/why-is-allocation-and-deallocation-of-stdvector-slower-than-dynamic-array-on-m
|
||||
|
||||
#define FULL_ZERO_CHECK
|
||||
|
||||
inline void ensure_zero(uint8_t* data, uint32_t size)
|
||||
{
|
||||
#ifdef FULL_ZERO_CHECK
|
||||
for (std::size_t i = 0; i < size; ++i)
|
||||
{
|
||||
if (data[i] != 0)
|
||||
{
|
||||
throw std::runtime_error("found non zero value");
|
||||
}
|
||||
}
|
||||
#else
|
||||
if (data[0] != 0)
|
||||
{
|
||||
throw std::runtime_error("found non zero value");
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
class test1 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test1(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, size_(*params.get<mapnik::value_integer>("size", 256 * 256))
|
||||
, array_(size_, 0)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
// NOTE: sizeof(uint8_t) == 1
|
||||
uint8_t* data = (uint8_t*)malloc(sizeof(uint8_t) * size_);
|
||||
memcpy(data, &array_[0], size_);
|
||||
ensure_zero(data, size_);
|
||||
free(data);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class test1b : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test1b(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, size_(*params.get<mapnik::value_integer>("size", 256 * 256))
|
||||
, array_(size_, 0)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
// NOTE: sizeof(uint8_t) == 1
|
||||
uint8_t* data = (uint8_t*)malloc(sizeof(uint8_t) * size_);
|
||||
memset(data, 0, sizeof(uint8_t) * size_);
|
||||
ensure_zero(data, size_);
|
||||
free(data);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class test1c : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test1c(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, size_(*params.get<mapnik::value_integer>("size", 256 * 256))
|
||||
, array_(size_, 0)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
uint8_t* data = static_cast<uint8_t*>(::operator new(sizeof(uint8_t) * size_));
|
||||
std::fill(data, data + size_, 0);
|
||||
ensure_zero(data, size_);
|
||||
::operator delete(data);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class test2 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test2(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, size_(*params.get<mapnik::value_integer>("size", 256 * 256))
|
||||
, array_(size_, 0)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
uint8_t* data = static_cast<uint8_t*>(::operator new(sizeof(uint8_t) * size_));
|
||||
memcpy(data, &array_[0], size_);
|
||||
ensure_zero(data, size_);
|
||||
::operator delete(data), data = 0;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class test3 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test3(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, size_(*params.get<mapnik::value_integer>("size", 256 * 256))
|
||||
, array_(size_, 0)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
std::vector<uint8_t> data(size_);
|
||||
ensure_zero(&data[0], data.size());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class test3b : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test3b(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, size_(*params.get<mapnik::value_integer>("size", 256 * 256))
|
||||
, array_(size_, 0)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
std::vector<uint8_t> data(0);
|
||||
data.resize(size_, 0);
|
||||
ensure_zero(&data[0], data.size());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class test3c : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test3c(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, size_(*params.get<mapnik::value_integer>("size", 256 * 256))
|
||||
, array_(size_, 0)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
std::vector<uint8_t> data(0);
|
||||
data.assign(size_, 0);
|
||||
ensure_zero(&data[0], data.size());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class test3d : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test3d(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, size_(*params.get<mapnik::value_integer>("size", 256 * 256))
|
||||
, array_(size_, 0)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
std::deque<uint8_t> data(size_);
|
||||
for (std::size_t i = 0; i < size_; ++i)
|
||||
{
|
||||
if (data[i] != 0)
|
||||
{
|
||||
throw std::runtime_error("found non zero value");
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class test4 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test4(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, size_(*params.get<mapnik::value_integer>("size", 256 * 256))
|
||||
, array_(size_, 0)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
uint8_t* data = (uint8_t*)calloc(size_, sizeof(uint8_t));
|
||||
ensure_zero(data, size_);
|
||||
free(data);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class test5 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test5(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, size_(*params.get<mapnik::value_integer>("size", 256 * 256))
|
||||
, array_(size_, 0)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
std::string data(array_.begin(), array_.end());
|
||||
ensure_zero((uint8_t*)&data[0], size_);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class test5b : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<char> array_;
|
||||
test5b(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, size_(*params.get<mapnik::value_integer>("size", 256 * 256))
|
||||
, array_(size_, 0)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
std::string data(&array_[0], array_.size());
|
||||
ensure_zero((uint8_t*)&data[0], size_);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
// C++14 dynarray<T>
|
||||
// http://isocpp.org/blog/2013/04/trip-report-iso-c-spring-2013-meeting
|
||||
// http://lists.cs.uiuc.edu/pipermail/cfe-commits/Week-of-Mon-20130909/088700.html
|
||||
// http://stackoverflow.com/questions/17303902/any-alternative-to-stddynarray-presently-available
|
||||
|
||||
class test6 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test6(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, size_(*params.get<mapnik::value_integer>("size", 256 * 256))
|
||||
, array_(size_, 0)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
std::valarray<uint8_t> data(static_cast<uint8_t>(0), static_cast<size_t>(size_));
|
||||
ensure_zero(&data[0], size_);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
#if BOOST_VERSION >= 105400
|
||||
// http://i42.co.uk/stuff/vecarray.htm
|
||||
// http://www.boost.org/doc/libs/1_54_0/doc/html/boost/container/static_vector.html
|
||||
|
||||
class test7 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
uint32_t size_;
|
||||
std::vector<uint8_t> array_;
|
||||
test7(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, size_(*params.get<mapnik::value_integer>("size", 256 * 256))
|
||||
, array_(size_, 0)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
boost::container::static_vector<uint8_t, 256 * 256> data(size_, 0);
|
||||
ensure_zero(&data[0], size_);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
#endif
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::setup();
|
||||
return benchmark::sequencer(argc, argv)
|
||||
.run<test4>("calloc")
|
||||
.run<test1>("malloc/memcpy")
|
||||
.run<test1b>("malloc/memset")
|
||||
.run<test1c>("operator new/std::fill")
|
||||
.run<test2>("operator new/memcpy")
|
||||
.run<test3>("vector(N)")
|
||||
.run<test3b>("vector/resize")
|
||||
.run<test3c>("vector/assign")
|
||||
.run<test3d>("deque(N)")
|
||||
.run<test5>("std::string range")
|
||||
.run<test5b>("std::string &[0]")
|
||||
.run<test6>("valarray")
|
||||
#if BOOST_VERSION >= 105400
|
||||
.run<test7>("static_vector")
|
||||
#endif
|
||||
.done();
|
||||
}
|
|
@ -1,44 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/unicode.hpp>
|
||||
#include <mapnik/attribute.hpp>
|
||||
#include <mapnik/expression.hpp>
|
||||
#include <mapnik/expression_string.hpp>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
std::string expr_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, expr_("((([mapnik::geometry_type]=2) and ([oneway]=1)) and ([class]='path'))")
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
mapnik::expression_ptr expr = mapnik::parse_expression(expr_);
|
||||
std::string result = mapnik::to_expression_string(*expr);
|
||||
bool ret = (result == expr_);
|
||||
if (!ret)
|
||||
{
|
||||
std::clog << result << " != " << expr_ << "\n";
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
mapnik::expression_ptr expr = mapnik::parse_expression(expr_);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::setup();
|
||||
mapnik::parameters params;
|
||||
benchmark::handle_args(argc, argv, params);
|
||||
test test_runner(params);
|
||||
return run(test_runner, "expr parsing");
|
||||
}
|
|
@ -1,74 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/font_engine_freetype.hpp>
|
||||
#include <boost/format.hpp>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
std::size_t count = 0;
|
||||
std::size_t expected_count = mapnik::freetype_engine::face_names().size();
|
||||
mapnik::freetype_engine::font_file_mapping_type font_file_mapping;
|
||||
mapnik::freetype_engine::font_memory_cache_type font_cache;
|
||||
mapnik::font_library library;
|
||||
for (std::string const& name : mapnik::freetype_engine::face_names())
|
||||
{
|
||||
mapnik::face_ptr f = mapnik::freetype_engine::create_face(name,
|
||||
library,
|
||||
font_file_mapping,
|
||||
font_cache,
|
||||
mapnik::freetype_engine::get_mapping(),
|
||||
mapnik::freetype_engine::get_cache());
|
||||
if (f)
|
||||
++count;
|
||||
}
|
||||
return count == expected_count;
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
std::size_t expected_count = mapnik::freetype_engine::face_names().size();
|
||||
for (unsigned i = 0; i < iterations_; ++i)
|
||||
{
|
||||
std::size_t count = 0;
|
||||
mapnik::freetype_engine::font_file_mapping_type font_file_mapping;
|
||||
mapnik::freetype_engine::font_memory_cache_type font_cache;
|
||||
mapnik::font_library library;
|
||||
for (std::string const& name : mapnik::freetype_engine::face_names())
|
||||
{
|
||||
mapnik::face_ptr f = mapnik::freetype_engine::create_face(name,
|
||||
library,
|
||||
font_file_mapping,
|
||||
font_cache,
|
||||
mapnik::freetype_engine::get_mapping(),
|
||||
mapnik::freetype_engine::get_cache());
|
||||
if (f)
|
||||
++count;
|
||||
}
|
||||
if (count != expected_count)
|
||||
{
|
||||
std::clog << "warning: face creation not working as expected\n";
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::setup();
|
||||
mapnik::parameters params;
|
||||
benchmark::handle_args(argc, argv, params);
|
||||
bool success = mapnik::freetype_engine::register_fonts("./fonts", true);
|
||||
if (!success)
|
||||
{
|
||||
std::clog << "warning, did not register any new fonts!\n";
|
||||
return -1;
|
||||
}
|
||||
std::size_t face_count = mapnik::freetype_engine::face_names().size();
|
||||
test test_runner(params);
|
||||
return run(test_runner, (boost::format("font_engine: creating %ld faces") % (face_count)).str());
|
||||
}
|
|
@ -1,24 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/font_engine_freetype.hpp>
|
||||
#include <boost/format.hpp>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
{}
|
||||
bool validate() const { return mapnik::freetype_engine::register_fonts("./fonts", true); }
|
||||
bool operator()() const
|
||||
{
|
||||
unsigned long count = 0;
|
||||
for (unsigned i = 0; i < iterations_; ++i)
|
||||
{
|
||||
mapnik::freetype_engine::register_fonts("./fonts", true);
|
||||
count++;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
BENCHMARK(test, "font registration")
|
|
@ -1,125 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include "../plugins/input/csv/csv_getline.hpp"
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
std::string line_data_;
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, line_data_("this is one line\nand this is a second line\nand a third line")
|
||||
{
|
||||
auto line_data = params.get<std::string>("line");
|
||||
if (line_data)
|
||||
{
|
||||
line_data_ = *line_data;
|
||||
}
|
||||
}
|
||||
|
||||
bool validate() const
|
||||
{
|
||||
std::string first = line_data_.substr(line_data_.find_first_not_of('\n'));
|
||||
char newline = '\n';
|
||||
std::string csv_line;
|
||||
std::stringstream s;
|
||||
s << line_data_;
|
||||
std::getline(s, csv_line, newline);
|
||||
if (csv_line != first)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::clog << "Error: the parsed line (" << csv_line << ") should be a subset of the original line ("
|
||||
<< line_data_ << ") (ensure you pass a line with a \\n)\n";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
char newline = '\n';
|
||||
std::string csv_line;
|
||||
std::stringstream s;
|
||||
s << line_data_;
|
||||
for (unsigned i = 0; i < iterations_; ++i)
|
||||
{
|
||||
std::getline(s, csv_line, newline);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class test2 : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
std::string line_data_;
|
||||
test2(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, line_data_("this is one line\nand this is a second line\nand a third line")
|
||||
{
|
||||
auto line_data = params.get<std::string>("line");
|
||||
if (line_data)
|
||||
{
|
||||
line_data_ = *line_data;
|
||||
}
|
||||
}
|
||||
|
||||
bool validate() const
|
||||
{
|
||||
std::string first = line_data_.substr(line_data_.find_first_not_of('\n'));
|
||||
char newline = '\n';
|
||||
char quote = '"';
|
||||
std::string csv_line;
|
||||
std::stringstream s;
|
||||
s << line_data_;
|
||||
csv_utils::getline_csv(s, csv_line, newline, quote);
|
||||
if (csv_line != first)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::clog << "Error: the parsed line (" << csv_line << ") should be a subset of the original line ("
|
||||
<< line_data_ << ") (ensure you pass a line with a \\n)\n";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
char newline = '\n';
|
||||
char quote = '"';
|
||||
std::string csv_line;
|
||||
std::stringstream s;
|
||||
s << line_data_;
|
||||
for (unsigned i = 0; i < iterations_; ++i)
|
||||
{
|
||||
csv_utils::getline_csv(s, csv_line, newline, quote);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::setup();
|
||||
int return_value = 0;
|
||||
try
|
||||
{
|
||||
mapnik::parameters params;
|
||||
benchmark::handle_args(argc, argv, params);
|
||||
{
|
||||
test test_runner(params);
|
||||
return_value = return_value | run(test_runner, "std::getline");
|
||||
}
|
||||
{
|
||||
test2 test_runner2(params);
|
||||
return_value = return_value | run(test_runner2, "csv_utils::getline_csv");
|
||||
}
|
||||
}
|
||||
catch (std::exception const& ex)
|
||||
{
|
||||
std::clog << ex.what() << "\n";
|
||||
return -1;
|
||||
}
|
||||
return return_value;
|
||||
}
|
|
@ -1,40 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/marker_cache.hpp>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
std::vector<std::string> images_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, images_{"./test/data/images/dummy.jpg",
|
||||
"./test/data/images/dummy.jpeg",
|
||||
"./test/data/images/dummy.png",
|
||||
"./test/data/images/dummy.tif",
|
||||
"./test/data/images/dummy.tiff",
|
||||
//"./test/data/images/landusepattern.jpeg", // will fail since it is a png
|
||||
//"./test/data/images/xcode-CgBI.png", // will fail since its an invalid png
|
||||
"./test/data/svg/octocat.svg",
|
||||
"./test/data/svg/place-of-worship-24.svg",
|
||||
"./test/data/svg/point_sm.svg",
|
||||
"./test/data/svg/point.svg",
|
||||
"./test/data/svg/airfield-12.svg"}
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
unsigned count = 0;
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
for (auto filename : images_)
|
||||
{
|
||||
auto marker = mapnik::marker_cache::instance().find(filename, true);
|
||||
}
|
||||
++count;
|
||||
}
|
||||
return (count == iterations_);
|
||||
}
|
||||
};
|
||||
|
||||
BENCHMARK(test, "marker cache")
|
|
@ -1,51 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/map.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include <mapnik/load_map.hpp>
|
||||
#include <mapnik/agg_renderer.hpp>
|
||||
#include <mapnik/datasource_cache.hpp>
|
||||
#include <mapnik/font_engine_freetype.hpp>
|
||||
#include <stdexcept>
|
||||
#include <mapnik/layer.hpp>
|
||||
#include <mapnik/memory_datasource.hpp>
|
||||
#include <mapnik/feature_type_style.hpp>
|
||||
|
||||
#include <memory>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
{}
|
||||
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
mapnik::Map m(256, 256, "epsg:3857");
|
||||
|
||||
mapnik::parameters params;
|
||||
params["type"] = "memory";
|
||||
auto ds = std::make_shared<mapnik::memory_datasource>(params);
|
||||
// add whitespace to trigger phony "reprojection"
|
||||
mapnik::layer lay("layer", m.srs() + " ");
|
||||
lay.set_datasource(ds);
|
||||
lay.add_style("style");
|
||||
m.add_layer(lay);
|
||||
// dummy style to ensure that layer is processed
|
||||
m.insert_style("style", mapnik::feature_type_style());
|
||||
// dummy bbox, but "valid" because minx and miny are less
|
||||
// with an invalid bbox then layer.visible() returns false
|
||||
// and the initial rendering setup is not run
|
||||
m.zoom_to_box(mapnik::box2d<double>(-1, -1, 0, 0));
|
||||
for (unsigned i = 0; i < iterations_; ++i)
|
||||
{
|
||||
mapnik::image_rgba8 im(256, 256);
|
||||
mapnik::agg_renderer<mapnik::image_rgba8> ren(m, im);
|
||||
ren.apply();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
BENCHMARK(test, "rendering with reprojection")
|
|
@ -1,81 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
// boost
|
||||
#include <boost/numeric/conversion/cast.hpp>
|
||||
|
||||
static double STEP_NUM = 0.0000000001;
|
||||
static std::uint8_t START_NUM = 2;
|
||||
|
||||
class test_static : public benchmark::test_case
|
||||
{
|
||||
double step_;
|
||||
std::uint8_t start_;
|
||||
|
||||
public:
|
||||
test_static(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, step_(STEP_NUM)
|
||||
, start_(START_NUM)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
double value_ = 0.0;
|
||||
std::uint8_t x;
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
double c = static_cast<double>(start_) * value_;
|
||||
if (c >= 256.0)
|
||||
c = 255.0;
|
||||
if (c < 0.0)
|
||||
c = 0.0;
|
||||
x = static_cast<std::uint8_t>(c);
|
||||
value_ += step_;
|
||||
}
|
||||
return static_cast<double>(x) < (static_cast<double>(start_) * value_);
|
||||
}
|
||||
};
|
||||
|
||||
using boost::numeric::negative_overflow;
|
||||
using boost::numeric::positive_overflow;
|
||||
|
||||
class test_numeric : public benchmark::test_case
|
||||
{
|
||||
double step_;
|
||||
std::uint8_t start_;
|
||||
|
||||
public:
|
||||
test_numeric(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, step_(STEP_NUM)
|
||||
, start_(START_NUM)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
double value_ = 0.0;
|
||||
std::uint8_t x;
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
try
|
||||
{
|
||||
x = boost::numeric_cast<std::uint8_t>(start_ * value_);
|
||||
}
|
||||
catch (negative_overflow&)
|
||||
{
|
||||
x = std::numeric_limits<std::uint8_t>::min();
|
||||
}
|
||||
catch (positive_overflow&)
|
||||
{
|
||||
x = std::numeric_limits<std::uint8_t>::max();
|
||||
}
|
||||
value_ += step_;
|
||||
}
|
||||
return static_cast<double>(x) < (static_cast<double>(start_) * value_);
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::setup();
|
||||
return benchmark::sequencer(argc, argv).run<test_static>("static_cast").run<test_numeric>("numeric_cast").done();
|
||||
}
|
|
@ -1,104 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/global.hpp>
|
||||
#include <mapnik/coord.hpp>
|
||||
#include <mapnik/vertex.hpp>
|
||||
#include <mapnik/offset_converter.hpp>
|
||||
|
||||
struct fake_path
|
||||
{
|
||||
using coord_type = std::tuple<double, double, unsigned>;
|
||||
using cont_type = std::vector<coord_type>;
|
||||
cont_type vertices_;
|
||||
cont_type::iterator itr_;
|
||||
|
||||
fake_path(std::initializer_list<double> l)
|
||||
: fake_path(l.begin(), l.size())
|
||||
{}
|
||||
|
||||
fake_path(std::vector<double> const& v)
|
||||
: fake_path(v.begin(), v.size())
|
||||
{}
|
||||
|
||||
template<typename Itr>
|
||||
fake_path(Itr itr, size_t sz)
|
||||
{
|
||||
size_t num_coords = sz >> 1;
|
||||
vertices_.reserve(num_coords);
|
||||
|
||||
for (size_t i = 0; i < num_coords; ++i)
|
||||
{
|
||||
double x = *itr++;
|
||||
double y = *itr++;
|
||||
unsigned cmd = (i == 0) ? mapnik::SEG_MOVETO : mapnik::SEG_LINETO;
|
||||
vertices_.push_back(std::make_tuple(x, y, cmd));
|
||||
if (i == num_coords - 1)
|
||||
cmd = mapnik::SEG_END;
|
||||
vertices_.push_back(std::make_tuple(x, y, cmd));
|
||||
}
|
||||
itr_ = vertices_.begin();
|
||||
}
|
||||
|
||||
unsigned vertex(double* x, double* y)
|
||||
{
|
||||
if (itr_ == vertices_.end())
|
||||
{
|
||||
return mapnik::SEG_END;
|
||||
}
|
||||
*x = std::get<0>(*itr_);
|
||||
*y = std::get<1>(*itr_);
|
||||
unsigned cmd = std::get<2>(*itr_);
|
||||
++itr_;
|
||||
return cmd;
|
||||
}
|
||||
|
||||
void rewind(unsigned) { itr_ = vertices_.begin(); }
|
||||
};
|
||||
|
||||
class test_offset : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
test_offset(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
std::vector<double> path;
|
||||
int mysize = 2500;
|
||||
int x1 = 0;
|
||||
path.reserve(mysize * 2);
|
||||
for (int i = 0; i < mysize; i++)
|
||||
{
|
||||
path.push_back(i);
|
||||
path.push_back(0);
|
||||
}
|
||||
fake_path fpath(path);
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
mapnik::offset_converter<fake_path> off_path(fpath);
|
||||
off_path.set_offset(10);
|
||||
unsigned cmd;
|
||||
double x, y;
|
||||
while ((cmd = off_path.vertex(&x, &y)) != mapnik::SEG_END)
|
||||
{
|
||||
x1++;
|
||||
}
|
||||
}
|
||||
return x1 > 0;
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::setup();
|
||||
mapnik::parameters params;
|
||||
benchmark::handle_args(argc, argv, params);
|
||||
int return_value = 0;
|
||||
{
|
||||
test_offset test_runner(params);
|
||||
return_value = run(test_runner, "offset_test");
|
||||
}
|
||||
return return_value;
|
||||
}
|
|
@ -1,26 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/image_util.hpp>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
mapnik::image_rgba8 im_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, im_(256, 256)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
bool operator()() const
|
||||
{
|
||||
std::string out;
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
out.clear();
|
||||
out = mapnik::save_to_string(im_, "png8:m=h:z=1");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
BENCHMARK(test, "encoding blank png")
|
|
@ -1,41 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include "compare_images.hpp"
|
||||
#include <memory>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
std::shared_ptr<mapnik::image_rgba8> im_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
{
|
||||
std::string filename("./benchmark/data/multicolor.png");
|
||||
std::unique_ptr<mapnik::image_reader> reader(mapnik::get_image_reader(filename, "png"));
|
||||
if (!reader.get())
|
||||
{
|
||||
throw mapnik::image_reader_exception("Failed to load: " + filename);
|
||||
}
|
||||
im_ = std::make_shared<mapnik::image_rgba8>(reader->width(), reader->height());
|
||||
reader->read(0, 0, *im_);
|
||||
}
|
||||
bool validate() const
|
||||
{
|
||||
std::string expected("./benchmark/data/multicolor-hextree-expected.png");
|
||||
std::string actual("./benchmark/data/multicolor-hextree-actual.png");
|
||||
mapnik::save_to_file(*im_, actual, "png8:m=h:z=1");
|
||||
return benchmark::compare_images(actual, expected);
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
std::string out;
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
out.clear();
|
||||
out = mapnik::save_to_string(*im_, "png8:m=h:z=1");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
BENCHMARK(test, "encoding multicolor png")
|
|
@ -1,550 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include "compare_images.hpp"
|
||||
#include <mapnik/vertex.hpp>
|
||||
#include <mapnik/transform_path_adapter.hpp>
|
||||
#include <mapnik/view_transform.hpp>
|
||||
#include <mapnik/wkt/wkt_factory.hpp>
|
||||
#include <mapnik/projection.hpp>
|
||||
#include <mapnik/proj_transform.hpp>
|
||||
#include <mapnik/util/fs.hpp>
|
||||
#include <mapnik/geometry.hpp>
|
||||
#include <mapnik/vertex_adapters.hpp>
|
||||
#include <mapnik/geometry.hpp>
|
||||
#include <mapnik/geometry/boost_adapters.hpp>
|
||||
#include <mapnik/geometry/envelope.hpp>
|
||||
#include <mapnik/geometry/correct.hpp>
|
||||
#include <mapnik/geometry/is_empty.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include <mapnik/color.hpp>
|
||||
// boost geometry
|
||||
#include <boost/geometry.hpp>
|
||||
// agg
|
||||
#include "agg_conv_clip_polygon.h"
|
||||
// clipper
|
||||
#include "agg_path_storage.h"
|
||||
// rendering
|
||||
#include "agg_basics.h"
|
||||
#include "agg_rendering_buffer.h"
|
||||
#include "agg_pixfmt_rgba.h"
|
||||
#include "agg_rasterizer_scanline_aa.h"
|
||||
#include "agg_scanline_u.h"
|
||||
#include "agg_renderer_scanline.h"
|
||||
|
||||
// stl
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
|
||||
void render(mapnik::geometry::multi_polygon<double> const& geom,
|
||||
mapnik::box2d<double> const& extent,
|
||||
std::string const& name)
|
||||
{
|
||||
using path_type =
|
||||
mapnik::transform_path_adapter<mapnik::view_transform, mapnik::geometry::polygon_vertex_adapter<double>>;
|
||||
using ren_base = agg::renderer_base<agg::pixfmt_rgba32_plain>;
|
||||
using renderer = agg::renderer_scanline_aa_solid<ren_base>;
|
||||
mapnik::image_rgba8 im(256, 256);
|
||||
mapnik::fill(im, mapnik::color("white"));
|
||||
mapnik::box2d<double> padded_extent(155, 134, 665, 466); // extent;
|
||||
padded_extent.pad(10);
|
||||
mapnik::view_transform tr(im.width(), im.height(), padded_extent, 0, 0);
|
||||
agg::rendering_buffer buf(im.bytes(), im.width(), im.height(), im.row_size());
|
||||
agg::pixfmt_rgba32_plain pixf(buf);
|
||||
ren_base renb(pixf);
|
||||
renderer ren(renb);
|
||||
mapnik::proj_transform prj_trans(mapnik::projection("epsg:4326"), mapnik::projection("epsg:4326"));
|
||||
ren.color(agg::rgba8(127, 127, 127, 255));
|
||||
agg::rasterizer_scanline_aa<> ras;
|
||||
for (auto const& poly : geom)
|
||||
{
|
||||
mapnik::geometry::polygon_vertex_adapter<double> va(poly);
|
||||
path_type path(tr, va, prj_trans);
|
||||
ras.add_path(path);
|
||||
}
|
||||
agg::scanline_u8 sl;
|
||||
agg::render_scanlines(ras, sl, ren);
|
||||
mapnik::save_to_file(im, name);
|
||||
}
|
||||
|
||||
class test1 : public benchmark::test_case
|
||||
{
|
||||
std::string wkt_in_;
|
||||
mapnik::box2d<double> extent_;
|
||||
std::string expected_;
|
||||
|
||||
public:
|
||||
using conv_clip = agg::conv_clip_polygon<mapnik::geometry::polygon_vertex_adapter<double>>;
|
||||
test1(mapnik::parameters const& params, std::string const& wkt_in, mapnik::box2d<double> const& extent)
|
||||
: test_case(params)
|
||||
, wkt_in_(wkt_in)
|
||||
, extent_(extent)
|
||||
, expected_("./benchmark/data/polygon_clipping_agg")
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
mapnik::geometry::geometry<double> geom;
|
||||
if (!mapnik::from_wkt(wkt_in_, geom))
|
||||
{
|
||||
throw std::runtime_error("Failed to parse WKT");
|
||||
}
|
||||
if (mapnik::geometry::is_empty(geom))
|
||||
{
|
||||
std::clog << "empty geom!\n";
|
||||
return false;
|
||||
}
|
||||
if (!geom.is<mapnik::geometry::polygon<double>>())
|
||||
{
|
||||
std::clog << "not a polygon!\n";
|
||||
return false;
|
||||
}
|
||||
mapnik::geometry::polygon<double> const& poly = mapnik::util::get<mapnik::geometry::polygon<double>>(geom);
|
||||
mapnik::geometry::polygon_vertex_adapter<double> va(poly);
|
||||
|
||||
conv_clip clipped(va);
|
||||
clipped.clip_box(extent_.minx(), extent_.miny(), extent_.maxx(), extent_.maxy());
|
||||
|
||||
clipped.rewind(0);
|
||||
mapnik::geometry::polygon<double> poly2;
|
||||
mapnik::geometry::linear_ring<double> ring;
|
||||
// exterior ring
|
||||
unsigned cmd;
|
||||
double x, y, x0, y0;
|
||||
while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END)
|
||||
{
|
||||
if (cmd == mapnik::SEG_MOVETO)
|
||||
{
|
||||
x0 = x;
|
||||
y0 = y;
|
||||
}
|
||||
|
||||
if (cmd == mapnik::SEG_CLOSE)
|
||||
{
|
||||
ring.emplace_back(x0, y0);
|
||||
break;
|
||||
}
|
||||
ring.emplace_back(x, y);
|
||||
}
|
||||
poly2.push_back(std::move(ring));
|
||||
// interior rings
|
||||
ring.clear();
|
||||
while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END)
|
||||
{
|
||||
if (cmd == mapnik::SEG_MOVETO)
|
||||
{
|
||||
x0 = x;
|
||||
y0 = y;
|
||||
}
|
||||
else if (cmd == mapnik::SEG_CLOSE)
|
||||
{
|
||||
ring.emplace_back(x0, y0);
|
||||
poly2.push_back(std::move(ring));
|
||||
ring.clear();
|
||||
continue;
|
||||
}
|
||||
ring.emplace_back(x, y);
|
||||
}
|
||||
|
||||
std::string expect = expected_ + ".png";
|
||||
std::string actual = expected_ + "_actual.png";
|
||||
mapnik::geometry::multi_polygon<double> mp;
|
||||
mp.emplace_back(poly2);
|
||||
auto env = mapnik::geometry::envelope(mp);
|
||||
if (!mapnik::util::exists(expect) || (std::getenv("UPDATE") != nullptr))
|
||||
{
|
||||
std::clog << "generating expected image: " << expect << "\n";
|
||||
render(mp, env, expect);
|
||||
}
|
||||
render(mp, env, actual);
|
||||
return benchmark::compare_images(actual, expect);
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
mapnik::geometry::geometry<double> geom;
|
||||
if (!mapnik::from_wkt(wkt_in_, geom))
|
||||
{
|
||||
throw std::runtime_error("Failed to parse WKT");
|
||||
}
|
||||
if (mapnik::geometry::is_empty(geom))
|
||||
{
|
||||
std::clog << "empty geom!\n";
|
||||
return false;
|
||||
}
|
||||
if (!geom.is<mapnik::geometry::polygon<double>>())
|
||||
{
|
||||
std::clog << "not a polygon!\n";
|
||||
return false;
|
||||
}
|
||||
bool valid = true;
|
||||
for (unsigned i = 0; i < iterations_; ++i)
|
||||
{
|
||||
unsigned count = 0;
|
||||
mapnik::geometry::polygon<double> const& poly = mapnik::util::get<mapnik::geometry::polygon<double>>(geom);
|
||||
mapnik::geometry::polygon_vertex_adapter<double> va(poly);
|
||||
conv_clip clipped(va);
|
||||
clipped.clip_box(extent_.minx(), extent_.miny(), extent_.maxx(), extent_.maxy());
|
||||
unsigned cmd;
|
||||
double x, y;
|
||||
// NOTE: this rewind is critical otherwise
|
||||
// agg_conv_adapter_vpgen will give garbage
|
||||
// values for the first vertex
|
||||
clipped.rewind(0);
|
||||
while ((cmd = clipped.vertex(&x, &y)) != mapnik::SEG_END)
|
||||
{
|
||||
count++;
|
||||
}
|
||||
unsigned expected_count = 30;
|
||||
if (count != expected_count)
|
||||
{
|
||||
std::clog << "test1: clipping failed: processed " << count << " verticies but expected "
|
||||
<< expected_count << "\n";
|
||||
valid = false;
|
||||
}
|
||||
}
|
||||
return valid;
|
||||
}
|
||||
};
|
||||
|
||||
class test3 : public benchmark::test_case
|
||||
{
|
||||
std::string wkt_in_;
|
||||
mapnik::box2d<double> extent_;
|
||||
std::string expected_;
|
||||
|
||||
public:
|
||||
test3(mapnik::parameters const& params, std::string const& wkt_in, mapnik::box2d<double> const& extent)
|
||||
: test_case(params)
|
||||
, wkt_in_(wkt_in)
|
||||
, extent_(extent)
|
||||
, expected_("./benchmark/data/polygon_clipping_boost")
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
mapnik::geometry::geometry<double> geom;
|
||||
if (!mapnik::from_wkt(wkt_in_, geom))
|
||||
{
|
||||
throw std::runtime_error("Failed to parse WKT");
|
||||
}
|
||||
if (mapnik::geometry::is_empty(geom))
|
||||
{
|
||||
std::clog << "empty geom!\n";
|
||||
return false;
|
||||
}
|
||||
if (!geom.is<mapnik::geometry::polygon<double>>())
|
||||
{
|
||||
std::clog << "not a polygon!\n";
|
||||
return false;
|
||||
}
|
||||
mapnik::geometry::polygon<double>& poly = mapnik::util::get<mapnik::geometry::polygon<double>>(geom);
|
||||
mapnik::geometry::correct(poly);
|
||||
|
||||
mapnik::geometry::linear_ring<double> bbox;
|
||||
bbox.emplace_back(extent_.minx(), extent_.miny());
|
||||
bbox.emplace_back(extent_.minx(), extent_.maxy());
|
||||
bbox.emplace_back(extent_.maxx(), extent_.maxy());
|
||||
bbox.emplace_back(extent_.maxx(), extent_.miny());
|
||||
bbox.emplace_back(extent_.minx(), extent_.miny());
|
||||
|
||||
std::deque<mapnik::geometry::polygon<double>> result;
|
||||
boost::geometry::intersection(bbox, poly, result);
|
||||
|
||||
std::string expect = expected_ + ".png";
|
||||
std::string actual = expected_ + "_actual.png";
|
||||
mapnik::geometry::multi_polygon<double> mp;
|
||||
for (auto const& _geom : result)
|
||||
{
|
||||
// std::clog << boost::geometry::dsv(geom) << "\n";
|
||||
mp.emplace_back(_geom);
|
||||
}
|
||||
mapnik::geometry::geometry<double> geom2(mp);
|
||||
auto env = mapnik::geometry::envelope(geom2);
|
||||
if (!mapnik::util::exists(expect) || (std::getenv("UPDATE") != nullptr))
|
||||
{
|
||||
std::clog << "generating expected image: " << expect << "\n";
|
||||
render(mp, env, expect);
|
||||
}
|
||||
render(mp, env, actual);
|
||||
return benchmark::compare_images(actual, expect);
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
mapnik::geometry::geometry<double> geom;
|
||||
if (!mapnik::from_wkt(wkt_in_, geom))
|
||||
{
|
||||
throw std::runtime_error("Failed to parse WKT");
|
||||
}
|
||||
if (mapnik::geometry::is_empty(geom))
|
||||
{
|
||||
std::clog << "empty geom!\n";
|
||||
return false;
|
||||
}
|
||||
if (!geom.is<mapnik::geometry::polygon<double>>())
|
||||
{
|
||||
std::clog << "not a polygon!\n";
|
||||
return false;
|
||||
}
|
||||
mapnik::geometry::polygon<double>& poly = mapnik::util::get<mapnik::geometry::polygon<double>>(geom);
|
||||
mapnik::geometry::correct(poly);
|
||||
|
||||
mapnik::geometry::linear_ring<double> bbox;
|
||||
bbox.emplace_back(extent_.minx(), extent_.miny());
|
||||
bbox.emplace_back(extent_.minx(), extent_.maxy());
|
||||
bbox.emplace_back(extent_.maxx(), extent_.maxy());
|
||||
bbox.emplace_back(extent_.maxx(), extent_.miny());
|
||||
bbox.emplace_back(extent_.minx(), extent_.miny());
|
||||
|
||||
bool valid = true;
|
||||
for (unsigned i = 0; i < iterations_; ++i)
|
||||
{
|
||||
std::deque<mapnik::geometry::polygon<double>> result;
|
||||
boost::geometry::intersection(bbox, poly, result);
|
||||
unsigned count = 0;
|
||||
for (auto const& _geom : result)
|
||||
{
|
||||
mapnik::geometry::polygon_vertex_adapter<double> va(_geom);
|
||||
unsigned cmd;
|
||||
double x, y;
|
||||
while ((cmd = va.vertex(&x, &y)) != mapnik::SEG_END)
|
||||
{
|
||||
++count;
|
||||
}
|
||||
unsigned expected_count = 29;
|
||||
if (count != expected_count)
|
||||
{
|
||||
std::clog << "test3: clipping failed: processed " << count << " verticies but expected "
|
||||
<< expected_count << "\n";
|
||||
valid = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return valid;
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
Commented out section because clipper moved out of mapnik core.
|
||||
inline void process_polynode_branch(ClipperLib::PolyNode* polynode,
|
||||
mapnik::geometry::multi_polygon<double> & mp)
|
||||
{
|
||||
mapnik::geometry::polygon<double> polygon;
|
||||
mapnik::geometry::linear_ring<double> outer;
|
||||
for (auto const& pt : polynode->Contour)
|
||||
{
|
||||
outer.emplace_back(static_cast<double>(pt.x),static_cast<double>(pt.y));
|
||||
}
|
||||
if (outer.front() != outer.back())
|
||||
{
|
||||
outer.emplace_back(outer.front().x, outer.front().y);
|
||||
}
|
||||
polygon.set_exterior_ring(std::move(outer));
|
||||
for (auto * ring : polynode->Childs)
|
||||
{
|
||||
mapnik::geometry::linear_ring<double> inner;
|
||||
for (auto const& pt : ring->Contour)
|
||||
{
|
||||
inner.emplace_back(static_cast<double>(pt.x),static_cast<double>(pt.y));
|
||||
}
|
||||
if (inner.front() != inner.back())
|
||||
{
|
||||
inner.emplace_back(inner.front().x, inner.front().y);
|
||||
}
|
||||
polygon.add_hole(std::move(inner));
|
||||
}
|
||||
mp.emplace_back(std::move(polygon));
|
||||
for (auto * ring : polynode->Childs)
|
||||
{
|
||||
for (auto * sub_ring : ring->Childs)
|
||||
{
|
||||
process_polynode_branch(sub_ring, mp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class test4 : public benchmark::test_case
|
||||
{
|
||||
std::string wkt_in_;
|
||||
mapnik::box2d<double> extent_;
|
||||
std::string expected_;
|
||||
public:
|
||||
test4(mapnik::parameters const& params,
|
||||
std::string const& wkt_in,
|
||||
mapnik::box2d<double> const& extent)
|
||||
: test_case(params),
|
||||
wkt_in_(wkt_in),
|
||||
extent_(extent),
|
||||
expected_("./benchmark/data/polygon_clipping_clipper") {}
|
||||
bool validate() const
|
||||
{
|
||||
mapnik::geometry::geometry<double> geom;
|
||||
if (!mapnik::from_wkt(wkt_in_, geom))
|
||||
{
|
||||
throw std::runtime_error("Failed to parse WKT");
|
||||
}
|
||||
if (mapnik::geometry::is_empty(geom))
|
||||
{
|
||||
std::clog << "empty geom!\n";
|
||||
return false;
|
||||
}
|
||||
if (!geom.is<mapnik::geometry::polygon<double> >())
|
||||
{
|
||||
std::clog << "not a polygon!\n";
|
||||
return false;
|
||||
}
|
||||
mapnik::geometry::polygon<double> & poly = mapnik::util::get<mapnik::geometry::polygon<double> >(geom);
|
||||
mapnik::geometry::correct(poly);
|
||||
ClipperLib::Clipper clipper;
|
||||
|
||||
mapnik::geometry::line_string<std::int64_t> path;
|
||||
for (auto const& pt : poly.exterior_ring)
|
||||
{
|
||||
double x = pt.x;
|
||||
double y = pt.y;
|
||||
path.emplace_back(static_cast<ClipperLib::cInt>(x),static_cast<ClipperLib::cInt>(y));
|
||||
}
|
||||
double area = ClipperLib::Area(path);
|
||||
if (area > 0)
|
||||
{
|
||||
std::reverse(path.begin(), path.end());
|
||||
}
|
||||
if (!clipper.AddPath(path, ClipperLib::ptSubject, true))
|
||||
{
|
||||
std::clog << "ptSubject ext failed!\n";
|
||||
}
|
||||
for (auto const& ring : poly.interior_rings)
|
||||
{
|
||||
path.clear();
|
||||
for (auto const& pt : ring)
|
||||
{
|
||||
double x = pt.x;
|
||||
double y = pt.y;
|
||||
path.emplace_back(static_cast<ClipperLib::cInt>(x),static_cast<ClipperLib::cInt>(y));
|
||||
}
|
||||
area = ClipperLib::Area(path);
|
||||
if (area < 0)
|
||||
{
|
||||
std::reverse(path.begin(), path.end());
|
||||
}
|
||||
if (!clipper.AddPath(path, ClipperLib::ptSubject, true))
|
||||
{
|
||||
std::clog << "ptSubject ext failed!\n";
|
||||
}
|
||||
}
|
||||
std::cerr << "path size=" << path.size() << std::endl;
|
||||
mapnik::geometry::line_string<std::int64_t> clip_box;
|
||||
clip_box.emplace_back(static_cast<ClipperLib::cInt>(extent_.minx()),static_cast<ClipperLib::cInt>(extent_.miny()));
|
||||
clip_box.emplace_back(static_cast<ClipperLib::cInt>(extent_.maxx()),static_cast<ClipperLib::cInt>(extent_.miny()));
|
||||
clip_box.emplace_back(static_cast<ClipperLib::cInt>(extent_.maxx()),static_cast<ClipperLib::cInt>(extent_.maxy()));
|
||||
clip_box.emplace_back(static_cast<ClipperLib::cInt>(extent_.minx()),static_cast<ClipperLib::cInt>(extent_.maxy()));
|
||||
clip_box.emplace_back(static_cast<ClipperLib::cInt>(extent_.minx()),static_cast<ClipperLib::cInt>(extent_.miny()));
|
||||
|
||||
if (!clipper.AddPath( clip_box, ClipperLib::ptClip, true ))
|
||||
{
|
||||
std::clog << "ptClip failed!\n";
|
||||
}
|
||||
|
||||
ClipperLib::PolyTree polygons;
|
||||
clipper.Execute(ClipperLib::ctIntersection, polygons);// ClipperLib::pftNonZero);
|
||||
clipper.Clear();
|
||||
mapnik::geometry::multi_polygon<double> mp;
|
||||
for (auto * polynode : polygons.Childs)
|
||||
{
|
||||
process_polynode_branch(polynode, mp);
|
||||
}
|
||||
std::string expect = expected_+".png";
|
||||
std::string actual = expected_+"_actual.png";
|
||||
//mapnik::geometry::geometry<double> geom2(mp);
|
||||
auto env = mapnik::geometry::envelope(mp);
|
||||
if (!mapnik::util::exists(expect) || (std::getenv("UPDATE") != nullptr))
|
||||
{
|
||||
std::clog << "generating expected image: " << expect << "\n";
|
||||
render(mp,env,expect);
|
||||
}
|
||||
render(mp,env,actual);
|
||||
return benchmark::compare_images(actual,expect);
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
mapnik::geometry::geometry<double> geom;
|
||||
if (!mapnik::from_wkt(wkt_in_, geom))
|
||||
{
|
||||
throw std::runtime_error("Failed to parse WKT");
|
||||
}
|
||||
if (mapnik::geometry::is_empty(geom))
|
||||
{
|
||||
std::clog << "empty geom!\n";
|
||||
return false;
|
||||
}
|
||||
if (!geom.is<mapnik::geometry::polygon<double> >())
|
||||
{
|
||||
std::clog << "not a polygon!\n";
|
||||
return false;
|
||||
}
|
||||
mapnik::geometry::polygon<double> & poly = mapnik::util::get<mapnik::geometry::polygon<double> >(geom);
|
||||
mapnik::geometry::correct(poly);
|
||||
|
||||
bool valid = true;
|
||||
for (unsigned i=0;i<iterations_;++i)
|
||||
{
|
||||
std::deque<mapnik::geometry::polygon<double> > result;
|
||||
boost::geometry::intersection(extent_,poly,result);
|
||||
|
||||
unsigned count = 0;
|
||||
for (auto const& geom : result)
|
||||
{
|
||||
mapnik::geometry::polygon_vertex_adapter<double> va(geom);
|
||||
unsigned cmd;
|
||||
double x,y;
|
||||
while ((cmd = va.vertex(&x, &y)) != mapnik::SEG_END) {
|
||||
++count;
|
||||
}
|
||||
unsigned expected_count = 29;
|
||||
if (count != expected_count) {
|
||||
std::clog << "test3: clipping failed: processed " << count << " verticies but expected " <<
|
||||
expected_count << "\n"; valid = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return valid;
|
||||
}
|
||||
};
|
||||
*/
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::setup();
|
||||
mapnik::parameters params;
|
||||
benchmark::handle_args(argc, argv, params);
|
||||
|
||||
// polygon/rect clipping
|
||||
// IN : POLYGON ((155 203, 233 454, 315 340, 421 446, 463 324, 559 466, 665 253, 528 178, 394 229, 329 138, 212 134,
|
||||
// 183 228, 200 264, 155 203),(313 190, 440 256, 470 248, 510 305, 533 237, 613 263, 553 397, 455 262, 405 378, 343
|
||||
// 287, 249 334, 229 191, 313 190)) RECT : POLYGON ((181 106, 181 470, 631 470, 631 106, 181 106)) OUT (expected)
|
||||
// POLYGON ((181 286.6666666666667, 233 454, 315 340, 421 446, 463 324, 559 466, 631 321.3207547169811, 631
|
||||
// 234.38686131386862, 528 178, 394 229, 329 138, 212 134, 183 228, 200 264, 181 238.24444444444444, 181
|
||||
// 286.6666666666667),(313 190, 440 256, 470 248, 510 305, 533 237, 613 263, 553 397, 455 262, 405 378, 343 287, 249
|
||||
// 334, 229 191, 313 190))
|
||||
#if 0
|
||||
mapnik::box2d<double> clipping_box(181,106,631,470);
|
||||
std::string filename_("./benchmark/data/polygon.wkt");
|
||||
std::ifstream in(filename_.c_str(),std::ios_base::in | std::ios_base::binary);
|
||||
if (!in.is_open())
|
||||
throw std::runtime_error("could not open: '" + filename_ + "'");
|
||||
std::string wkt_in( (std::istreambuf_iterator<char>(in) ),
|
||||
(std::istreambuf_iterator<char>()) );
|
||||
int return_value = 0;
|
||||
{
|
||||
test1 test_runner(params,wkt_in,clipping_box);
|
||||
return_value = return_value | run(test_runner,"clipping polygon with agg");
|
||||
}
|
||||
{
|
||||
test3 test_runner(params,wkt_in,clipping_box);
|
||||
return_value = return_value | run(test_runner,"clipping polygon with boost");
|
||||
}
|
||||
/*
|
||||
{
|
||||
test4 test_runner(params,wkt_in,clipping_box);
|
||||
return_value = return_value | run(test_runner,"clipping polygon with clipper_tree");
|
||||
}
|
||||
*/
|
||||
#endif
|
||||
return 0; // return_value;
|
||||
}
|
|
@ -1,59 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/map.hpp>
|
||||
#include <mapnik/load_map.hpp>
|
||||
#include <mapnik/agg_renderer.hpp>
|
||||
#include <mapnik/datasource_cache.hpp>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
std::string xml_;
|
||||
mapnik::box2d<double> extent_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params, std::string const& xml, mapnik::box2d<double> const& extent)
|
||||
: test_case(params)
|
||||
, xml_(xml)
|
||||
, extent_(extent)
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
mapnik::Map m(256, 256);
|
||||
mapnik::load_map(m, xml_);
|
||||
m.zoom_to_box(extent_);
|
||||
mapnik::image_rgba8 im(m.width(), m.height());
|
||||
mapnik::agg_renderer<mapnik::image_rgba8> ren(m, im);
|
||||
ren.apply();
|
||||
// mapnik::save_to_file(im.data(),"test.png");
|
||||
return true;
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
mapnik::Map m(256, 256);
|
||||
mapnik::load_map(m, xml_);
|
||||
m.zoom_to_box(extent_);
|
||||
for (unsigned i = 0; i < iterations_; ++i)
|
||||
{
|
||||
mapnik::image_rgba8 im(m.width(), m.height());
|
||||
mapnik::agg_renderer<mapnik::image_rgba8> ren(m, im);
|
||||
ren.apply();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::setup();
|
||||
mapnik::parameters params;
|
||||
benchmark::handle_args(argc, argv, params);
|
||||
mapnik::datasource_cache::instance().register_datasources("./plugins/input/");
|
||||
mapnik::box2d<double> z1(-20037508.3428, -8317435.0606, 20037508.3428, 18399242.7298);
|
||||
// bbox for 16/10491/22911.png
|
||||
mapnik::box2d<double> z16(-13622912.929097254, 6026906.8062295765, -13621689.93664469, 6028129.79868214);
|
||||
return benchmark::sequencer(argc, argv)
|
||||
.run<test>("polygon clip render z1", "benchmark/data/polygon_rendering_clip.xml", z1)
|
||||
.run<test>("polygon noclip render z1", "benchmark/data/polygon_rendering_no_clip.xml", z1)
|
||||
.run<test>("polygon clip render z16", "benchmark/data/polygon_rendering_clip.xml", z16)
|
||||
.run<test>("polygon noclip render z16", "benchmark/data/polygon_rendering_no_clip.xml", z16)
|
||||
.done();
|
||||
}
|
|
@ -1,77 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/geometry/box2d.hpp>
|
||||
#include <mapnik/projection.hpp>
|
||||
#include <mapnik/proj_transform.hpp>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
std::string src_;
|
||||
std::string dest_;
|
||||
mapnik::box2d<double> from_;
|
||||
mapnik::box2d<double> to_;
|
||||
bool defer_proj_init_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params,
|
||||
std::string const& src,
|
||||
std::string const& dest,
|
||||
mapnik::box2d<double> const& from,
|
||||
mapnik::box2d<double> const& to,
|
||||
bool defer_proj)
|
||||
: test_case(params)
|
||||
, src_(src)
|
||||
, dest_(dest)
|
||||
, from_(from)
|
||||
, to_(to)
|
||||
, defer_proj_init_(defer_proj)
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
mapnik::projection src(src_, defer_proj_init_);
|
||||
mapnik::projection dest(dest_, defer_proj_init_);
|
||||
mapnik::proj_transform tr(src, dest);
|
||||
mapnik::box2d<double> bbox = from_;
|
||||
if (!tr.forward(bbox))
|
||||
return false;
|
||||
return ((std::fabs(bbox.minx() - to_.minx()) < .5) && (std::fabs(bbox.maxx() - to_.maxx()) < .5) &&
|
||||
(std::fabs(bbox.miny() - to_.miny()) < .5) && (std::fabs(bbox.maxy() - to_.maxy()) < .5));
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
mapnik::projection src(src_, defer_proj_init_);
|
||||
mapnik::projection dest(dest_, defer_proj_init_);
|
||||
mapnik::proj_transform tr(src, dest);
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
for (int j = -180; j < 180; j = j + 5)
|
||||
{
|
||||
for (int k = -85; k < 85; k = k + 5)
|
||||
{
|
||||
mapnik::box2d<double> box(j, k, j, k);
|
||||
if (!tr.forward(box))
|
||||
throw std::runtime_error("could not transform coords");
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
// echo -180 -60 | cs2cs -f "%.10f" epsg:4326 +to epsg:3857
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::setup();
|
||||
mapnik::box2d<double> from(-180, -80, 180, 80);
|
||||
mapnik::box2d<double> to(-20037508.3427892476, -15538711.0963092316, 20037508.3427892476, 15538711.0963092316);
|
||||
std::string from_str("epsg:4326");
|
||||
std::string to_str("epsg:3857");
|
||||
std::string from_str2("+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs");
|
||||
std::string to_str2("+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m "
|
||||
"+nadgrids=@null +wktext +no_defs +over");
|
||||
return benchmark::sequencer(argc, argv)
|
||||
.run<test>("lonlat->merc epsg (internal)", from_str, to_str, from, to, true)
|
||||
.run<test>("lonlat->merc literal (libproj)", from_str2, to_str2, from, to, true)
|
||||
.run<test>("merc->lonlat epsg (internal)", to_str, from_str, to, from, true)
|
||||
.run<test>("merc->lonlat literal (libproj)", to_str2, from_str2, to, from, true)
|
||||
.done();
|
||||
}
|
|
@ -1,52 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/quad_tree.hpp>
|
||||
#include <random>
|
||||
|
||||
using quad_tree_type = mapnik::quad_tree<std::size_t>;
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
{}
|
||||
|
||||
bool validate() const { return true; }
|
||||
|
||||
bool operator()() const
|
||||
{
|
||||
std::random_device rd;
|
||||
std::default_random_engine engine(rd());
|
||||
std::uniform_int_distribution<int> uniform_dist(0, 2048);
|
||||
quad_tree_type tree(mapnik::box2d<double>(0, 0, 2048, 2048));
|
||||
// populate
|
||||
for (size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
int cx = uniform_dist(engine);
|
||||
int cy = uniform_dist(engine);
|
||||
int sx = 0.2 * uniform_dist(engine);
|
||||
int sy = 0.2 * uniform_dist(engine);
|
||||
mapnik::box2d<double> box(cx - sx, cy - sy, cx + sx, cy + sy);
|
||||
tree.insert(i, box);
|
||||
}
|
||||
// bounding box query
|
||||
std::size_t count = 0;
|
||||
for (size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
int cx = uniform_dist(engine);
|
||||
int cy = uniform_dist(engine);
|
||||
int sx = 0.4 * uniform_dist(engine);
|
||||
int sy = 0.4 * uniform_dist(engine);
|
||||
mapnik::box2d<double> box(cx - sx, cy - sy, cx + sx, cy + sy);
|
||||
auto itr = tree.query_in_box(box);
|
||||
auto end = tree.query_end();
|
||||
for (; itr != end; ++itr)
|
||||
{
|
||||
++count;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
BENCHMARK(test, "quad_tree creation")
|
|
@ -1,123 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/map.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include <mapnik/load_map.hpp>
|
||||
#include <mapnik/agg_renderer.hpp>
|
||||
#include <mapnik/datasource_cache.hpp>
|
||||
#include <mapnik/font_engine_freetype.hpp>
|
||||
#include <stdexcept>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
std::string xml_;
|
||||
mapnik::box2d<double> extent_;
|
||||
mapnik::value_integer width_;
|
||||
mapnik::value_integer height_;
|
||||
double scale_factor_;
|
||||
std::string preview_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, xml_()
|
||||
, extent_()
|
||||
, width_(*params.get<mapnik::value_integer>("width", 256))
|
||||
, height_(*params.get<mapnik::value_integer>("height", 256))
|
||||
, scale_factor_(*params.get<mapnik::value_double>("scale_factor", 1.0))
|
||||
, preview_(*params.get<std::string>("preview", ""))
|
||||
{
|
||||
const auto map = params.get<std::string>("map");
|
||||
if (!map)
|
||||
{
|
||||
throw std::runtime_error("please provide a --map <path to xml> arg");
|
||||
}
|
||||
xml_ = *map;
|
||||
|
||||
const auto ext = params.get<std::string>("extent");
|
||||
if (ext && !ext->empty())
|
||||
{
|
||||
if (!extent_.from_string(*ext))
|
||||
throw std::runtime_error("could not parse `extent` string" + *ext);
|
||||
}
|
||||
/*
|
||||
else
|
||||
{
|
||||
throw std::runtime_error("please provide a --extent=<minx,miny,maxx,maxy> arg");
|
||||
}*/
|
||||
}
|
||||
bool validate() const
|
||||
{
|
||||
mapnik::Map m(width_, height_);
|
||||
mapnik::load_map(m, xml_, true);
|
||||
if (extent_.valid())
|
||||
{
|
||||
m.zoom_to_box(extent_);
|
||||
}
|
||||
else
|
||||
{
|
||||
m.zoom_all();
|
||||
}
|
||||
mapnik::image_rgba8 im(m.width(), m.height());
|
||||
mapnik::agg_renderer<mapnik::image_rgba8> ren(m, im, scale_factor_);
|
||||
ren.apply();
|
||||
if (!preview_.empty())
|
||||
{
|
||||
std::clog << "preview available at " << preview_ << "\n";
|
||||
mapnik::save_to_file(im, preview_);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
if (!preview_.empty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
mapnik::Map m(width_, height_);
|
||||
mapnik::load_map(m, xml_);
|
||||
if (extent_.valid())
|
||||
{
|
||||
m.zoom_to_box(extent_);
|
||||
}
|
||||
else
|
||||
{
|
||||
m.zoom_all();
|
||||
}
|
||||
for (unsigned i = 0; i < iterations_; ++i)
|
||||
{
|
||||
mapnik::image_rgba8 im(m.width(), m.height());
|
||||
mapnik::agg_renderer<mapnik::image_rgba8> ren(m, im, scale_factor_);
|
||||
ren.apply();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::setup();
|
||||
int return_value = 0;
|
||||
try
|
||||
{
|
||||
mapnik::parameters params;
|
||||
benchmark::handle_args(argc, argv, params);
|
||||
const auto name = params.get<std::string>("name");
|
||||
if (!name)
|
||||
{
|
||||
std::clog << "please provide a name for this test\n";
|
||||
return -1;
|
||||
}
|
||||
mapnik::freetype_engine::register_fonts("./fonts/", true);
|
||||
mapnik::datasource_cache::instance().register_datasources("./plugins/input/");
|
||||
{
|
||||
test test_runner(params);
|
||||
return_value = run(test_runner, *name);
|
||||
}
|
||||
}
|
||||
catch (std::exception const& ex)
|
||||
{
|
||||
std::clog << ex.what() << "\n";
|
||||
return -1;
|
||||
}
|
||||
return return_value;
|
||||
}
|
|
@ -1,178 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/map.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include <mapnik/load_map.hpp>
|
||||
#include <mapnik/agg_renderer.hpp>
|
||||
#include <mapnik/datasource_cache.hpp>
|
||||
#include <mapnik/font_engine_freetype.hpp>
|
||||
#include <mapnik/scale_denominator.hpp>
|
||||
#include <mapnik/projection.hpp>
|
||||
#include <mapnik/layer.hpp>
|
||||
#include <mapnik/proj_transform.hpp>
|
||||
#include <mapnik/datasource_cache.hpp>
|
||||
#include <stdexcept>
|
||||
|
||||
template<typename Renderer>
|
||||
void process_layers(Renderer& ren,
|
||||
mapnik::request const& m_req,
|
||||
mapnik::projection const& map_proj,
|
||||
std::vector<mapnik::layer> const& layers,
|
||||
double scale_denom)
|
||||
{
|
||||
unsigned layers_size = layers.size();
|
||||
for (unsigned i = 0; i < layers_size; ++i)
|
||||
{
|
||||
mapnik::layer const& lyr = layers[i];
|
||||
if (lyr.visible(scale_denom))
|
||||
{
|
||||
std::set<std::string> names;
|
||||
mapnik::layer l(lyr);
|
||||
ren.apply_to_layer(l,
|
||||
ren,
|
||||
map_proj,
|
||||
m_req.scale(),
|
||||
scale_denom,
|
||||
m_req.width(),
|
||||
m_req.height(),
|
||||
m_req.extent(),
|
||||
m_req.buffer_size(),
|
||||
names);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
std::string xml_;
|
||||
mapnik::box2d<double> extent_;
|
||||
mapnik::value_integer width_;
|
||||
mapnik::value_integer height_;
|
||||
std::shared_ptr<mapnik::Map> m_;
|
||||
double scale_factor_;
|
||||
std::string preview_;
|
||||
mutable mapnik::image_rgba8 im_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, xml_()
|
||||
, extent_()
|
||||
, width_(*params.get<mapnik::value_integer>("width", 256))
|
||||
, height_(*params.get<mapnik::value_integer>("height", 256))
|
||||
, m_(new mapnik::Map(width_, height_))
|
||||
, scale_factor_(*params.get<mapnik::value_double>("scale_factor", 2.0))
|
||||
, preview_(*params.get<std::string>("preview", ""))
|
||||
, im_(m_->width(), m_->height())
|
||||
{
|
||||
const auto map = params.get<std::string>("map");
|
||||
if (!map)
|
||||
{
|
||||
throw std::runtime_error("please provide a --map=<path to xml> arg");
|
||||
}
|
||||
xml_ = *map;
|
||||
|
||||
auto ext = params.get<std::string>("extent");
|
||||
mapnik::load_map(*m_, xml_, true);
|
||||
if (ext && !ext->empty())
|
||||
{
|
||||
if (!extent_.from_string(*ext))
|
||||
throw std::runtime_error("could not parse `extent` string" + *ext);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_->zoom_all();
|
||||
extent_ = m_->get_current_extent();
|
||||
std::clog << "Defaulting to max extent " << extent_ << "\n";
|
||||
std::clog << " (pass --extent=<minx,miny,maxx,maxy> to restrict bounds)\n";
|
||||
}
|
||||
}
|
||||
|
||||
bool validate() const
|
||||
{
|
||||
mapnik::request m_req(width_, height_, extent_);
|
||||
mapnik::attributes variables;
|
||||
m_req.set_buffer_size(m_->buffer_size());
|
||||
mapnik::projection map_proj(m_->srs(), true);
|
||||
double scale_denom = mapnik::scale_denominator(m_req.scale(), map_proj.is_geographic());
|
||||
scale_denom *= scale_factor_;
|
||||
mapnik::agg_renderer<mapnik::image_rgba8> ren(*m_, m_req, variables, im_, scale_factor_);
|
||||
ren.start_map_processing(*m_);
|
||||
std::vector<mapnik::layer> const& layers = m_->layers();
|
||||
process_layers(ren, m_req, map_proj, layers, scale_denom);
|
||||
ren.end_map_processing(*m_);
|
||||
if (!preview_.empty())
|
||||
{
|
||||
std::clog << "preview available at " << preview_ << "\n";
|
||||
mapnik::save_to_file(im_, preview_);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool operator()() const
|
||||
{
|
||||
if (!preview_.empty())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
for (unsigned i = 0; i < iterations_; ++i)
|
||||
{
|
||||
mapnik::request m_req(width_, height_, extent_);
|
||||
mapnik::image_rgba8 im(m_->width(), m_->height());
|
||||
mapnik::attributes variables;
|
||||
m_req.set_buffer_size(m_->buffer_size());
|
||||
mapnik::projection map_proj(m_->srs(), true);
|
||||
double scale_denom = mapnik::scale_denominator(m_req.scale(), map_proj.is_geographic());
|
||||
scale_denom *= scale_factor_;
|
||||
mapnik::agg_renderer<mapnik::image_rgba8> ren(*m_, m_req, variables, im, scale_factor_);
|
||||
ren.start_map_processing(*m_);
|
||||
std::vector<mapnik::layer> const& layers = m_->layers();
|
||||
process_layers(ren, m_req, map_proj, layers, scale_denom);
|
||||
ren.end_map_processing(*m_);
|
||||
bool diff = false;
|
||||
mapnik::image_rgba8 const& dest = im;
|
||||
mapnik::image_rgba8 const& src = im_;
|
||||
for (unsigned int y = 0; y < height_; ++y)
|
||||
{
|
||||
const unsigned int* row_from = src.get_row(y);
|
||||
const unsigned int* row_to = dest.get_row(y);
|
||||
for (unsigned int x = 0; x < width_; ++x)
|
||||
{
|
||||
if (row_from[x] != row_to[x])
|
||||
diff = true;
|
||||
}
|
||||
}
|
||||
if (diff)
|
||||
throw std::runtime_error("images differ");
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::setup();
|
||||
int return_value = 0;
|
||||
try
|
||||
{
|
||||
mapnik::parameters params;
|
||||
benchmark::handle_args(argc, argv, params);
|
||||
const auto name = params.get<std::string>("name");
|
||||
if (!name)
|
||||
{
|
||||
std::clog << "please provide a name for this test\n";
|
||||
return -1;
|
||||
}
|
||||
mapnik::freetype_engine::register_fonts("./fonts/", true);
|
||||
mapnik::datasource_cache::instance().register_datasources("./plugins/input/");
|
||||
{
|
||||
test test_runner(params);
|
||||
return_value = run(test_runner, *name);
|
||||
}
|
||||
}
|
||||
catch (std::exception const& ex)
|
||||
{
|
||||
std::clog << ex.what() << "\n";
|
||||
return -1;
|
||||
}
|
||||
return return_value;
|
||||
}
|
|
@ -1,34 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/util/conversions.hpp>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
std::string value_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, value_("true")
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
bool result = false;
|
||||
mapnik::util::string2bool(value_.data(), value_.data() + value_.size(), result);
|
||||
if (!result)
|
||||
return result;
|
||||
mapnik::util::string2bool(value_, result);
|
||||
return (result == true);
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
bool result = false;
|
||||
mapnik::util::string2bool(value_, result);
|
||||
mapnik::util::string2bool(value_.data(), value_.data() + value_.size(), result);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
BENCHMARK(test, "string->bool")
|
|
@ -1,39 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/util/conversions.hpp>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
std::string value_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, value_("1.23456789")
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
double result = 0;
|
||||
if (!mapnik::util::string2double(value_.data(), value_.data() + value_.size(), result))
|
||||
return false;
|
||||
if (result != 1.23456789)
|
||||
return false;
|
||||
result = 0;
|
||||
if (!mapnik::util::string2double(value_, result))
|
||||
return false;
|
||||
if (result != 1.23456789)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
double result = 0;
|
||||
mapnik::util::string2double(value_, result);
|
||||
mapnik::util::string2double(value_.data(), value_.data() + value_.size(), result);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
BENCHMARK(test, "string->double")
|
|
@ -1,39 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/util/conversions.hpp>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
std::string value_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, value_("123456789")
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
mapnik::value_integer result = 0;
|
||||
if (!mapnik::util::string2int(value_.data(), value_.data() + value_.size(), result))
|
||||
return false;
|
||||
if (result != 123456789)
|
||||
return false;
|
||||
result = 0;
|
||||
if (!mapnik::util::string2int(value_, result))
|
||||
return false;
|
||||
if (result != 123456789)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
mapnik::value_integer result = 0;
|
||||
mapnik::util::string2int(value_, result);
|
||||
mapnik::util::string2int(value_.data(), value_.data() + value_.size(), result);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
BENCHMARK(test, "string->int")
|
|
@ -1,31 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/util/conversions.hpp>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
double value_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, value_(-0.1234)
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
std::string s;
|
||||
mapnik::util::to_string(s, value_);
|
||||
return (s == "-0.1234");
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
std::string out;
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
out.clear();
|
||||
mapnik::util::to_string(out, value_);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
BENCHMARK(test, "to_string double->string")
|
|
@ -1,32 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <sstream>
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
double value_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, value_(-0.1234)
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
std::ostringstream s;
|
||||
s << value_;
|
||||
return (s.str() == "-0.1234");
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
std::string out;
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
std::ostringstream s;
|
||||
s << value_;
|
||||
out = s.str();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
BENCHMARK(test, "ostringstream double->string")
|
|
@ -1,124 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
#include <mapnik/unicode.hpp>
|
||||
#include <mapnik/util/from_u8string.hpp>
|
||||
#include <mapnik/value.hpp>
|
||||
#include <boost/locale.hpp>
|
||||
#ifndef __linux__
|
||||
#include <codecvt>
|
||||
#endif
|
||||
|
||||
using mapnik::util::from_u8string;
|
||||
|
||||
#ifndef __linux__
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
std::string utf8_;
|
||||
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, utf8_(from_u8string(u8"שלום"))
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> utf32conv;
|
||||
std::u32string utf32 = utf32conv.from_bytes(utf8_);
|
||||
if (utf32.size() != 4)
|
||||
return false;
|
||||
if (utf32[0] != 0x5e9 && utf32[1] != 0x5dc && utf32[2] != 0x5d5 && utf32[3] != 0x5dd)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
std::u32string utf32;
|
||||
std::wstring_convert<std::codecvt_utf8<char32_t>, char32_t> utf32conv;
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
utf32 = utf32conv.from_bytes(utf8_);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
class test2 : public benchmark::test_case
|
||||
{
|
||||
std::string utf8_;
|
||||
|
||||
public:
|
||||
test2(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, utf8_(from_u8string(u8"שלום"))
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
std::u32string utf32 = boost::locale::conv::utf_to_utf<char32_t>(utf8_);
|
||||
if (utf32.size() != 4)
|
||||
return false;
|
||||
if (utf32[0] != 0x5e9 && utf32[1] != 0x5dc && utf32[2] != 0x5d5 && utf32[3] != 0x5dd)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
std::u32string utf32;
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
utf32 = boost::locale::conv::utf_to_utf<char32_t>(utf8_);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
class test3 : public benchmark::test_case
|
||||
{
|
||||
std::string utf8_;
|
||||
|
||||
public:
|
||||
test3(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
, utf8_(from_u8string(u8"שלום"))
|
||||
{}
|
||||
bool validate() const
|
||||
{
|
||||
mapnik::transcoder tr_("utf-8");
|
||||
mapnik::value_unicode_string utf32 = tr_.transcode(utf8_.data(), utf8_.size());
|
||||
// std::u32string utf32 = boost::locale::conv::utf_to_utf<char32_t>(utf8_);
|
||||
if (utf32.length() != 4)
|
||||
return false;
|
||||
if (utf32[0] != 0x5e9 && utf32[1] != 0x5dc && utf32[2] != 0x5d5 && utf32[3] != 0x5dd)
|
||||
return false;
|
||||
return true;
|
||||
}
|
||||
bool operator()() const
|
||||
{
|
||||
mapnik::transcoder tr_("utf-8");
|
||||
mapnik::value_unicode_string utf32;
|
||||
for (std::size_t i = 0; i < iterations_; ++i)
|
||||
{
|
||||
utf32 = tr_.transcode(utf8_.data(), utf8_.size());
|
||||
}
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
mapnik::setup();
|
||||
mapnik::parameters params;
|
||||
benchmark::handle_args(argc, argv, params);
|
||||
int return_value = 0;
|
||||
#ifndef __linux__
|
||||
test test_runner(params);
|
||||
return_value = return_value | run(test_runner, "utf encode std::codecvt");
|
||||
#else
|
||||
std::clog << "skipping 'utf encode std::codecvt' test since <codecvt> is not supported on __linux__\n";
|
||||
#endif
|
||||
test2 test_runner2(params);
|
||||
return_value = return_value | run(test_runner2, "utf encode boost::locale");
|
||||
test3 test_runner3(params);
|
||||
return_value = return_value | run(test_runner3, "utf encode ICU");
|
||||
return return_value;
|
||||
}
|
|
@ -1,13 +0,0 @@
|
|||
#include "bench_framework.hpp"
|
||||
|
||||
class test : public benchmark::test_case
|
||||
{
|
||||
public:
|
||||
test(mapnik::parameters const& params)
|
||||
: test_case(params)
|
||||
{}
|
||||
bool validate() const { return true; }
|
||||
void operator()() const {}
|
||||
};
|
||||
|
||||
BENCHMARK(test, "test name")
|
|
@ -3,8 +3,8 @@ import random
|
|||
|
||||
im = mapnik.Image(256,256)
|
||||
|
||||
for x in range(im.width()):
|
||||
for y in range(im.height()):
|
||||
for x in xrange(0,im.width()):
|
||||
for y in xrange(0,im.height()):
|
||||
r = int(random.random() * 255)
|
||||
g = random.random() * 255
|
||||
b = random.random() * 255
|
||||
|
|
206
bindings/python/build.py
Normal file
206
bindings/python/build.py
Normal file
|
@ -0,0 +1,206 @@
|
|||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
#
|
||||
# Mapnik is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
# License as published by the Free Software Foundation; either
|
||||
# version 2.1 of the License, or (at your option) any later version.
|
||||
#
|
||||
# This library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public
|
||||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
#
|
||||
|
||||
import os, re, sys, glob
|
||||
from subprocess import Popen, PIPE
|
||||
|
||||
|
||||
Import('env')
|
||||
|
||||
def call(cmd, silent=True):
|
||||
stdin, stderr = Popen(cmd, shell=True, stdout=PIPE, stderr=PIPE).communicate()
|
||||
if not stderr:
|
||||
return stdin.strip()
|
||||
elif not silent:
|
||||
print stderr
|
||||
|
||||
def run_2to3(*args,**kwargs):
|
||||
call('2to3 -w %s' % os.path.dirname(kwargs['target'][0].path))
|
||||
|
||||
def is_py3():
|
||||
return 'True' in os.popen('''%s -c "import sys as s;s.stdout.write(str(s.version_info[0] == 3))"''' % env['PYTHON']).read().strip()
|
||||
|
||||
|
||||
prefix = env['PREFIX']
|
||||
target_path = os.path.normpath(env['PYTHON_INSTALL_LOCATION'] + os.path.sep + 'mapnik')
|
||||
target_path_deprecated = os.path.normpath(env['PYTHON_INSTALL_LOCATION'] + os.path.sep + 'mapnik2')
|
||||
|
||||
libraries = ['mapnik',env['BOOST_PYTHON_LIB']]
|
||||
|
||||
# TODO - do solaris/fedora need direct linking too?
|
||||
if env['PLATFORM'] == 'Darwin':
|
||||
if not env['PYTHON_DYNAMIC_LOOKUP']:
|
||||
libraries.append('png')
|
||||
if env['JPEG']:
|
||||
libraries.append('jpeg')
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
libraries.append('boost_regex%s' % env['BOOST_APPEND'])
|
||||
if env['THREADING'] == 'multi':
|
||||
libraries.append('boost_thread%s' % env['BOOST_APPEND'])
|
||||
|
||||
##### Python linking on OS X is tricky ###
|
||||
# Confounding problems are:
|
||||
# 1) likelyhood of multiple python installs of the same major.minor version
|
||||
# because apple supplies python built-in and many users may have installed
|
||||
# further versions using macports
|
||||
# 2) boost python directly links to a python version
|
||||
# 3) the below will directly link _mapnik.so to a python version
|
||||
# 4) _mapnik.so must link to the same python lib as boost_python.dylib otherwise
|
||||
# python will Abort with a Version Mismatch error.
|
||||
# See https://github.com/mapnik/mapnik/issues/453 for the seeds of a better approach
|
||||
# for now we offer control over method of direct linking...
|
||||
# The default below is to link against the python dylib in the form of
|
||||
#/path/to/Python.framework/Python instead of -lpython
|
||||
|
||||
# http://developer.apple.com/mac/library/DOCUMENTATION/Darwin/Reference/ManPages/man1/ld.1.html
|
||||
|
||||
if env['PYTHON_DYNAMIC_LOOKUP']:
|
||||
python_link_flag = '-undefined dynamic_lookup'
|
||||
elif env['FRAMEWORK_PYTHON']:
|
||||
if env['FRAMEWORK_SEARCH_PATH']:
|
||||
# if the user has supplied a custom root path to search for
|
||||
# a given Python framework, then use that to direct the linker
|
||||
python_link_flag = '-F%s -framework Python -Z' % env['FRAMEWORK_SEARCH_PATH']
|
||||
else:
|
||||
# otherwise be as explicit as possible for linking to the same Framework
|
||||
# as the executable we are building with (or is pointed to by the PYTHON variable)
|
||||
# otherwise we may accidentally link against either:
|
||||
# /System/Library/Frameworks/Python.framework/Python/Versions/
|
||||
# or
|
||||
# /Library/Frameworks/Python.framework/Python/Versions/
|
||||
# See: https://github.com/mapnik/mapnik/issues/380
|
||||
link_prefix = env['PYTHON_SYS_PREFIX']
|
||||
if '.framework' in link_prefix:
|
||||
python_link_flag = '-F%s -framework Python -Z' % os.path.dirname(link_prefix.split('.')[0])
|
||||
elif '/System' in link_prefix:
|
||||
python_link_flag = '-F/System/Library/Frameworks/ -framework Python -Z'
|
||||
else:
|
||||
# should we fall back to -lpython here?
|
||||
python_link_flag = '-F/ -framework Python'
|
||||
|
||||
# if we are not linking to a framework then use the *nix standard approach
|
||||
else:
|
||||
# TODO - do we need to pass -L/?
|
||||
python_link_flag = '-lpython%s' % env['PYTHON_VERSION']
|
||||
|
||||
elif env['PLATFORM'] == 'SunOS':
|
||||
# make sure to explicitly link mapnik.so against
|
||||
# libmapnik in its installed location
|
||||
python_link_flag = '-R%s' % env['MAPNIK_LIB_BASE']
|
||||
else:
|
||||
# all other platforms we don't directly link python
|
||||
python_link_flag = ''
|
||||
|
||||
if env['CUSTOM_LDFLAGS']:
|
||||
linkflags = '%s %s' % (env['CUSTOM_LDFLAGS'], python_link_flag)
|
||||
else:
|
||||
linkflags = python_link_flag
|
||||
|
||||
paths = '''
|
||||
"""Configuration paths of Mapnik fonts and input plugins (auto-generated by SCons)."""
|
||||
|
||||
from os.path import normpath,join,dirname
|
||||
|
||||
mapniklibpath = '%s'
|
||||
mapniklibpath = normpath(join(dirname(__file__),mapniklibpath))
|
||||
'''
|
||||
|
||||
paths += "inputpluginspath = join(mapniklibpath,'input')\n"
|
||||
|
||||
if env['SYSTEM_FONTS']:
|
||||
paths += "fontscollectionpath = normpath('%s')\n" % env['SYSTEM_FONTS']
|
||||
else:
|
||||
paths += "fontscollectionpath = join(mapniklibpath,'fonts')\n"
|
||||
|
||||
paths += "__all__ = [mapniklibpath,inputpluginspath,fontscollectionpath]\n"
|
||||
|
||||
if not os.path.exists('mapnik'):
|
||||
os.mkdir('mapnik')
|
||||
|
||||
file('mapnik/paths.py','w').write(paths % (env['MAPNIK_LIB_DIR']))
|
||||
|
||||
# force open perms temporarily so that `sudo scons install`
|
||||
# does not later break simple non-install non-sudo rebuild
|
||||
try:
|
||||
os.chmod('mapnik/paths.py',0666)
|
||||
except: pass
|
||||
|
||||
# install the shared object beside the module directory
|
||||
sources = glob.glob('*.cpp')
|
||||
|
||||
py_env = env.Clone()
|
||||
py_env.Append(CPPPATH = env['PYTHON_INCLUDES'])
|
||||
|
||||
if 'install' in COMMAND_LINE_TARGETS:
|
||||
# install the core mapnik python files, including '__init__.py'
|
||||
init_files = glob.glob('mapnik/*.py')
|
||||
if 'mapnik/paths.py' in init_files:
|
||||
init_files.remove('mapnik/paths.py')
|
||||
init_module = env.Install(target_path, init_files)
|
||||
env.Alias(target='install', source=init_module)
|
||||
# install mapnik2 module which redirects to mapnik and issues DeprecatedWarning
|
||||
init_mapnik2 = env.Install(target_path_deprecated, 'mapnik2/__init__.py')
|
||||
env.Alias(target='install', source=init_mapnik2)
|
||||
|
||||
# fix perms and install the custom generated 'paths.py'
|
||||
targetp = os.path.join(target_path,'paths.py')
|
||||
env.Alias("install", targetp)
|
||||
# use env.Command rather than env.Install
|
||||
# to enable setting proper perms on `paths.py`
|
||||
env.Command( targetp, 'mapnik/paths.py',
|
||||
[
|
||||
Copy("$TARGET","$SOURCE"),
|
||||
Chmod("$TARGET", 0644),
|
||||
])
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
if env['HAS_CAIRO']:
|
||||
py_env.Append(CPPPATH = env['CAIRO_CPPPATHS'])
|
||||
py_env.Append(CXXFLAGS = '-DHAVE_CAIRO')
|
||||
if env['PLATFORM'] == 'Darwin':
|
||||
py_env.Append(LIBS=env['CAIRO_LINKFLAGS'])
|
||||
|
||||
if env['HAS_PYCAIRO']:
|
||||
py_env.ParseConfig('pkg-config --cflags pycairo')
|
||||
py_env.Append(CXXFLAGS = '-DHAVE_PYCAIRO')
|
||||
|
||||
libraries.append('boost_thread%s' % env['BOOST_APPEND'])
|
||||
_mapnik = py_env.LoadableModule('mapnik/_mapnik', sources, LIBS=libraries, LDMODULEPREFIX='', LDMODULESUFFIX='.so',LINKFLAGS=linkflags)
|
||||
|
||||
Depends(_mapnik, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
if env['PLATFORM'] == 'SunOS' and env['PYTHON_IS_64BIT']:
|
||||
# http://mail.python.org/pipermail/python-dev/2006-August/068528.html
|
||||
cxx_module_path = os.path.join(target_path,'64')
|
||||
else:
|
||||
cxx_module_path = target_path
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
pymapniklib = env.Install(cxx_module_path,_mapnik)
|
||||
py_env.Alias(target='install',source=pymapniklib)
|
||||
if 'install' in COMMAND_LINE_TARGETS:
|
||||
if is_py3():
|
||||
env.AddPostAction(pymapniklib, run_2to3)
|
||||
|
||||
|
||||
env['create_uninstall_target'](env, target_path)
|
||||
env['create_uninstall_target'](env, target_path_deprecated)
|
||||
|
1028
bindings/python/mapnik/__init__.py
Normal file
1028
bindings/python/mapnik/__init__.py
Normal file
File diff suppressed because it is too large
Load diff
1028
bindings/python/mapnik/printing.py
Normal file
1028
bindings/python/mapnik/printing.py
Normal file
File diff suppressed because it is too large
Load diff
27
bindings/python/mapnik2/__init__.py
Normal file
27
bindings/python/mapnik2/__init__.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
#
|
||||
# This file is part of Mapnik (C++/Python mapping toolkit)
|
||||
# Copyright (C) 2011 Artem Pavlenko
|
||||
#
|
||||
# Mapnik is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 2
|
||||
# of the License, or any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
#
|
||||
|
||||
# mapnik2 module (Deprecated)
|
||||
|
||||
import warnings
|
||||
from mapnik import *
|
||||
warnings.simplefilter("default")
|
||||
msg=""" mapnik2 module has been deprecated,
|
||||
please use 'import mapnik' """
|
||||
warnings.warn(msg, DeprecationWarning)
|
52
bindings/python/mapnik_building_symbolizer.cpp
Normal file
52
bindings/python/mapnik_building_symbolizer.cpp
Normal file
|
@ -0,0 +1,52 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2012 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#include <mapnik/value.hpp>
|
||||
#include <mapnik/attribute.hpp>
|
||||
#include <mapnik/building_symbolizer.hpp>
|
||||
|
||||
using namespace mapnik;
|
||||
using mapnik::building_symbolizer;
|
||||
using mapnik::color;
|
||||
|
||||
void export_building_symbolizer()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
||||
class_<building_symbolizer>("BuildingSymbolizer",
|
||||
init<>("Default BuildingSymbolizer"))
|
||||
.add_property("fill",make_function
|
||||
(&building_symbolizer::get_fill,
|
||||
return_value_policy<copy_const_reference>()),
|
||||
&building_symbolizer::set_fill)
|
||||
.add_property("fill_opacity",
|
||||
&building_symbolizer::get_opacity,
|
||||
&building_symbolizer::set_opacity)
|
||||
.add_property("height",
|
||||
make_function(&building_symbolizer::height,
|
||||
return_value_policy<copy_const_reference>()),
|
||||
&building_symbolizer::set_height,
|
||||
"Set/get the building height")
|
||||
;
|
||||
|
||||
}
|
94
bindings/python/mapnik_color.cpp
Normal file
94
bindings/python/mapnik_color.cpp
Normal file
|
@ -0,0 +1,94 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
|
||||
//mapnik
|
||||
#include <mapnik/color.hpp>
|
||||
|
||||
|
||||
using mapnik::color;
|
||||
|
||||
struct color_pickle_suite : boost::python::pickle_suite
|
||||
{
|
||||
static boost::python::tuple
|
||||
getinitargs(const color& c)
|
||||
{
|
||||
using namespace boost::python;
|
||||
return boost::python::make_tuple(c.red(),c.green(),c.blue(),c.alpha());
|
||||
}
|
||||
};
|
||||
|
||||
void export_color ()
|
||||
{
|
||||
using namespace boost::python;
|
||||
class_<color>("Color", init<int,int,int,int>(
|
||||
( arg("r"), arg("g"), arg("b"), arg("a") ),
|
||||
"Creates a new color from its RGB components\n"
|
||||
"and an alpha value.\n"
|
||||
"All values between 0 and 255.\n")
|
||||
)
|
||||
.def(init<int,int,int>(
|
||||
( arg("r"), arg("g"), arg("b") ),
|
||||
"Creates a new color from its RGB components.\n"
|
||||
"All values between 0 and 255.\n")
|
||||
)
|
||||
.def(init<std::string>(
|
||||
( arg("color_string") ),
|
||||
"Creates a new color from its CSS string representation.\n"
|
||||
"The string may be a CSS color name (e.g. 'blue')\n"
|
||||
"or a hex color string (e.g. '#0000ff').\n")
|
||||
)
|
||||
.add_property("r",
|
||||
&color::red,
|
||||
&color::set_red,
|
||||
"Gets or sets the red component.\n"
|
||||
"The value is between 0 and 255.\n")
|
||||
.add_property("g",
|
||||
&color::green,
|
||||
&color::set_green,
|
||||
"Gets or sets the green component.\n"
|
||||
"The value is between 0 and 255.\n")
|
||||
.add_property("b",
|
||||
&color::blue,
|
||||
&color::set_blue,
|
||||
"Gets or sets the blue component.\n"
|
||||
"The value is between 0 and 255.\n")
|
||||
.add_property("a",
|
||||
&color::alpha,
|
||||
&color::set_alpha,
|
||||
"Gets or sets the alpha component.\n"
|
||||
"The value is between 0 and 255.\n")
|
||||
.def(self == self)
|
||||
.def(self != self)
|
||||
.def_pickle(color_pickle_suite())
|
||||
.def("__str__",&color::to_string)
|
||||
.def("to_hex_string",&color::to_hex_string,
|
||||
"Returns the hexadecimal representation of this color.\n"
|
||||
"\n"
|
||||
"Example:\n"
|
||||
">>> c = Color('blue')\n"
|
||||
">>> c.to_hex_string()\n"
|
||||
"'#0000ff'\n")
|
||||
;
|
||||
}
|
64
bindings/python/mapnik_coord.cpp
Normal file
64
bindings/python/mapnik_coord.cpp
Normal file
|
@ -0,0 +1,64 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/coord.hpp>
|
||||
|
||||
using mapnik::coord;
|
||||
|
||||
struct coord_pickle_suite : boost::python::pickle_suite
|
||||
{
|
||||
static boost::python::tuple
|
||||
getinitargs(const coord<double,2>& c)
|
||||
{
|
||||
using namespace boost::python;
|
||||
return boost::python::make_tuple(c.x,c.y);
|
||||
}
|
||||
};
|
||||
|
||||
void export_coord()
|
||||
{
|
||||
using namespace boost::python;
|
||||
class_<coord<double,2> >("Coord",init<double, double>(
|
||||
// class docstring is in mapnik/__init__.py, class _Coord
|
||||
(arg("x"), arg("y")),
|
||||
"Constructs a new point with the given coordinates.\n")
|
||||
)
|
||||
.def_pickle(coord_pickle_suite())
|
||||
.def_readwrite("x", &coord<double,2>::x,
|
||||
"Gets or sets the x/lon coordinate of the point.\n")
|
||||
.def_readwrite("y", &coord<double,2>::y,
|
||||
"Gets or sets the y/lat coordinate of the point.\n")
|
||||
.def(self == self) // __eq__
|
||||
.def(self + self) // __add__
|
||||
.def(self + float())
|
||||
.def(float() + self)
|
||||
.def(self - self) // __sub__
|
||||
.def(self - float())
|
||||
.def(self * float()) //__mult__
|
||||
.def(float() * self)
|
||||
.def(self / float()) // __div__
|
||||
;
|
||||
}
|
182
bindings/python/mapnik_datasource.cpp
Normal file
182
bindings/python/mapnik_datasource.cpp
Normal file
|
@ -0,0 +1,182 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/python/detail/api_placeholder.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
// stl
|
||||
#include <sstream>
|
||||
#include <vector>
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/box2d.hpp>
|
||||
#include <mapnik/coord.hpp>
|
||||
#include <mapnik/query.hpp>
|
||||
#include <mapnik/datasource.hpp>
|
||||
#include <mapnik/datasource_cache.hpp>
|
||||
#include <mapnik/feature_layer_desc.hpp>
|
||||
#include <mapnik/memory_datasource.hpp>
|
||||
|
||||
|
||||
using mapnik::datasource;
|
||||
using mapnik::memory_datasource;
|
||||
using mapnik::layer_descriptor;
|
||||
using mapnik::attribute_descriptor;
|
||||
|
||||
namespace
|
||||
{
|
||||
//user-friendly wrapper that uses Python dictionary
|
||||
using namespace boost::python;
|
||||
boost::shared_ptr<mapnik::datasource> create_datasource(const dict& d)
|
||||
{
|
||||
mapnik::parameters params;
|
||||
boost::python::list keys=d.keys();
|
||||
for (int i=0; i<len(keys); ++i)
|
||||
{
|
||||
std::string key = extract<std::string>(keys[i]);
|
||||
object obj = d[key];
|
||||
extract<std::string> ex0(obj);
|
||||
extract<mapnik::value_integer> ex1(obj);
|
||||
extract<double> ex2(obj);
|
||||
if (ex0.check())
|
||||
{
|
||||
params[key] = ex0();
|
||||
}
|
||||
else if (ex1.check())
|
||||
{
|
||||
params[key] = ex1();
|
||||
}
|
||||
else if (ex2.check())
|
||||
{
|
||||
params[key] = ex2();
|
||||
}
|
||||
}
|
||||
|
||||
return mapnik::datasource_cache::instance().create(params);
|
||||
}
|
||||
|
||||
boost::python::dict describe(boost::shared_ptr<mapnik::datasource> const& ds)
|
||||
{
|
||||
boost::python::dict description;
|
||||
mapnik::layer_descriptor ld = ds->get_descriptor();
|
||||
description["type"] = ds->type();
|
||||
description["name"] = ld.get_name();
|
||||
description["geometry_type"] = ds->get_geometry_type();
|
||||
description["encoding"] = ld.get_encoding();
|
||||
return description;
|
||||
}
|
||||
|
||||
boost::python::list fields(boost::shared_ptr<mapnik::datasource> const& ds)
|
||||
{
|
||||
boost::python::list flds;
|
||||
if (ds)
|
||||
{
|
||||
layer_descriptor ld = ds->get_descriptor();
|
||||
std::vector<attribute_descriptor> const& desc_ar = ld.get_descriptors();
|
||||
std::vector<attribute_descriptor>::const_iterator it = desc_ar.begin();
|
||||
std::vector<attribute_descriptor>::const_iterator end = desc_ar.end();
|
||||
for (; it != end; ++it)
|
||||
{
|
||||
flds.append(it->get_name());
|
||||
}
|
||||
}
|
||||
return flds;
|
||||
}
|
||||
boost::python::list field_types(boost::shared_ptr<mapnik::datasource> const& ds)
|
||||
{
|
||||
boost::python::list fld_types;
|
||||
if (ds)
|
||||
{
|
||||
layer_descriptor ld = ds->get_descriptor();
|
||||
std::vector<attribute_descriptor> const& desc_ar = ld.get_descriptors();
|
||||
std::vector<attribute_descriptor>::const_iterator it = desc_ar.begin();
|
||||
std::vector<attribute_descriptor>::const_iterator end = desc_ar.end();
|
||||
for (; it != end; ++it)
|
||||
{
|
||||
unsigned type = it->get_type();
|
||||
if (type == mapnik::Integer)
|
||||
// this crashes, so send back strings instead
|
||||
//fld_types.append(boost::python::object(boost::python::handle<>(&PyInt_Type)));
|
||||
fld_types.append(boost::python::str("int"));
|
||||
else if (type == mapnik::Float)
|
||||
fld_types.append(boost::python::str("float"));
|
||||
else if (type == mapnik::Double)
|
||||
fld_types.append(boost::python::str("float"));
|
||||
else if (type == mapnik::String)
|
||||
fld_types.append(boost::python::str("str"));
|
||||
else if (type == mapnik::Boolean)
|
||||
fld_types.append(boost::python::str("bool"));
|
||||
else if (type == mapnik::Geometry)
|
||||
fld_types.append(boost::python::str("geometry"));
|
||||
else if (type == mapnik::Object)
|
||||
fld_types.append(boost::python::str("object"));
|
||||
else
|
||||
fld_types.append(boost::python::str("unknown"));
|
||||
}
|
||||
}
|
||||
return fld_types;
|
||||
}}
|
||||
|
||||
void export_datasource()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
||||
enum_<mapnik::datasource::datasource_t>("DataType")
|
||||
.value("Vector",mapnik::datasource::Vector)
|
||||
.value("Raster",mapnik::datasource::Raster)
|
||||
;
|
||||
|
||||
enum_<mapnik::datasource::geometry_t>("DataGeometryType")
|
||||
.value("Point",mapnik::datasource::Point)
|
||||
.value("LineString",mapnik::datasource::LineString)
|
||||
.value("Polygon",mapnik::datasource::Polygon)
|
||||
.value("Collection",mapnik::datasource::Collection)
|
||||
;
|
||||
|
||||
class_<datasource,boost::shared_ptr<datasource>,
|
||||
boost::noncopyable>("Datasource",no_init)
|
||||
.def("type",&datasource::type)
|
||||
.def("geometry_type",&datasource::get_geometry_type)
|
||||
.def("describe",&describe)
|
||||
.def("envelope",&datasource::envelope)
|
||||
.def("features",&datasource::features)
|
||||
.def("fields",&fields)
|
||||
.def("field_types",&field_types)
|
||||
.def("features_at_point",&datasource::features_at_point, (arg("coord"),arg("tolerance")=0))
|
||||
.def("params",&datasource::params,return_value_policy<copy_const_reference>(),
|
||||
"The configuration parameters of the data source. "
|
||||
"These vary depending on the type of data source.")
|
||||
;
|
||||
|
||||
def("CreateDatasource",&create_datasource);
|
||||
|
||||
class_<memory_datasource, bases<datasource>, boost::noncopyable>("MemoryDatasource", init<>())
|
||||
.def("add_feature",&memory_datasource::push,
|
||||
"Adds a Feature:\n"
|
||||
">>> ms = MemoryDatasource()\n"
|
||||
">>> feature = Feature(1)\n"
|
||||
">>> ms.add_feature(Feature(1))\n")
|
||||
.def("num_features",&memory_datasource::size)
|
||||
;
|
||||
}
|
92
bindings/python/mapnik_datasource_cache.cpp
Normal file
92
bindings/python/mapnik_datasource_cache.cpp
Normal file
|
@ -0,0 +1,92 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
#include <mapnik/datasource_cache.hpp>
|
||||
|
||||
namespace {
|
||||
|
||||
using namespace boost::python;
|
||||
|
||||
boost::shared_ptr<mapnik::datasource> create_datasource(const dict& d)
|
||||
{
|
||||
mapnik::parameters params;
|
||||
boost::python::list keys=d.keys();
|
||||
for (int i=0; i<len(keys); ++i)
|
||||
{
|
||||
std::string key = extract<std::string>(keys[i]);
|
||||
object obj = d[key];
|
||||
extract<std::string> ex0(obj);
|
||||
extract<mapnik::value_integer> ex1(obj);
|
||||
extract<double> ex2(obj);
|
||||
|
||||
if (ex0.check())
|
||||
{
|
||||
params[key] = ex0();
|
||||
}
|
||||
else if (ex1.check())
|
||||
{
|
||||
params[key] = ex1();
|
||||
}
|
||||
else if (ex2.check())
|
||||
{
|
||||
params[key] = ex2();
|
||||
}
|
||||
}
|
||||
|
||||
return mapnik::datasource_cache::instance().create(params);
|
||||
}
|
||||
|
||||
void register_datasources(std::string const& path)
|
||||
{
|
||||
mapnik::datasource_cache::instance().register_datasources(path);
|
||||
}
|
||||
|
||||
std::vector<std::string> plugin_names()
|
||||
{
|
||||
return mapnik::datasource_cache::instance().plugin_names();
|
||||
}
|
||||
|
||||
std::string plugin_directories()
|
||||
{
|
||||
return mapnik::datasource_cache::instance().plugin_directories();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void export_datasource_cache()
|
||||
{
|
||||
using mapnik::datasource_cache;
|
||||
class_<datasource_cache,
|
||||
boost::noncopyable>("DatasourceCache",no_init)
|
||||
.def("create",&create_datasource)
|
||||
.staticmethod("create")
|
||||
.def("register_datasources",®ister_datasources)
|
||||
.staticmethod("register_datasources")
|
||||
.def("plugin_names",&plugin_names)
|
||||
.staticmethod("plugin_names")
|
||||
.def("plugin_directories",&plugin_directories)
|
||||
.staticmethod("plugin_directories")
|
||||
;
|
||||
}
|
90
bindings/python/mapnik_enumeration.hpp
Normal file
90
bindings/python/mapnik_enumeration.hpp
Normal file
|
@ -0,0 +1,90 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
#ifndef MAPNIK_PYTHON_BINDING_ENUMERATION_INCLUDED
|
||||
#define MAPNIK_PYTHON_BINDING_ENUMERATION_INCLUDED
|
||||
|
||||
namespace mapnik {
|
||||
|
||||
template <typename EnumWrapper>
|
||||
class enumeration_ :
|
||||
public boost::python::enum_<typename EnumWrapper::native_type>
|
||||
{
|
||||
// some short cuts
|
||||
typedef boost::python::enum_<typename EnumWrapper::native_type> base_type;
|
||||
typedef typename EnumWrapper::native_type native_type;
|
||||
public:
|
||||
enumeration_() :
|
||||
base_type( EnumWrapper::get_name().c_str() )
|
||||
{
|
||||
init();
|
||||
}
|
||||
enumeration_(const char * python_alias) :
|
||||
base_type( python_alias )
|
||||
{
|
||||
init();
|
||||
}
|
||||
#if BOOST_VERSION >= 103500
|
||||
enumeration_(const char * python_alias, const char * doc) :
|
||||
base_type( python_alias, doc )
|
||||
#else
|
||||
enumeration_(const char * python_alias, const char * /*doc*/) :
|
||||
// Boost.Python < 1.35.0 doesn't support
|
||||
// docstrings for enums so we ignore it.
|
||||
base_type( python_alias )
|
||||
#endif
|
||||
{
|
||||
init();
|
||||
}
|
||||
|
||||
private:
|
||||
struct converter
|
||||
{
|
||||
static PyObject* convert(EnumWrapper const& v)
|
||||
{
|
||||
// Redirect conversion to a static method of our base class's
|
||||
// base class. A free template converter will not work because
|
||||
// the base_type::base typedef is protected.
|
||||
// Lets hope MSVC agrees that this is legal C++
|
||||
using namespace boost::python::converter;
|
||||
return base_type::base::to_python(
|
||||
registered<native_type>::converters.m_class_object
|
||||
, static_cast<long>( v ));
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
void init() {
|
||||
boost::python::implicitly_convertible<native_type, EnumWrapper>();
|
||||
boost::python::to_python_converter<EnumWrapper, converter >();
|
||||
|
||||
for (unsigned i = 0; i < EnumWrapper::MAX; ++i)
|
||||
{
|
||||
// Register the strings already defined for this enum.
|
||||
base_type::value( EnumWrapper::get_string( i ), native_type( i ) );
|
||||
}
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
} // end of namespace mapnik
|
||||
|
||||
#endif // MAPNIK_PYTHON_BINDING_ENUMERATION_INCLUDED
|
293
bindings/python/mapnik_envelope.cpp
Normal file
293
bindings/python/mapnik_envelope.cpp
Normal file
|
@ -0,0 +1,293 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/box2d.hpp>
|
||||
#include <mapnik/value_error.hpp>
|
||||
|
||||
using mapnik::coord;
|
||||
using mapnik::box2d;
|
||||
|
||||
struct envelope_pickle_suite : boost::python::pickle_suite
|
||||
{
|
||||
static boost::python::tuple
|
||||
getinitargs(const box2d<double>& e)
|
||||
{
|
||||
using namespace boost::python;
|
||||
return boost::python::make_tuple(e.minx(),e.miny(),e.maxx(),e.maxy());
|
||||
}
|
||||
};
|
||||
|
||||
box2d<double> from_string(std::string const& s)
|
||||
{
|
||||
box2d<double> bbox;
|
||||
bool success = bbox.from_string(s);
|
||||
if (success)
|
||||
{
|
||||
return bbox;
|
||||
}
|
||||
else
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << "Could not parse bbox from string: '" << s << "'";
|
||||
throw mapnik::value_error(ss.str());
|
||||
}
|
||||
}
|
||||
|
||||
//define overloads here
|
||||
void (box2d<double>::*width_p1)(double) = &box2d<double>::width;
|
||||
double (box2d<double>::*width_p2)() const = &box2d<double>::width;
|
||||
|
||||
void (box2d<double>::*height_p1)(double) = &box2d<double>::height;
|
||||
double (box2d<double>::*height_p2)() const = &box2d<double>::height;
|
||||
|
||||
void (box2d<double>::*expand_to_include_p1)(double,double) = &box2d<double>::expand_to_include;
|
||||
void (box2d<double>::*expand_to_include_p2)(coord<double,2> const& ) = &box2d<double>::expand_to_include;
|
||||
void (box2d<double>::*expand_to_include_p3)(box2d<double> const& ) = &box2d<double>::expand_to_include;
|
||||
|
||||
bool (box2d<double>::*contains_p1)(double,double) const = &box2d<double>::contains;
|
||||
bool (box2d<double>::*contains_p2)(coord<double,2> const&) const = &box2d<double>::contains;
|
||||
bool (box2d<double>::*contains_p3)(box2d<double> const&) const = &box2d<double>::contains;
|
||||
|
||||
//intersects
|
||||
bool (box2d<double>::*intersects_p1)(double,double) const = &box2d<double>::intersects;
|
||||
bool (box2d<double>::*intersects_p2)(coord<double,2> const&) const = &box2d<double>::intersects;
|
||||
bool (box2d<double>::*intersects_p3)(box2d<double> const&) const = &box2d<double>::intersects;
|
||||
|
||||
// intersect
|
||||
box2d<double> (box2d<double>::*intersect)(box2d<double> const&) const = &box2d<double>::intersect;
|
||||
|
||||
// re_center
|
||||
void (box2d<double>::*re_center_p1)(double,double) = &box2d<double>::re_center;
|
||||
void (box2d<double>::*re_center_p2)(coord<double,2> const& ) = &box2d<double>::re_center;
|
||||
|
||||
// clip
|
||||
void (box2d<double>::*clip)(box2d<double> const&) = &box2d<double>::clip;
|
||||
|
||||
// pad
|
||||
void (box2d<double>::*pad)(double) = &box2d<double>::pad;
|
||||
|
||||
// deepcopy
|
||||
box2d<double> box2d_deepcopy(box2d<double> & obj, boost::python::dict memo)
|
||||
{
|
||||
// FIXME::ignore memo for now
|
||||
box2d<double> result(obj);
|
||||
return result;
|
||||
}
|
||||
|
||||
void export_envelope()
|
||||
{
|
||||
using namespace boost::python;
|
||||
class_<box2d<double> >("Box2d",
|
||||
// class docstring is in mapnik/__init__.py, class _Coord
|
||||
init<double,double,double,double>(
|
||||
(arg("minx"),arg("miny"),arg("maxx"),arg("maxy")),
|
||||
"Constructs a new envelope from the coordinates\n"
|
||||
"of its lower left and upper right corner points.\n"))
|
||||
.def(init<>("Equivalent to Box2d(0, 0, -1, -1).\n"))
|
||||
.def(init<const coord<double,2>&, const coord<double,2>&>(
|
||||
(arg("ll"),arg("ur")),
|
||||
"Equivalent to Box2d(ll.x, ll.y, ur.x, ur.y).\n"))
|
||||
.def("from_string",from_string)
|
||||
.staticmethod("from_string")
|
||||
.add_property("minx", &box2d<double>::minx,
|
||||
"X coordinate for the lower left corner")
|
||||
.add_property("miny", &box2d<double>::miny,
|
||||
"Y coordinate for the lower left corner")
|
||||
.add_property("maxx", &box2d<double>::maxx,
|
||||
"X coordinate for the upper right corner")
|
||||
.add_property("maxy", &box2d<double>::maxy,
|
||||
"Y coordinate for the upper right corner")
|
||||
.def("center", &box2d<double>::center,
|
||||
"Returns the coordinates of the center of the bounding box.\n"
|
||||
"\n"
|
||||
"Example:\n"
|
||||
">>> e = Box2d(0, 0, 100, 100)\n"
|
||||
">>> e.center()\n"
|
||||
"Coord(50, 50)\n")
|
||||
.def("center", re_center_p1,
|
||||
(arg("x"), arg("y")),
|
||||
"Moves the envelope so that the given coordinates become its new center.\n"
|
||||
"The width and the height are preserved.\n"
|
||||
"\n "
|
||||
"Example:\n"
|
||||
">>> e = Box2d(0, 0, 100, 100)\n"
|
||||
">>> e.center(60, 60)\n"
|
||||
">>> e.center()\n"
|
||||
"Coord(60.0,60.0)\n"
|
||||
">>> (e.width(), e.height())\n"
|
||||
"(100.0, 100.0)\n"
|
||||
">>> e\n"
|
||||
"Box2d(10.0, 10.0, 110.0, 110.0)\n"
|
||||
)
|
||||
.def("center", re_center_p2,
|
||||
(arg("Coord")),
|
||||
"Moves the envelope so that the given coordinates become its new center.\n"
|
||||
"The width and the height are preserved.\n"
|
||||
"\n "
|
||||
"Example:\n"
|
||||
">>> e = Box2d(0, 0, 100, 100)\n"
|
||||
">>> e.center(Coord60, 60)\n"
|
||||
">>> e.center()\n"
|
||||
"Coord(60.0,60.0)\n"
|
||||
">>> (e.width(), e.height())\n"
|
||||
"(100.0, 100.0)\n"
|
||||
">>> e\n"
|
||||
"Box2d(10.0, 10.0, 110.0, 110.0)\n"
|
||||
)
|
||||
.def("clip", clip,
|
||||
(arg("other")),
|
||||
"Clip the envelope based on the bounds of another envelope.\n"
|
||||
"\n "
|
||||
"Example:\n"
|
||||
">>> e = Box2d(0, 0, 100, 100)\n"
|
||||
">>> c = Box2d(-50, -50, 50, 50)\n"
|
||||
">>> e.clip(c)\n"
|
||||
">>> e\n"
|
||||
"Box2d(0.0,0.0,50.0,50.0\n"
|
||||
)
|
||||
.def("pad", pad,
|
||||
(arg("padding")),
|
||||
"Pad the envelope based on a padding value.\n"
|
||||
"\n "
|
||||
"Example:\n"
|
||||
">>> e = Box2d(0, 0, 100, 100)\n"
|
||||
">>> e.pad(10)\n"
|
||||
">>> e\n"
|
||||
"Box2d(-10.0,-10.0,110.0,110.0\n"
|
||||
)
|
||||
.def("width", width_p1,
|
||||
(arg("new_width")),
|
||||
"Sets the width to new_width of the envelope preserving its center.\n"
|
||||
"\n "
|
||||
"Example:\n"
|
||||
">>> e = Box2d(0, 0, 100, 100)\n"
|
||||
">>> e.width(120)\n"
|
||||
">>> e.center()\n"
|
||||
"Coord(50.0,50.0)\n"
|
||||
">>> e\n"
|
||||
"Box2d(-10.0, 0.0, 110.0, 100.0)\n"
|
||||
)
|
||||
.def("width", width_p2,
|
||||
"Returns the width of this envelope.\n"
|
||||
)
|
||||
.def("height", height_p1,
|
||||
(arg("new_height")),
|
||||
"Sets the height to new_height of the envelope preserving its center.\n"
|
||||
"\n "
|
||||
"Example:\n"
|
||||
">>> e = Box2d(0, 0, 100, 100)\n"
|
||||
">>> e.height(120)\n"
|
||||
">>> e.center()\n"
|
||||
"Coord(50.0,50.0)\n"
|
||||
">>> e\n"
|
||||
"Box2d(0.0, -10.0, 100.0, 110.0)\n"
|
||||
)
|
||||
.def("height", height_p2,
|
||||
"Returns the height of this envelope.\n"
|
||||
)
|
||||
.def("expand_to_include",expand_to_include_p1,
|
||||
(arg("x"),arg("y")),
|
||||
"Expands this envelope to include the point given by x and y.\n"
|
||||
"\n"
|
||||
"Example:\n",
|
||||
">>> e = Box2d(0, 0, 100, 100)\n"
|
||||
">>> e.expand_to_include(110, 110)\n"
|
||||
">>> e\n"
|
||||
"Box2d(0.0, 00.0, 110.0, 110.0)\n"
|
||||
)
|
||||
.def("expand_to_include",expand_to_include_p2,
|
||||
(arg("p")),
|
||||
"Equivalent to expand_to_include(p.x, p.y)\n"
|
||||
)
|
||||
.def("expand_to_include",expand_to_include_p3,
|
||||
(arg("other")),
|
||||
"Equivalent to:\n"
|
||||
" expand_to_include(other.minx, other.miny)\n"
|
||||
" expand_to_include(other.maxx, other.maxy)\n"
|
||||
)
|
||||
.def("contains",contains_p1,
|
||||
(arg("x"),arg("y")),
|
||||
"Returns True iff this envelope contains the point\n"
|
||||
"given by x and y.\n"
|
||||
)
|
||||
.def("contains",contains_p2,
|
||||
(arg("p")),
|
||||
"Equivalent to contains(p.x, p.y)\n"
|
||||
)
|
||||
.def("contains",contains_p3,
|
||||
(arg("other")),
|
||||
"Equivalent to:\n"
|
||||
" contains(other.minx, other.miny) and contains(other.maxx, other.maxy)\n"
|
||||
)
|
||||
.def("intersects",intersects_p1,
|
||||
(arg("x"),arg("y")),
|
||||
"Returns True iff this envelope intersects the point\n"
|
||||
"given by x and y.\n"
|
||||
"\n"
|
||||
"Note: For points, intersection is equivalent\n"
|
||||
"to containment, i.e. the following holds:\n"
|
||||
" e.contains(x, y) == e.intersects(x, y)\n"
|
||||
)
|
||||
.def("intersects",intersects_p2,
|
||||
(arg("p")),
|
||||
"Equivalent to contains(p.x, p.y)\n")
|
||||
.def("intersects",intersects_p3,
|
||||
(arg("other")),
|
||||
"Returns True iff this envelope intersects the other envelope,\n"
|
||||
"This relationship is symmetric."
|
||||
"\n"
|
||||
"Example:\n"
|
||||
">>> e1 = Box2d(0, 0, 100, 100)\n"
|
||||
">>> e2 = Box2d(50, 50, 150, 150)\n"
|
||||
">>> e1.intersects(e2)\n"
|
||||
"True\n"
|
||||
">>> e1.contains(e2)\n"
|
||||
"False\n"
|
||||
)
|
||||
.def("intersect",intersect,
|
||||
(arg("other")),
|
||||
"Returns the overlap of this envelope and the other envelope\n"
|
||||
"as a new envelope.\n"
|
||||
"\n"
|
||||
"Example:\n"
|
||||
">>> e1 = Box2d(0, 0, 100, 100)\n"
|
||||
">>> e2 = Box2d(50, 50, 150, 150)\n"
|
||||
">>> e1.intersect(e2)\n"
|
||||
"Box2d(50.0, 50.0, 100.0, 100.0)\n"
|
||||
)
|
||||
.def(self == self) // __eq__
|
||||
.def(self != self) // __neq__
|
||||
.def(self + self) // __add__
|
||||
.def(self * float()) // __mult__
|
||||
.def(float() * self)
|
||||
.def(self / float()) // __div__
|
||||
.def("__getitem__",&box2d<double>::operator[])
|
||||
.def("valid",&box2d<double>::valid)
|
||||
.def_pickle(envelope_pickle_suite())
|
||||
.def("__deepcopy__", &box2d_deepcopy)
|
||||
;
|
||||
|
||||
}
|
104
bindings/python/mapnik_expression.cpp
Normal file
104
bindings/python/mapnik_expression.cpp
Normal file
|
@ -0,0 +1,104 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/variant.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/feature.hpp>
|
||||
#include <mapnik/expression.hpp>
|
||||
#include <mapnik/expression_string.hpp>
|
||||
#include <mapnik/expression_evaluator.hpp>
|
||||
#include <mapnik/parse_path.hpp>
|
||||
#include <mapnik/value.hpp>
|
||||
|
||||
|
||||
using mapnik::Feature;
|
||||
using mapnik::expression_ptr;
|
||||
using mapnik::parse_expression;
|
||||
using mapnik::to_expression_string;
|
||||
using mapnik::path_expression_ptr;
|
||||
|
||||
|
||||
// expression
|
||||
expression_ptr parse_expression_(std::string const& wkt)
|
||||
{
|
||||
return parse_expression(wkt,"utf8");
|
||||
}
|
||||
|
||||
std::string expression_to_string_(mapnik::expr_node const& expr)
|
||||
{
|
||||
return mapnik::to_expression_string(expr);
|
||||
}
|
||||
|
||||
mapnik::value expression_evaluate_(mapnik::expr_node const& expr, mapnik::Feature const& f)
|
||||
{
|
||||
// will be auto-converted to proper python type by `mapnik_value_to_python`
|
||||
return boost::apply_visitor(mapnik::evaluate<mapnik::Feature,mapnik::value>(f),expr);
|
||||
}
|
||||
|
||||
bool expression_evaluate_to_bool_(mapnik::expr_node const& expr, mapnik::Feature const& f)
|
||||
{
|
||||
return boost::apply_visitor(mapnik::evaluate<mapnik::Feature,mapnik::value>(f),expr).to_bool();
|
||||
}
|
||||
|
||||
// path expression
|
||||
path_expression_ptr parse_path_(std::string const& path)
|
||||
{
|
||||
return mapnik::parse_path(path);
|
||||
}
|
||||
|
||||
std::string path_to_string_(mapnik::path_expression const& expr)
|
||||
{
|
||||
return mapnik::path_processor_type::to_string(expr);
|
||||
}
|
||||
|
||||
std::string path_evaluate_(mapnik::path_expression const& expr, mapnik::Feature const& f)
|
||||
{
|
||||
return mapnik::path_processor_type::evaluate(expr, f);
|
||||
}
|
||||
|
||||
void export_expression()
|
||||
{
|
||||
using namespace boost::python;
|
||||
class_<mapnik::expr_node ,boost::noncopyable>("Expression",
|
||||
"TODO"
|
||||
"",no_init)
|
||||
.def("evaluate", &expression_evaluate_)
|
||||
.def("to_bool", &expression_evaluate_to_bool_)
|
||||
.def("__str__",&expression_to_string_);
|
||||
;
|
||||
|
||||
def("Expression",&parse_expression_,(arg("expr")),"Expression string");
|
||||
|
||||
class_<mapnik::path_expression ,boost::noncopyable>("PathExpression",
|
||||
"TODO"
|
||||
"",no_init)
|
||||
.def("evaluate", &path_evaluate_) // note: "pass" is a reserved word in Python
|
||||
.def("__str__",&path_to_string_);
|
||||
;
|
||||
|
||||
def("PathExpression",&parse_path_,(arg("expr")),"PathExpression string");
|
||||
}
|
235
bindings/python/mapnik_feature.cpp
Normal file
235
bindings/python/mapnik_feature.cpp
Normal file
|
@ -0,0 +1,235 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python/suite/indexing/indexing_suite.hpp>
|
||||
//#include <boost/python/suite/indexing/map_indexing_suite.hpp>
|
||||
#include <boost/python/iterator.hpp>
|
||||
#include <boost/python/call_method.hpp>
|
||||
#include <boost/python/tuple.hpp>
|
||||
#include <boost/python/to_python_converter.hpp>
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/feature.hpp>
|
||||
#include <mapnik/feature_kv_iterator.hpp>
|
||||
#include <mapnik/datasource.hpp>
|
||||
#include <mapnik/wkb.hpp>
|
||||
#include <mapnik/wkt/wkt_factory.hpp>
|
||||
#include <mapnik/json/geojson_generator.hpp>
|
||||
|
||||
namespace {
|
||||
|
||||
using mapnik::Feature;
|
||||
using mapnik::geometry_utils;
|
||||
using mapnik::from_wkt;
|
||||
using mapnik::context_type;
|
||||
using mapnik::context_ptr;
|
||||
using mapnik::feature_kv_iterator;
|
||||
|
||||
mapnik::geometry_type const& (mapnik::Feature::*get_geometry_by_const_ref)(unsigned) const = &mapnik::Feature::get_geometry;
|
||||
boost::ptr_vector<mapnik::geometry_type> const& (mapnik::Feature::*get_paths_by_const_ref)() const = &mapnik::Feature::paths;
|
||||
|
||||
void feature_add_geometries_from_wkb(Feature &feature, std::string wkb)
|
||||
{
|
||||
geometry_utils::from_wkb(feature.paths(), wkb.c_str(), wkb.size());
|
||||
}
|
||||
|
||||
void feature_add_geometries_from_wkt(Feature &feature, std::string wkt)
|
||||
{
|
||||
bool result = mapnik::from_wkt(wkt, feature.paths());
|
||||
if (!result) throw std::runtime_error("Failed to parse WKT");
|
||||
}
|
||||
|
||||
std::string feature_to_geojson(Feature const& feature)
|
||||
{
|
||||
std::string json;
|
||||
mapnik::json::feature_generator g;
|
||||
if (!g.generate(json,feature))
|
||||
{
|
||||
throw std::runtime_error("Failed to generate GeoJSON");
|
||||
}
|
||||
return json;
|
||||
}
|
||||
|
||||
mapnik::value __getitem__(Feature const& feature, std::string const& name)
|
||||
{
|
||||
return feature.get(name);
|
||||
}
|
||||
|
||||
mapnik::value __getitem2__(Feature const& feature, std::size_t index)
|
||||
{
|
||||
return feature.get(index);
|
||||
}
|
||||
|
||||
void __setitem__(Feature & feature, std::string const& name, mapnik::value const& val)
|
||||
{
|
||||
feature.put_new(name,val);
|
||||
}
|
||||
|
||||
boost::python::dict attributes(Feature const& f)
|
||||
{
|
||||
boost::python::dict attributes;
|
||||
feature_kv_iterator itr = f.begin();
|
||||
feature_kv_iterator end = f.end();
|
||||
|
||||
for ( ;itr!=end; ++itr)
|
||||
{
|
||||
attributes[boost::get<0>(*itr)] = boost::get<1>(*itr);
|
||||
}
|
||||
|
||||
return attributes;
|
||||
}
|
||||
|
||||
} // end anonymous namespace
|
||||
|
||||
struct UnicodeString_from_python_str
|
||||
{
|
||||
UnicodeString_from_python_str()
|
||||
{
|
||||
boost::python::converter::registry::push_back(
|
||||
&convertible,
|
||||
&construct,
|
||||
boost::python::type_id<UnicodeString>());
|
||||
}
|
||||
|
||||
static void* convertible(PyObject* obj_ptr)
|
||||
{
|
||||
if (!(
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
PyBytes_Check(obj_ptr)
|
||||
#else
|
||||
PyString_Check(obj_ptr)
|
||||
#endif
|
||||
|| PyUnicode_Check(obj_ptr)))
|
||||
return 0;
|
||||
return obj_ptr;
|
||||
}
|
||||
|
||||
static void construct(
|
||||
PyObject* obj_ptr,
|
||||
boost::python::converter::rvalue_from_python_stage1_data* data)
|
||||
{
|
||||
char * value=0;
|
||||
if (PyUnicode_Check(obj_ptr)) {
|
||||
PyObject *encoded = PyUnicode_AsEncodedString(obj_ptr, "utf8", "replace");
|
||||
if (encoded) {
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
value = PyBytes_AsString(encoded);
|
||||
#else
|
||||
value = PyString_AsString(encoded);
|
||||
#endif
|
||||
Py_DecRef(encoded);
|
||||
}
|
||||
} else {
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
value = PyBytes_AsString(obj_ptr);
|
||||
#else
|
||||
value = PyString_AsString(obj_ptr);
|
||||
#endif
|
||||
}
|
||||
if (value == 0) boost::python::throw_error_already_set();
|
||||
void* storage = (
|
||||
(boost::python::converter::rvalue_from_python_storage<UnicodeString>*)
|
||||
data)->storage.bytes;
|
||||
new (storage) UnicodeString(value);
|
||||
data->convertible = storage;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct value_null_from_python
|
||||
{
|
||||
value_null_from_python()
|
||||
{
|
||||
boost::python::converter::registry::push_back(
|
||||
&convertible,
|
||||
&construct,
|
||||
boost::python::type_id<mapnik::value_null>());
|
||||
}
|
||||
|
||||
static void* convertible(PyObject* obj_ptr)
|
||||
{
|
||||
if (obj_ptr == Py_None) return obj_ptr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void construct(
|
||||
PyObject* obj_ptr,
|
||||
boost::python::converter::rvalue_from_python_stage1_data* data)
|
||||
{
|
||||
if (obj_ptr != Py_None) boost::python::throw_error_already_set();
|
||||
void* storage = (
|
||||
(boost::python::converter::rvalue_from_python_storage<mapnik::value_null>*)
|
||||
data)->storage.bytes;
|
||||
new (storage) mapnik::value_null();
|
||||
data->convertible = storage;
|
||||
}
|
||||
};
|
||||
|
||||
void export_feature()
|
||||
{
|
||||
using namespace boost::python;
|
||||
using mapnik::Feature;
|
||||
|
||||
// Python to mapnik::value converters
|
||||
// NOTE: order matters here. For example value_null must be listed before
|
||||
// bool otherwise Py_None will be interpreted as bool (false)
|
||||
implicitly_convertible<mapnik::value_unicode_string,mapnik::value>();
|
||||
implicitly_convertible<mapnik::value_null,mapnik::value>();
|
||||
implicitly_convertible<mapnik::value_integer,mapnik::value>();
|
||||
implicitly_convertible<mapnik::value_double,mapnik::value>();
|
||||
implicitly_convertible<mapnik::value_bool,mapnik::value>();
|
||||
|
||||
// http://misspent.wordpress.com/2009/09/27/how-to-write-boost-python-converters/
|
||||
UnicodeString_from_python_str();
|
||||
value_null_from_python();
|
||||
|
||||
class_<context_type,context_ptr,boost::noncopyable>
|
||||
("Context",init<>("Default ctor."))
|
||||
.def("push", &context_type::push)
|
||||
;
|
||||
|
||||
class_<Feature,boost::shared_ptr<Feature>,
|
||||
boost::noncopyable>("Feature",init<context_ptr,mapnik::value_integer>("Default ctor."))
|
||||
.def("id",&Feature::id)
|
||||
.def("__str__",&Feature::to_string)
|
||||
.def("add_geometries_from_wkb", &feature_add_geometries_from_wkb)
|
||||
.def("add_geometries_from_wkt", &feature_add_geometries_from_wkt)
|
||||
.def("add_geometry", &Feature::add_geometry)
|
||||
.def("num_geometries",&Feature::num_geometries)
|
||||
.def("get_geometry", make_function(get_geometry_by_const_ref,return_value_policy<reference_existing_object>()))
|
||||
.def("geometries",make_function(get_paths_by_const_ref,return_value_policy<reference_existing_object>()))
|
||||
.def("envelope", &Feature::envelope)
|
||||
.def("has_key", &Feature::has_key)
|
||||
.add_property("attributes",&attributes)
|
||||
.def("__setitem__",&__setitem__)
|
||||
.def("__contains__",&__getitem__)
|
||||
.def("__getitem__",&__getitem__)
|
||||
.def("__getitem__",&__getitem2__)
|
||||
.def("__len__", &Feature::size)
|
||||
.def("context",&Feature::context)
|
||||
.def("to_geojson",&feature_to_geojson)
|
||||
;
|
||||
}
|
87
bindings/python/mapnik_featureset.cpp
Normal file
87
bindings/python/mapnik_featureset.cpp
Normal file
|
@ -0,0 +1,87 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/feature.hpp>
|
||||
#include <mapnik/datasource.hpp>
|
||||
|
||||
namespace {
|
||||
using namespace boost::python;
|
||||
|
||||
inline list features(mapnik::featureset_ptr const& itr)
|
||||
{
|
||||
list l;
|
||||
while (true)
|
||||
{
|
||||
mapnik::feature_ptr fp = itr->next();
|
||||
if (!fp)
|
||||
{
|
||||
break;
|
||||
}
|
||||
l.append(fp);
|
||||
}
|
||||
return l;
|
||||
}
|
||||
|
||||
inline object pass_through(object const& o) { return o; }
|
||||
|
||||
inline mapnik::feature_ptr next(mapnik::featureset_ptr const& itr)
|
||||
{
|
||||
mapnik::feature_ptr f = itr->next();
|
||||
if (!f)
|
||||
{
|
||||
PyErr_SetString(PyExc_StopIteration, "No more features.");
|
||||
boost::python::throw_error_already_set();
|
||||
}
|
||||
|
||||
return f;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void export_featureset()
|
||||
{
|
||||
using namespace boost::python;
|
||||
using mapnik::Feature;
|
||||
using mapnik::Featureset;
|
||||
|
||||
class_<Featureset,boost::shared_ptr<Featureset>,
|
||||
boost::noncopyable>("Featureset",no_init)
|
||||
.def("__iter__",pass_through)
|
||||
.def("next",next)
|
||||
.add_property("features",features,
|
||||
"The list of features.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.query_map_point(0, 10, 10)\n"
|
||||
"<mapnik._mapnik.Featureset object at 0x1004d2938>\n"
|
||||
">>> fs = m.query_map_point(0, 10, 10)\n"
|
||||
">>> for f in fs.features:\n"
|
||||
">>> print f\n"
|
||||
"<mapnik.Feature object at 0x105e64140>\n"
|
||||
)
|
||||
;
|
||||
}
|
49
bindings/python/mapnik_font_engine.cpp
Normal file
49
bindings/python/mapnik_font_engine.cpp
Normal file
|
@ -0,0 +1,49 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
#include <mapnik/font_engine_freetype.hpp>
|
||||
|
||||
void export_font_engine()
|
||||
{
|
||||
using mapnik::freetype_engine;
|
||||
using mapnik::singleton;
|
||||
using mapnik::CreateStatic;
|
||||
using namespace boost::python;
|
||||
class_<singleton<freetype_engine,CreateStatic>,boost::noncopyable>("Singleton",no_init)
|
||||
.def("instance",&singleton<freetype_engine,CreateStatic>::instance,
|
||||
return_value_policy<reference_existing_object>())
|
||||
.staticmethod("instance")
|
||||
;
|
||||
|
||||
class_<freetype_engine,bases<singleton<freetype_engine,CreateStatic> >,
|
||||
boost::noncopyable>("FontEngine",no_init)
|
||||
.def("register_font",&freetype_engine::register_font)
|
||||
.def("register_fonts",&freetype_engine::register_fonts)
|
||||
.def("face_names",&freetype_engine::face_names)
|
||||
.staticmethod("register_font")
|
||||
.staticmethod("register_fonts")
|
||||
.staticmethod("face_names")
|
||||
;
|
||||
}
|
56
bindings/python/mapnik_fontset.cpp
Normal file
56
bindings/python/mapnik_fontset.cpp
Normal file
|
@ -0,0 +1,56 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2011 Artem Pavlenko
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
|
||||
//mapnik
|
||||
#include <mapnik/font_set.hpp>
|
||||
|
||||
|
||||
using mapnik::font_set;
|
||||
|
||||
void export_fontset ()
|
||||
{
|
||||
using namespace boost::python;
|
||||
class_<font_set>("FontSet", init<std::string const&>("default fontset constructor")
|
||||
)
|
||||
.add_property("name",
|
||||
make_function(&font_set::get_name,return_value_policy<copy_const_reference>()),
|
||||
&font_set::set_name,
|
||||
"Get/Set the name of the FontSet.\n"
|
||||
)
|
||||
.def("add_face_name",&font_set::add_face_name,
|
||||
(arg("name")),
|
||||
"Add a face-name to the fontset.\n"
|
||||
"\n"
|
||||
"Example:\n"
|
||||
">>> fs = Fontset('book-fonts')\n"
|
||||
">>> fs.add_face_name('DejaVu Sans Book')\n")
|
||||
.add_property("names",make_function
|
||||
(&font_set::get_face_names,
|
||||
return_value_policy<reference_existing_object>()),
|
||||
"List of face names belonging to a FontSet.\n"
|
||||
)
|
||||
;
|
||||
}
|
40
bindings/python/mapnik_gamma_method.cpp
Normal file
40
bindings/python/mapnik_gamma_method.cpp
Normal file
|
@ -0,0 +1,40 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#include <mapnik/gamma_method.hpp>
|
||||
#include "mapnik_enumeration.hpp"
|
||||
|
||||
void export_gamma_method()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
||||
mapnik::enumeration_<mapnik::gamma_method_e>("gamma_method")
|
||||
.value("POWER", mapnik::GAMMA_POWER)
|
||||
.value("LINEAR",mapnik::GAMMA_LINEAR)
|
||||
.value("NONE", mapnik::GAMMA_NONE)
|
||||
.value("THRESHOLD", mapnik::GAMMA_THRESHOLD)
|
||||
.value("MULTIPLY", mapnik::GAMMA_MULTIPLY)
|
||||
;
|
||||
|
||||
}
|
312
bindings/python/mapnik_geometry.cpp
Normal file
312
bindings/python/mapnik_geometry.cpp
Normal file
|
@ -0,0 +1,312 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/python/def.hpp>
|
||||
#include <boost/python/exception_translator.hpp>
|
||||
#include <boost/python/manage_new_object.hpp>
|
||||
#include <boost/python/iterator.hpp>
|
||||
#include <boost/ptr_container/ptr_vector.hpp>
|
||||
#include <boost/make_shared.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/geometry.hpp>
|
||||
#include <mapnik/wkt/wkt_factory.hpp>
|
||||
#include <mapnik/wkb.hpp>
|
||||
#include <mapnik/json/geometry_parser.hpp>
|
||||
#include <mapnik/json/geojson_generator.hpp>
|
||||
|
||||
#include <boost/version.hpp>
|
||||
#if BOOST_VERSION >= 104700
|
||||
#include <mapnik/util/geometry_to_wkb.hpp>
|
||||
#include <mapnik/util/geometry_to_wkt.hpp>
|
||||
#include <mapnik/util/geometry_to_svg.hpp>
|
||||
#endif
|
||||
|
||||
namespace {
|
||||
|
||||
using mapnik::from_wkt;
|
||||
using mapnik::geometry_type;
|
||||
|
||||
typedef boost::ptr_vector<geometry_type> path_type;
|
||||
|
||||
geometry_type const& getitem_impl(path_type & p, int key)
|
||||
{
|
||||
if (key >=0 && key < static_cast<int>(p.size()))
|
||||
return p[key];
|
||||
PyErr_SetString(PyExc_IndexError, "Index is out of range");
|
||||
throw boost::python::error_already_set();
|
||||
}
|
||||
|
||||
void add_wkt_impl(path_type& p, std::string const& wkt)
|
||||
{
|
||||
if (!mapnik::from_wkt(wkt , p))
|
||||
throw std::runtime_error("Failed to parse WKT");
|
||||
}
|
||||
|
||||
void add_wkb_impl(path_type& p, std::string const& wkb)
|
||||
{
|
||||
if (!mapnik::geometry_utils::from_wkb(p, wkb.c_str(), wkb.size()))
|
||||
throw std::runtime_error("Failed to parse WKB");
|
||||
}
|
||||
|
||||
void add_geojson_impl(path_type& p, std::string const& json)
|
||||
{
|
||||
if (!mapnik::json::from_geojson(json, p))
|
||||
throw std::runtime_error("Failed to parse geojson geometry");
|
||||
}
|
||||
|
||||
boost::shared_ptr<path_type> from_wkt_impl(std::string const& wkt)
|
||||
{
|
||||
boost::shared_ptr<path_type> paths = boost::make_shared<path_type>();
|
||||
if (!mapnik::from_wkt(wkt, *paths))
|
||||
throw std::runtime_error("Failed to parse WKT");
|
||||
return paths;
|
||||
}
|
||||
|
||||
boost::shared_ptr<path_type> from_wkb_impl(std::string const& wkb)
|
||||
{
|
||||
boost::shared_ptr<path_type> paths = boost::make_shared<path_type>();
|
||||
if (!mapnik::geometry_utils::from_wkb(*paths, wkb.c_str(), wkb.size()))
|
||||
throw std::runtime_error("Failed to parse WKB");
|
||||
return paths;
|
||||
}
|
||||
|
||||
boost::shared_ptr<path_type> from_geojson_impl(std::string const& json)
|
||||
{
|
||||
boost::shared_ptr<path_type> paths = boost::make_shared<path_type>();
|
||||
if (! mapnik::json::from_geojson(json, *paths))
|
||||
throw std::runtime_error("Failed to parse geojson geometry");
|
||||
return paths;
|
||||
}
|
||||
|
||||
mapnik::box2d<double> envelope_impl(path_type & p)
|
||||
{
|
||||
mapnik::box2d<double> b;
|
||||
bool first = true;
|
||||
BOOST_FOREACH(mapnik::geometry_type const& geom, p)
|
||||
{
|
||||
if (first)
|
||||
{
|
||||
b = geom.envelope();
|
||||
first=false;
|
||||
}
|
||||
else
|
||||
{
|
||||
b.expand_to_include(geom.envelope());
|
||||
}
|
||||
}
|
||||
return b;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
inline std::string boost_version()
|
||||
{
|
||||
std::ostringstream s;
|
||||
s << BOOST_VERSION/100000 << "." << BOOST_VERSION/100 % 1000 << "." << BOOST_VERSION % 100;
|
||||
return s.str();
|
||||
}
|
||||
|
||||
#if BOOST_VERSION >= 104700
|
||||
PyObject* to_wkb( geometry_type const& geom, mapnik::util::wkbByteOrder byte_order)
|
||||
{
|
||||
mapnik::util::wkb_buffer_ptr wkb = mapnik::util::to_wkb(geom,byte_order);
|
||||
if (wkb)
|
||||
{
|
||||
return
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
::PyBytes_FromStringAndSize
|
||||
#else
|
||||
::PyString_FromStringAndSize
|
||||
#endif
|
||||
((const char*)wkb->buffer(),wkb->size());
|
||||
}
|
||||
else
|
||||
{
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
}
|
||||
#else
|
||||
PyObject* to_wkb( geometry_type const& geom)
|
||||
{
|
||||
throw std::runtime_error("mapnik::to_wkb() requires at least boost 1.47 while your build was compiled against boost "
|
||||
+ boost_version());
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#if BOOST_VERSION >= 104700
|
||||
PyObject* to_wkb2( path_type const& p, mapnik::util::wkbByteOrder byte_order)
|
||||
{
|
||||
mapnik::util::wkb_buffer_ptr wkb = mapnik::util::to_wkb(p,byte_order);
|
||||
if (wkb)
|
||||
{
|
||||
return
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
::PyBytes_FromStringAndSize
|
||||
#else
|
||||
::PyString_FromStringAndSize
|
||||
#endif
|
||||
((const char*)wkb->buffer(),wkb->size());
|
||||
}
|
||||
else
|
||||
{
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
}
|
||||
#else
|
||||
PyObject* to_wkb2( path_type const& p)
|
||||
{
|
||||
throw std::runtime_error("mapnik::to_wkb() requires at least boost 1.47 while your build was compiled against boost "
|
||||
+ boost_version());
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
std::string to_wkt( geometry_type const& geom)
|
||||
{
|
||||
#if BOOST_VERSION >= 104700
|
||||
std::string wkt; // Use Python String directly ?
|
||||
bool result = mapnik::util::to_wkt(wkt,geom);
|
||||
if (!result)
|
||||
{
|
||||
throw std::runtime_error("Generate WKT failed");
|
||||
}
|
||||
return wkt;
|
||||
#else
|
||||
throw std::runtime_error("mapnik::to_wkt() requires at least boost 1.47 while your build was compiled against boost "
|
||||
+ boost_version());
|
||||
#endif
|
||||
}
|
||||
|
||||
std::string to_wkt2( path_type const& geom)
|
||||
{
|
||||
#if BOOST_VERSION >= 104700
|
||||
std::string wkt; // Use Python String directly ?
|
||||
bool result = mapnik::util::to_wkt(wkt,geom);
|
||||
if (!result)
|
||||
{
|
||||
throw std::runtime_error("Generate WKT failed");
|
||||
}
|
||||
return wkt;
|
||||
#else
|
||||
throw std::runtime_error("mapnik::to_wkt() requires at least boost 1.47 while your build was compiled against boost "
|
||||
+ boost_version());
|
||||
#endif
|
||||
}
|
||||
|
||||
std::string to_geojson( path_type const& geom)
|
||||
{
|
||||
std::string json;
|
||||
mapnik::json::geometry_generator g;
|
||||
if (!g.generate(json,geom))
|
||||
{
|
||||
throw std::runtime_error("Failed to generate GeoJSON");
|
||||
}
|
||||
return json;
|
||||
}
|
||||
|
||||
std::string to_svg( geometry_type const& geom)
|
||||
{
|
||||
#if BOOST_VERSION >= 104700
|
||||
std::string svg; // Use Python String directly ?
|
||||
bool result = mapnik::util::to_svg(svg,geom);
|
||||
if (!result)
|
||||
{
|
||||
throw std::runtime_error("Generate WKT failed");
|
||||
}
|
||||
return svg;
|
||||
#else
|
||||
throw std::runtime_error("mapnik::to_wkt() requires at least boost 1.47 while your build was compiled against boost "
|
||||
+ boost_version());
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
// https://github.com/mapnik/mapnik/issues/1437
|
||||
std::string to_svg2( path_type const& geom)
|
||||
{
|
||||
#if BOOST_VERSION >= 104700
|
||||
std::string svg; // Use Python String directly ?
|
||||
bool result = mapnik::util::to_svg(svg,geom);
|
||||
if (!result)
|
||||
{
|
||||
throw std::runtime_error("Generate WKT failed");
|
||||
}
|
||||
return svg;
|
||||
#else
|
||||
throw std::runtime_error("mapnik::to_svg() requires at least boost 1.47 while your build was compiled against boost "
|
||||
+ boost_version());
|
||||
#endif
|
||||
}*/
|
||||
|
||||
|
||||
void export_geometry()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
||||
enum_<mapnik::eGeomType>("GeometryType")
|
||||
.value("Point",mapnik::Point)
|
||||
.value("LineString",mapnik::LineString)
|
||||
.value("Polygon",mapnik::Polygon)
|
||||
;
|
||||
|
||||
#if BOOST_VERSION >= 104700
|
||||
enum_<mapnik::util::wkbByteOrder>("wkbByteOrder")
|
||||
.value("XDR",mapnik::util::wkbXDR)
|
||||
.value("NDR",mapnik::util::wkbNDR)
|
||||
;
|
||||
#endif
|
||||
|
||||
using mapnik::geometry_type;
|
||||
class_<geometry_type, std::auto_ptr<geometry_type>, boost::noncopyable>("Geometry2d",no_init)
|
||||
.def("envelope",&geometry_type::envelope)
|
||||
// .def("__str__",&geometry_type::to_string)
|
||||
.def("type",&geometry_type::type)
|
||||
.def("to_wkb",&to_wkb)
|
||||
.def("to_wkt",&to_wkt)
|
||||
.def("to_svg",&to_svg)
|
||||
// TODO add other geometry_type methods
|
||||
;
|
||||
|
||||
class_<path_type, boost::shared_ptr<path_type>, boost::noncopyable>("Path")
|
||||
.def("__getitem__", getitem_impl,return_value_policy<reference_existing_object>())
|
||||
.def("__len__", &path_type::size)
|
||||
.def("envelope",envelope_impl)
|
||||
.def("add_wkt",add_wkt_impl)
|
||||
.def("add_wkb",add_wkb_impl)
|
||||
.def("add_geojson",add_geojson_impl)
|
||||
.def("to_wkt",&to_wkt2)
|
||||
//.def("to_svg",&to_svg2)
|
||||
.def("to_wkb",&to_wkb2)
|
||||
.def("from_wkt",from_wkt_impl)
|
||||
.def("from_wkb",from_wkb_impl)
|
||||
.def("from_geojson",from_geojson_impl)
|
||||
.def("to_geojson",to_geojson)
|
||||
.staticmethod("from_wkt")
|
||||
.staticmethod("from_wkb")
|
||||
.staticmethod("from_geojson")
|
||||
;
|
||||
|
||||
}
|
82
bindings/python/mapnik_grid.cpp
Normal file
82
bindings/python/mapnik_grid.cpp
Normal file
|
@ -0,0 +1,82 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2011 Artem Pavlenko
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/python/module.hpp>
|
||||
#include <boost/python/def.hpp>
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/grid/grid.hpp>
|
||||
#include "python_grid_utils.hpp"
|
||||
|
||||
using namespace boost::python;
|
||||
|
||||
// help compiler see template definitions
|
||||
static dict (*encode)( mapnik::grid const&, std::string const& , bool, unsigned int) = mapnik::grid_encode;
|
||||
|
||||
bool painted(mapnik::grid const& grid)
|
||||
{
|
||||
return grid.painted();
|
||||
}
|
||||
|
||||
mapnik::grid::value_type get_pixel(mapnik::grid const& grid, int x, int y)
|
||||
{
|
||||
if (x < static_cast<int>(grid.width()) && y < static_cast<int>(grid.height()))
|
||||
{
|
||||
mapnik::grid::data_type const & data = grid.data();
|
||||
return data(x,y);
|
||||
}
|
||||
PyErr_SetString(PyExc_IndexError, "invalid x,y for grid dimensions");
|
||||
boost::python::throw_error_already_set();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void export_grid()
|
||||
{
|
||||
class_<mapnik::grid,boost::shared_ptr<mapnik::grid> >(
|
||||
"Grid",
|
||||
"This class represents a feature hitgrid.",
|
||||
init<int,int,std::string,unsigned>(
|
||||
( boost::python::arg("width"), boost::python::arg("height"),boost::python::arg("key")="__id__", boost::python::arg("resolution")=1 ),
|
||||
"Create a mapnik.Grid object\n"
|
||||
))
|
||||
.def("painted",&painted)
|
||||
.def("width",&mapnik::grid::width)
|
||||
.def("height",&mapnik::grid::height)
|
||||
.def("view",&mapnik::grid::get_view)
|
||||
.def("get_pixel",&get_pixel)
|
||||
.def("clear",&mapnik::grid::clear)
|
||||
.def("encode",encode,
|
||||
( boost::python::arg("encoding")="utf", boost::python::arg("features")=true,boost::python::arg("resolution")=4 ),
|
||||
"Encode the grid as as optimized json\n"
|
||||
)
|
||||
.add_property("key",
|
||||
make_function(&mapnik::grid::get_key,return_value_policy<copy_const_reference>()),
|
||||
&mapnik::grid::set_key,
|
||||
"Get/Set key to be used as unique indentifier for features\n"
|
||||
"The value should either be __id__ to refer to the feature.id()\n"
|
||||
"or some globally unique integer or string attribute field\n"
|
||||
)
|
||||
;
|
||||
|
||||
}
|
51
bindings/python/mapnik_grid_view.cpp
Normal file
51
bindings/python/mapnik_grid_view.cpp
Normal file
|
@ -0,0 +1,51 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2011 Artem Pavlenko
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/python/module.hpp>
|
||||
#include <boost/python/def.hpp>
|
||||
|
||||
// mapnik
|
||||
#include <string>
|
||||
#include <mapnik/grid/grid_view.hpp>
|
||||
#include <mapnik/grid/grid.hpp>
|
||||
#include "python_grid_utils.hpp"
|
||||
|
||||
using namespace boost::python;
|
||||
|
||||
// help compiler see template definitions
|
||||
static dict (*encode)( mapnik::grid_view const&, std::string const& , bool, unsigned int) = mapnik::grid_encode;
|
||||
|
||||
void export_grid_view()
|
||||
{
|
||||
class_<mapnik::grid_view,
|
||||
boost::shared_ptr<mapnik::grid_view> >("GridView",
|
||||
"This class represents a feature hitgrid subset.",no_init)
|
||||
.def("width",&mapnik::grid_view::width)
|
||||
.def("height",&mapnik::grid_view::height)
|
||||
.def("encode",encode,
|
||||
( boost::python::arg("encoding")="utf",boost::python::arg("add_features")=true,boost::python::arg("resolution")=4 ),
|
||||
"Encode the grid as as optimized json\n"
|
||||
)
|
||||
;
|
||||
}
|
254
bindings/python/mapnik_image.cpp
Normal file
254
bindings/python/mapnik_image.cpp
Normal file
|
@ -0,0 +1,254 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
extern "C"
|
||||
{
|
||||
#include <png.h>
|
||||
}
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/python/module.hpp>
|
||||
#include <boost/python/def.hpp>
|
||||
#include <boost/make_shared.hpp>
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/graphics.hpp>
|
||||
#include <mapnik/palette.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include <mapnik/png_io.hpp>
|
||||
#include <mapnik/image_reader.hpp>
|
||||
#include <mapnik/image_compositing.hpp>
|
||||
|
||||
// jpeg
|
||||
#if defined(HAVE_JPEG)
|
||||
#include <mapnik/jpeg_io.hpp>
|
||||
#endif
|
||||
|
||||
// cairo
|
||||
#if defined(HAVE_CAIRO) && defined(HAVE_PYCAIRO)
|
||||
#include <mapnik/cairo_context.hpp>
|
||||
#include <pycairo.h>
|
||||
#endif
|
||||
|
||||
using mapnik::image_32;
|
||||
using mapnik::image_reader;
|
||||
using mapnik::get_image_reader;
|
||||
using mapnik::type_from_filename;
|
||||
using mapnik::save_to_file;
|
||||
using mapnik::save_to_string;
|
||||
|
||||
using namespace boost::python;
|
||||
|
||||
// output 'raw' pixels
|
||||
PyObject* tostring1( image_32 const& im)
|
||||
{
|
||||
int size = im.width() * im.height() * 4;
|
||||
return
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
::PyBytes_FromStringAndSize
|
||||
#else
|
||||
::PyString_FromStringAndSize
|
||||
#endif
|
||||
((const char*)im.raw_data(),size);
|
||||
}
|
||||
|
||||
// encode (png,jpeg)
|
||||
PyObject* tostring2(image_32 const & im, std::string const& format)
|
||||
{
|
||||
std::string s = save_to_string(im, format);
|
||||
return
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
::PyBytes_FromStringAndSize
|
||||
#else
|
||||
::PyString_FromStringAndSize
|
||||
#endif
|
||||
(s.data(),s.size());
|
||||
}
|
||||
|
||||
PyObject* tostring3(image_32 const & im, std::string const& format, mapnik::rgba_palette const& pal)
|
||||
{
|
||||
std::string s = save_to_string(im, format, pal);
|
||||
return
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
::PyBytes_FromStringAndSize
|
||||
#else
|
||||
::PyString_FromStringAndSize
|
||||
#endif
|
||||
(s.data(),s.size());
|
||||
}
|
||||
|
||||
|
||||
void save_to_file1(mapnik::image_32 const& im, std::string const& filename)
|
||||
{
|
||||
save_to_file(im,filename);
|
||||
}
|
||||
|
||||
void save_to_file2(mapnik::image_32 const& im, std::string const& filename, std::string const& type)
|
||||
{
|
||||
save_to_file(im,filename,type);
|
||||
}
|
||||
|
||||
void save_to_file3(mapnik::image_32 const& im, std::string const& filename, std::string const& type, mapnik::rgba_palette const& pal)
|
||||
{
|
||||
save_to_file(im,filename,type,pal);
|
||||
}
|
||||
|
||||
bool painted(mapnik::image_32 const& im)
|
||||
{
|
||||
return im.painted();
|
||||
}
|
||||
|
||||
unsigned get_pixel(mapnik::image_32 const& im, int x, int y)
|
||||
{
|
||||
if (x < static_cast<int>(im.width()) && y < static_cast<int>(im.height()))
|
||||
{
|
||||
mapnik::image_data_32 const & data = im.data();
|
||||
return data(x,y);
|
||||
}
|
||||
PyErr_SetString(PyExc_IndexError, "invalid x,y for image dimensions");
|
||||
boost::python::throw_error_already_set();
|
||||
return 0;
|
||||
}
|
||||
|
||||
void set_pixel(mapnik::image_32 & im, unsigned x, unsigned y, mapnik::color const& c)
|
||||
{
|
||||
im.setPixel(x, y, c.rgba());
|
||||
}
|
||||
|
||||
boost::shared_ptr<image_32> open_from_file(std::string const& filename)
|
||||
{
|
||||
boost::optional<std::string> type = type_from_filename(filename);
|
||||
if (type)
|
||||
{
|
||||
std::auto_ptr<image_reader> reader(get_image_reader(filename,*type));
|
||||
if (reader.get())
|
||||
{
|
||||
|
||||
boost::shared_ptr<image_32> image_ptr = boost::make_shared<image_32>(reader->width(),reader->height());
|
||||
reader->read(0,0,image_ptr->data());
|
||||
return image_ptr;
|
||||
}
|
||||
throw mapnik::image_reader_exception("Failed to load: " + filename);
|
||||
}
|
||||
throw mapnik::image_reader_exception("Unsupported image format:" + filename);
|
||||
}
|
||||
|
||||
void blend (image_32 & im, unsigned x, unsigned y, image_32 const& im2, float opacity)
|
||||
{
|
||||
im.set_rectangle_alpha2(im2.data(),x,y,opacity);
|
||||
}
|
||||
|
||||
void composite(image_32 & dst, image_32 & src, mapnik::composite_mode_e mode, float opacity)
|
||||
{
|
||||
mapnik::composite(dst.data(),src.data(),mode,opacity,0,0,false);
|
||||
}
|
||||
|
||||
#if defined(HAVE_CAIRO) && defined(HAVE_PYCAIRO)
|
||||
boost::shared_ptr<image_32> from_cairo(PycairoSurface* py_surface)
|
||||
{
|
||||
mapnik::cairo_surface_ptr surface(py_surface->surface, mapnik::cairo_surface_closer());
|
||||
boost::shared_ptr<image_32> image_ptr = boost::make_shared<image_32>(surface);
|
||||
return image_ptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
void export_image()
|
||||
{
|
||||
using namespace boost::python;
|
||||
// NOTE: must match list in include/mapnik/image_compositing.hpp
|
||||
enum_<mapnik::composite_mode_e>("CompositeOp")
|
||||
.value("clear", mapnik::clear)
|
||||
.value("src", mapnik::src)
|
||||
.value("dst", mapnik::dst)
|
||||
.value("src_over", mapnik::src_over)
|
||||
.value("dst_over", mapnik::dst_over)
|
||||
.value("src_in", mapnik::src_in)
|
||||
.value("dst_in", mapnik::dst_in)
|
||||
.value("src_out", mapnik::src_out)
|
||||
.value("dst_out", mapnik::dst_out)
|
||||
.value("src_atop", mapnik::src_atop)
|
||||
.value("dst_atop", mapnik::dst_atop)
|
||||
.value("xor", mapnik::_xor)
|
||||
.value("plus", mapnik::plus)
|
||||
.value("minus", mapnik::minus)
|
||||
.value("multiply", mapnik::multiply)
|
||||
.value("screen", mapnik::screen)
|
||||
.value("overlay", mapnik::overlay)
|
||||
.value("darken", mapnik::darken)
|
||||
.value("lighten", mapnik::lighten)
|
||||
.value("color_dodge", mapnik::color_dodge)
|
||||
.value("color_burn", mapnik::color_burn)
|
||||
.value("hard_light", mapnik::hard_light)
|
||||
.value("soft_light", mapnik::soft_light)
|
||||
.value("difference", mapnik::difference)
|
||||
.value("exclusion", mapnik::exclusion)
|
||||
.value("contrast", mapnik::contrast)
|
||||
.value("invert", mapnik::invert)
|
||||
.value("grain_merge", mapnik::grain_merge)
|
||||
.value("grain_extract", mapnik::grain_extract)
|
||||
.value("hue", mapnik::hue)
|
||||
.value("saturation", mapnik::saturation)
|
||||
.value("color", mapnik::_color)
|
||||
.value("value", mapnik::_value)
|
||||
;
|
||||
|
||||
class_<image_32,boost::shared_ptr<image_32> >("Image","This class represents a 32 bit RGBA image.",init<int,int>())
|
||||
.def("width",&image_32::width)
|
||||
.def("height",&image_32::height)
|
||||
.def("view",&image_32::get_view)
|
||||
.def("painted",&painted)
|
||||
.add_property("background",make_function
|
||||
(&image_32::get_background,return_value_policy<copy_const_reference>()),
|
||||
&image_32::set_background, "The background color of the image.")
|
||||
.def("set_grayscale_to_alpha",&image_32::set_grayscale_to_alpha, "Set the grayscale values to the alpha channel of the Image")
|
||||
.def("set_color_to_alpha",&image_32::set_color_to_alpha, "Set a given color to the alpha channel of the Image")
|
||||
.def("set_alpha",&image_32::set_alpha, "Set the overall alpha channel of the Image")
|
||||
.def("blend",&blend)
|
||||
.def("composite",&composite,
|
||||
( arg("self"),
|
||||
arg("image"),
|
||||
arg("mode")=mapnik::src_over,
|
||||
arg("opacity")=1.0f
|
||||
))
|
||||
.def("premultiply",&image_32::premultiply)
|
||||
.def("demultiply",&image_32::demultiply)
|
||||
.def("set_pixel",&set_pixel)
|
||||
.def("get_pixel",&get_pixel)
|
||||
.def("clear",&image_32::clear)
|
||||
//TODO(haoyu) The method name 'tostring' might be confusing since they actually return bytes in Python 3
|
||||
|
||||
.def("tostring",&tostring1)
|
||||
.def("tostring",&tostring2)
|
||||
.def("tostring",&tostring3)
|
||||
.def("save", &save_to_file1)
|
||||
.def("save", &save_to_file2)
|
||||
.def("save", &save_to_file3)
|
||||
.def("open",open_from_file)
|
||||
.staticmethod("open")
|
||||
#if defined(HAVE_CAIRO) && defined(HAVE_PYCAIRO)
|
||||
.def("from_cairo",&from_cairo)
|
||||
.staticmethod("from_cairo")
|
||||
#endif
|
||||
;
|
||||
|
||||
}
|
122
bindings/python/mapnik_image_view.cpp
Normal file
122
bindings/python/mapnik_image_view.cpp
Normal file
|
@ -0,0 +1,122 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
extern "C"
|
||||
{
|
||||
#include <png.h>
|
||||
}
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include <mapnik/palette.hpp>
|
||||
#include <mapnik/image_view.hpp>
|
||||
#include <mapnik/png_io.hpp>
|
||||
#include <sstream>
|
||||
|
||||
// jpeg
|
||||
#if defined(HAVE_JPEG)
|
||||
#include <mapnik/jpeg_io.hpp>
|
||||
#endif
|
||||
|
||||
using mapnik::image_data_32;
|
||||
using mapnik::image_view;
|
||||
using mapnik::save_to_file;
|
||||
|
||||
// output 'raw' pixels
|
||||
PyObject* view_tostring1(image_view<image_data_32> const& view)
|
||||
{
|
||||
std::ostringstream ss(std::ios::out|std::ios::binary);
|
||||
for (unsigned i=0;i<view.height();i++)
|
||||
{
|
||||
ss.write(reinterpret_cast<const char*>(view.getRow(i)),
|
||||
view.width() * sizeof(image_view<image_data_32>::pixel_type));
|
||||
}
|
||||
return
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
::PyBytes_FromStringAndSize
|
||||
#else
|
||||
::PyString_FromStringAndSize
|
||||
#endif
|
||||
((const char*)ss.str().c_str(),ss.str().size());
|
||||
}
|
||||
|
||||
// encode (png,jpeg)
|
||||
PyObject* view_tostring2(image_view<image_data_32> const & view, std::string const& format)
|
||||
{
|
||||
std::string s = save_to_string(view, format);
|
||||
return
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
::PyBytes_FromStringAndSize
|
||||
#else
|
||||
::PyString_FromStringAndSize
|
||||
#endif
|
||||
(s.data(),s.size());
|
||||
}
|
||||
|
||||
PyObject* view_tostring3(image_view<image_data_32> const & view, std::string const& format, mapnik::rgba_palette const& pal)
|
||||
{
|
||||
std::string s = save_to_string(view, format, pal);
|
||||
return
|
||||
#if PY_VERSION_HEX >= 0x03000000
|
||||
::PyBytes_FromStringAndSize
|
||||
#else
|
||||
::PyString_FromStringAndSize
|
||||
#endif
|
||||
(s.data(),s.size());
|
||||
}
|
||||
|
||||
void save_view1(image_view<image_data_32> const& view,
|
||||
std::string const& filename)
|
||||
{
|
||||
save_to_file(view,filename);
|
||||
}
|
||||
|
||||
void save_view2(image_view<image_data_32> const& view,
|
||||
std::string const& filename,
|
||||
std::string const& type)
|
||||
{
|
||||
save_to_file(view,filename,type);
|
||||
}
|
||||
|
||||
void save_view3(image_view<image_data_32> const& view,
|
||||
std::string const& filename,
|
||||
std::string const& type,
|
||||
mapnik::rgba_palette const& pal)
|
||||
{
|
||||
save_to_file(view,filename,type,pal);
|
||||
}
|
||||
|
||||
|
||||
void export_image_view()
|
||||
{
|
||||
using namespace boost::python;
|
||||
class_<image_view<image_data_32> >("ImageView","A view into an image.",no_init)
|
||||
.def("width",&image_view<image_data_32>::width)
|
||||
.def("height",&image_view<image_data_32>::height)
|
||||
.def("tostring",&view_tostring1)
|
||||
.def("tostring",&view_tostring2)
|
||||
.def("tostring",&view_tostring3)
|
||||
.def("save",&save_view1)
|
||||
.def("save",&save_view2)
|
||||
.def("save",&save_view3)
|
||||
;
|
||||
}
|
125
bindings/python/mapnik_label_collision_detector.cpp
Normal file
125
bindings/python/mapnik_label_collision_detector.cpp
Normal file
|
@ -0,0 +1,125 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2011 Artem Pavlenko
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/python/module.hpp>
|
||||
#include <boost/python/def.hpp>
|
||||
#include <boost/make_shared.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
|
||||
#include <mapnik/label_collision_detector.hpp>
|
||||
#include <mapnik/map.hpp>
|
||||
|
||||
#include <list>
|
||||
|
||||
using mapnik::label_collision_detector4;
|
||||
using mapnik::box2d;
|
||||
using mapnik::Map;
|
||||
using boost::make_shared;
|
||||
|
||||
namespace
|
||||
{
|
||||
|
||||
boost::shared_ptr<label_collision_detector4>
|
||||
create_label_collision_detector_from_extent(box2d<double> const &extent)
|
||||
{
|
||||
return make_shared<label_collision_detector4>(extent);
|
||||
}
|
||||
|
||||
boost::shared_ptr<label_collision_detector4>
|
||||
create_label_collision_detector_from_map(Map const &m)
|
||||
{
|
||||
double buffer = m.buffer_size();
|
||||
box2d<double> extent(-buffer, -buffer, m.width() + buffer, m.height() + buffer);
|
||||
return make_shared<label_collision_detector4>(extent);
|
||||
}
|
||||
|
||||
boost::python::list
|
||||
make_label_boxes(boost::shared_ptr<label_collision_detector4> det)
|
||||
{
|
||||
boost::python::list boxes;
|
||||
|
||||
for (label_collision_detector4::query_iterator jtr = det->begin();
|
||||
jtr != det->end(); ++jtr)
|
||||
{
|
||||
boxes.append<box2d<double> >(jtr->box);
|
||||
}
|
||||
|
||||
return boxes;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void export_label_collision_detector()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
||||
// for overload resolution
|
||||
void (label_collision_detector4::*insert_box)(box2d<double> const &) = &label_collision_detector4::insert;
|
||||
|
||||
class_<label_collision_detector4, boost::shared_ptr<label_collision_detector4>, boost::noncopyable>
|
||||
("LabelCollisionDetector",
|
||||
"Object to detect collisions between labels, used in the rendering process.",
|
||||
no_init)
|
||||
|
||||
.def("__init__", make_constructor(create_label_collision_detector_from_extent),
|
||||
"Creates an empty collision detection object with a given extent. Note "
|
||||
"that the constructor from Map objects is a sensible default and usually "
|
||||
"what you want to do.\n"
|
||||
"\n"
|
||||
"Example:\n"
|
||||
">>> m = Map(size_x, size_y)\n"
|
||||
">>> buf_sz = m.buffer_size\n"
|
||||
">>> extent = mapnik.Box2d(-buf_sz, -buf_sz, m.width + buf_sz, m.height + buf_sz)\n"
|
||||
">>> detector = mapnik.LabelCollisionDetector(extent)")
|
||||
|
||||
.def("__init__", make_constructor(create_label_collision_detector_from_map),
|
||||
"Creates an empty collision detection object matching the given Map object. "
|
||||
"The created detector will have the same size, including the buffer, as the "
|
||||
"map object. This is usually what you want to do.\n"
|
||||
"\n"
|
||||
"Example:\n"
|
||||
">>> m = Map(size_x, size_y)\n"
|
||||
">>> detector = mapnik.LabelCollisionDetector(m)")
|
||||
|
||||
.def("extent", &label_collision_detector4::extent, return_value_policy<copy_const_reference>(),
|
||||
"Returns the total extent (bounding box) of all labels inside the detector.\n"
|
||||
"\n"
|
||||
"Example:\n"
|
||||
">>> detector.extent()\n"
|
||||
"Box2d(573.252589209,494.789179821,584.261023823,496.83610261)")
|
||||
|
||||
.def("boxes", &make_label_boxes,
|
||||
"Returns a list of all the label boxes inside the detector.")
|
||||
|
||||
.def("insert", insert_box,
|
||||
"Insert a 2d box into the collision detector. This can be used to ensure that "
|
||||
"some space is left clear on the map for later overdrawing, for example by "
|
||||
"non-Mapnik processes.\n"
|
||||
"\n"
|
||||
"Example:\n"
|
||||
">>> m = Map(size_x, size_y)\n"
|
||||
">>> detector = mapnik.LabelCollisionDetector(m)"
|
||||
">>> detector.insert(mapnik.Box2d(196, 254, 291, 389))")
|
||||
;
|
||||
}
|
375
bindings/python/mapnik_layer.cpp
Normal file
375
bindings/python/mapnik_layer.cpp
Normal file
|
@ -0,0 +1,375 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/python/detail/api_placeholder.hpp>
|
||||
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/layer.hpp>
|
||||
#include <mapnik/datasource.hpp>
|
||||
#include <mapnik/datasource_cache.hpp>
|
||||
|
||||
using mapnik::layer;
|
||||
using mapnik::parameters;
|
||||
using mapnik::datasource_cache;
|
||||
|
||||
|
||||
struct layer_pickle_suite : boost::python::pickle_suite
|
||||
{
|
||||
static boost::python::tuple
|
||||
getinitargs(const layer& l)
|
||||
{
|
||||
return boost::python::make_tuple(l.name(),l.srs());
|
||||
}
|
||||
|
||||
static boost::python::tuple
|
||||
getstate(const layer& l)
|
||||
{
|
||||
boost::python::list s;
|
||||
std::vector<std::string> const& style_names = l.styles();
|
||||
for (unsigned i = 0; i < style_names.size(); ++i)
|
||||
{
|
||||
s.append(style_names[i]);
|
||||
}
|
||||
return boost::python::make_tuple(l.clear_label_cache(),l.min_zoom(),l.max_zoom(),l.queryable(),l.datasource()->params(),l.cache_features(),s);
|
||||
}
|
||||
|
||||
static void
|
||||
setstate (layer& l, boost::python::tuple state)
|
||||
{
|
||||
using namespace boost::python;
|
||||
if (len(state) != 9)
|
||||
{
|
||||
PyErr_SetObject(PyExc_ValueError,
|
||||
("expected 9-item tuple in call to __setstate__; got %s"
|
||||
% state).ptr()
|
||||
);
|
||||
throw_error_already_set();
|
||||
}
|
||||
|
||||
l.set_clear_label_cache(extract<bool>(state[0]));
|
||||
|
||||
l.set_min_zoom(extract<double>(state[1]));
|
||||
|
||||
l.set_max_zoom(extract<double>(state[2]));
|
||||
|
||||
l.set_queryable(extract<bool>(state[3]));
|
||||
|
||||
mapnik::parameters params = extract<parameters>(state[4]);
|
||||
l.set_datasource(datasource_cache::instance().create(params));
|
||||
|
||||
boost::python::list s = extract<boost::python::list>(state[5]);
|
||||
for (int i=0;i<len(s);++i)
|
||||
{
|
||||
l.add_style(extract<std::string>(s[i]));
|
||||
}
|
||||
|
||||
l.set_cache_features(extract<bool>(state[6]));
|
||||
}
|
||||
};
|
||||
|
||||
std::vector<std::string> & (mapnik::layer::*_styles_)() = &mapnik::layer::styles;
|
||||
|
||||
void set_maximum_extent(mapnik::layer & l, boost::optional<mapnik::box2d<double> > const& box)
|
||||
{
|
||||
if (box)
|
||||
{
|
||||
l.set_maximum_extent(*box);
|
||||
}
|
||||
else
|
||||
{
|
||||
l.reset_maximum_extent();
|
||||
}
|
||||
}
|
||||
|
||||
void set_buffer_size(mapnik::layer & l, boost::optional<int> const& buffer_size)
|
||||
{
|
||||
if (buffer_size)
|
||||
{
|
||||
l.set_buffer_size(*buffer_size);
|
||||
}
|
||||
else
|
||||
{
|
||||
l.reset_buffer_size();
|
||||
}
|
||||
}
|
||||
|
||||
PyObject * get_buffer_size(mapnik::layer & l)
|
||||
{
|
||||
boost::optional<int> buffer_size = l.buffer_size();
|
||||
if (buffer_size)
|
||||
{
|
||||
return PyInt_FromLong(*buffer_size);
|
||||
}
|
||||
else
|
||||
{
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
void export_layer()
|
||||
{
|
||||
using namespace boost::python;
|
||||
class_<std::vector<std::string> >("Names")
|
||||
.def(vector_indexing_suite<std::vector<std::string>,true >())
|
||||
;
|
||||
|
||||
class_<layer>("Layer", "A Mapnik map layer.", init<std::string const&,optional<std::string const&> >(
|
||||
"Create a Layer with a named string and, optionally, an srs string.\n"
|
||||
"\n"
|
||||
"The srs can be either a Proj.4 epsg code ('+init=epsg:<code>') or\n"
|
||||
"of a Proj.4 literal ('+proj=<literal>').\n"
|
||||
"If no srs is specified it will default to '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> from mapnik import Layer\n"
|
||||
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
|
||||
">>> lyr\n"
|
||||
"<mapnik._mapnik.Layer object at 0x6a270>\n"
|
||||
))
|
||||
|
||||
.def_pickle(layer_pickle_suite())
|
||||
|
||||
.def("envelope",&layer::envelope,
|
||||
"Return the geographic envelope/bounding box."
|
||||
"\n"
|
||||
"Determined based on the layer datasource.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> from mapnik import Layer\n"
|
||||
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
|
||||
">>> lyr.envelope()\n"
|
||||
"box2d(-1.0,-1.0,0.0,0.0) # default until a datasource is loaded\n"
|
||||
)
|
||||
|
||||
.def("visible", &layer::visible,
|
||||
"Return True if this layer's data is active and visible at a given scale.\n"
|
||||
"\n"
|
||||
"Otherwise returns False.\n"
|
||||
"Accepts a scale value as an integer or float input.\n"
|
||||
"Will return False if:\n"
|
||||
"\tscale >= minzoom - 1e-6\n"
|
||||
"\tor:\n"
|
||||
"\tscale < maxzoom + 1e-6\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> from mapnik import Layer\n"
|
||||
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
|
||||
">>> lyr.visible(1.0/1000000)\n"
|
||||
"True\n"
|
||||
">>> lyr.active = False\n"
|
||||
">>> lyr.visible(1.0/1000000)\n"
|
||||
"False\n"
|
||||
)
|
||||
|
||||
.add_property("active",
|
||||
&layer::active,
|
||||
&layer::set_active,
|
||||
"Get/Set whether this layer is active and will be rendered (same as status property).\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> from mapnik import Layer\n"
|
||||
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
|
||||
">>> lyr.active\n"
|
||||
"True # Active by default\n"
|
||||
">>> lyr.active = False # set False to disable layer rendering\n"
|
||||
">>> lyr.active\n"
|
||||
"False\n"
|
||||
)
|
||||
|
||||
.add_property("status",
|
||||
&layer::active,
|
||||
&layer::set_active,
|
||||
"Get/Set whether this layer is active and will be rendered.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> from mapnik import Layer\n"
|
||||
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
|
||||
">>> lyr.status\n"
|
||||
"True # Active by default\n"
|
||||
">>> lyr.status = False # set False to disable layer rendering\n"
|
||||
">>> lyr.status\n"
|
||||
"False\n"
|
||||
)
|
||||
|
||||
.add_property("clear_label_cache",
|
||||
&layer::clear_label_cache,
|
||||
&layer::set_clear_label_cache,
|
||||
"Get/Set whether to clear the label collision detector cache for this layer during rendering\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> lyr.clear_label_cache\n"
|
||||
"False # False by default, meaning label positions from other layers will impact placement \n"
|
||||
">>> lyr.clear_label_cache = True # set to True to clear the label collision detector cache\n"
|
||||
)
|
||||
|
||||
.add_property("cache_features",
|
||||
&layer::cache_features,
|
||||
&layer::set_cache_features,
|
||||
"Get/Set whether features should be cached during rendering if used between multiple styles\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> lyr.cache_features\n"
|
||||
"False # False by default\n"
|
||||
">>> lyr.cache_features = True # set to True to enable feature caching\n"
|
||||
)
|
||||
|
||||
.add_property("datasource",
|
||||
&layer::datasource,
|
||||
&layer::set_datasource,
|
||||
"The datasource attached to this layer.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> from mapnik import Layer, Datasource\n"
|
||||
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
|
||||
">>> lyr.datasource = Datasource(type='shape',file='world_borders')\n"
|
||||
">>> lyr.datasource\n"
|
||||
"<mapnik.Datasource object at 0x65470>\n"
|
||||
)
|
||||
|
||||
.add_property("buffer_size",
|
||||
&get_buffer_size,
|
||||
&set_buffer_size,
|
||||
"Get/Set the size of buffer around layer in pixels.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> print(l.buffer_size)\n"
|
||||
"None # None by default\n"
|
||||
">>> l.buffer_size = 2\n"
|
||||
">>> l.buffer_size\n"
|
||||
"2\n"
|
||||
)
|
||||
|
||||
.add_property("maximum_extent",make_function
|
||||
(&layer::maximum_extent,return_value_policy<copy_const_reference>()),
|
||||
&set_maximum_extent,
|
||||
"The maximum extent of the map.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.maximum_extent = Box2d(-180,-90,180,90)\n"
|
||||
)
|
||||
|
||||
.add_property("maxzoom",
|
||||
&layer::max_zoom,
|
||||
&layer::set_max_zoom,
|
||||
"Get/Set the maximum zoom lever of the layer.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> from mapnik import Layer\n"
|
||||
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
|
||||
">>> lyr.maxzoom\n"
|
||||
"1.7976931348623157e+308 # default is the numerical maximum\n"
|
||||
">>> lyr.maxzoom = 1.0/1000000\n"
|
||||
">>> lyr.maxzoom\n"
|
||||
"9.9999999999999995e-07\n"
|
||||
)
|
||||
|
||||
.add_property("minzoom",
|
||||
&layer::min_zoom,
|
||||
&layer::set_min_zoom,
|
||||
"Get/Set the minimum zoom lever of the layer.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> from mapnik import Layer\n"
|
||||
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
|
||||
">>> lyr.minzoom # default is 0\n"
|
||||
"0.0\n"
|
||||
">>> lyr.minzoom = 1.0/1000000\n"
|
||||
">>> lyr.minzoom\n"
|
||||
"9.9999999999999995e-07\n"
|
||||
)
|
||||
|
||||
.add_property("name",
|
||||
make_function(&layer::name, return_value_policy<copy_const_reference>()),
|
||||
&layer::set_name,
|
||||
"Get/Set the name of the layer.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> from mapnik import Layer\n"
|
||||
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
|
||||
">>> lyr.name\n"
|
||||
"'My Layer'\n"
|
||||
">>> lyr.name = 'New Name'\n"
|
||||
">>> lyr.name\n"
|
||||
"'New Name'\n"
|
||||
)
|
||||
|
||||
.add_property("queryable",
|
||||
&layer::queryable,
|
||||
&layer::set_queryable,
|
||||
"Get/Set whether this layer is queryable.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> from mapnik import layer\n"
|
||||
">>> lyr = layer('My layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
|
||||
">>> lyr.queryable\n"
|
||||
"False # Not queryable by default\n"
|
||||
">>> lyr.queryable = True\n"
|
||||
">>> lyr.queryable\n"
|
||||
"True\n"
|
||||
)
|
||||
|
||||
.add_property("srs",
|
||||
make_function(&layer::srs,return_value_policy<copy_const_reference>()),
|
||||
&layer::set_srs,
|
||||
"Get/Set the SRS of the layer.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> from mapnik import layer\n"
|
||||
">>> lyr = layer('My layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
|
||||
">>> lyr.srs\n"
|
||||
"'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' # The default srs if not initialized with custom srs\n"
|
||||
">>> # set to google mercator with Proj.4 literal\n"
|
||||
"... \n"
|
||||
">>> lyr.srs = '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over'\n"
|
||||
)
|
||||
|
||||
.add_property("group_by",
|
||||
make_function(&layer::group_by,return_value_policy<copy_const_reference>()),
|
||||
&layer::set_group_by,
|
||||
"Get/Set the optional layer group name.\n"
|
||||
"\n"
|
||||
"More details at https://github.com/mapnik/mapnik/wiki/Grouped-rendering:\n"
|
||||
)
|
||||
|
||||
.add_property("styles",
|
||||
make_function(_styles_,return_value_policy<reference_existing_object>()),
|
||||
"The styles list attached to this layer.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> from mapnik import layer\n"
|
||||
">>> lyr = layer('My layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
|
||||
">>> lyr.styles\n"
|
||||
"<mapnik._mapnik.Names object at 0x6d3e8>\n"
|
||||
">>> len(lyr.styles)\n"
|
||||
"0\n # no styles until you append them\n"
|
||||
"lyr.styles.append('My Style') # mapnik uses named styles for flexibility\n"
|
||||
">>> len(lyr.styles)\n"
|
||||
"1\n"
|
||||
">>> lyr.styles[0]\n"
|
||||
"'My Style'\n"
|
||||
)
|
||||
|
||||
;
|
||||
}
|
78
bindings/python/mapnik_line_pattern_symbolizer.cpp
Normal file
78
bindings/python/mapnik_line_pattern_symbolizer.cpp
Normal file
|
@ -0,0 +1,78 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <boost/python.hpp>
|
||||
|
||||
#include <mapnik/line_pattern_symbolizer.hpp>
|
||||
#include <mapnik/parse_path.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include "mapnik_svg.hpp"
|
||||
|
||||
using mapnik::line_pattern_symbolizer;
|
||||
using mapnik::path_processor_type;
|
||||
using mapnik::path_expression_ptr;
|
||||
using mapnik::guess_type;
|
||||
using mapnik::parse_path;
|
||||
|
||||
|
||||
namespace {
|
||||
using namespace boost::python;
|
||||
|
||||
std::string get_filename(line_pattern_symbolizer const& t)
|
||||
{
|
||||
return path_processor_type::to_string(*t.get_filename());
|
||||
}
|
||||
|
||||
void set_filename(line_pattern_symbolizer & t, std::string const& file_expr)
|
||||
{
|
||||
t.set_filename(parse_path(file_expr));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void export_line_pattern_symbolizer()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
||||
class_<line_pattern_symbolizer>("LinePatternSymbolizer",
|
||||
init<path_expression_ptr>
|
||||
("<image file expression>"))
|
||||
.add_property("transform",
|
||||
mapnik::get_svg_transform<line_pattern_symbolizer>,
|
||||
mapnik::set_svg_transform<line_pattern_symbolizer>)
|
||||
.add_property("filename",
|
||||
&get_filename,
|
||||
&set_filename)
|
||||
.add_property("comp_op",
|
||||
&line_pattern_symbolizer::comp_op,
|
||||
&line_pattern_symbolizer::set_comp_op,
|
||||
"Set/get the comp-op")
|
||||
.add_property("clip",
|
||||
&line_pattern_symbolizer::clip,
|
||||
&line_pattern_symbolizer::set_clip,
|
||||
"Set/get the line pattern geometry's clipping status")
|
||||
.add_property("smooth",
|
||||
&line_pattern_symbolizer::smooth,
|
||||
&line_pattern_symbolizer::set_smooth,
|
||||
"smooth value (0..1.0)")
|
||||
;
|
||||
}
|
72
bindings/python/mapnik_line_symbolizer.cpp
Normal file
72
bindings/python/mapnik_line_symbolizer.cpp
Normal file
|
@ -0,0 +1,72 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#include "mapnik_enumeration.hpp"
|
||||
#include <mapnik/line_symbolizer.hpp>
|
||||
|
||||
using namespace mapnik;
|
||||
using mapnik::line_symbolizer;
|
||||
using mapnik::stroke;
|
||||
using mapnik::color;
|
||||
|
||||
void export_line_symbolizer()
|
||||
{
|
||||
using namespace boost::python;
|
||||
enumeration_<line_rasterizer_e>("line_rasterizer")
|
||||
.value("FULL",RASTERIZER_FULL)
|
||||
.value("FAST",RASTERIZER_FAST)
|
||||
;
|
||||
class_<line_symbolizer>("LineSymbolizer",
|
||||
init<>("Default LineSymbolizer - 1px solid black"))
|
||||
.def(init<stroke const&>("TODO"))
|
||||
.def(init<color const& ,float>())
|
||||
.add_property("rasterizer",
|
||||
&line_symbolizer::get_rasterizer,
|
||||
&line_symbolizer::set_rasterizer,
|
||||
"Set/get the rasterization method of the line of the point")
|
||||
.add_property("stroke",make_function
|
||||
(&line_symbolizer::get_stroke,
|
||||
return_value_policy<reference_existing_object>()),
|
||||
&line_symbolizer::set_stroke)
|
||||
.add_property("simplify_tolerance",
|
||||
&line_symbolizer::simplify_tolerance,
|
||||
&line_symbolizer::set_simplify_tolerance,
|
||||
"simplification tolerance measure")
|
||||
.add_property("offset",
|
||||
&line_symbolizer::offset,
|
||||
&line_symbolizer::set_offset,
|
||||
"offset value")
|
||||
.add_property("comp_op",
|
||||
&line_symbolizer::comp_op,
|
||||
&line_symbolizer::set_comp_op,
|
||||
"Set/get the comp-op")
|
||||
.add_property("clip",
|
||||
&line_symbolizer::clip,
|
||||
&line_symbolizer::set_clip,
|
||||
"Set/get the line geometry's clipping status")
|
||||
.add_property("smooth",
|
||||
&line_symbolizer::smooth,
|
||||
&line_symbolizer::set_smooth,
|
||||
"smooth value (0..1.0)")
|
||||
;
|
||||
}
|
73
bindings/python/mapnik_logger.cpp
Normal file
73
bindings/python/mapnik_logger.cpp
Normal file
|
@ -0,0 +1,73 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
#include <mapnik/debug.hpp>
|
||||
#include <mapnik/utils.hpp>
|
||||
#include "mapnik_enumeration.hpp"
|
||||
|
||||
void export_logger()
|
||||
{
|
||||
using mapnik::logger;
|
||||
using mapnik::singleton;
|
||||
using mapnik::CreateStatic;
|
||||
using namespace boost::python;
|
||||
|
||||
class_<singleton<logger,CreateStatic>,boost::noncopyable>("Singleton",no_init)
|
||||
.def("instance",&singleton<logger,CreateStatic>::instance,
|
||||
return_value_policy<reference_existing_object>())
|
||||
.staticmethod("instance")
|
||||
;
|
||||
|
||||
enum_<mapnik::logger::severity_type>("severity_type")
|
||||
.value("Debug", logger::debug)
|
||||
.value("Warn", logger::warn)
|
||||
.value("Error", logger::error)
|
||||
.value("None", logger::none)
|
||||
;
|
||||
|
||||
class_<logger,bases<singleton<logger,CreateStatic> >,
|
||||
boost::noncopyable>("logger",no_init)
|
||||
.def("get_severity", &logger::get_severity)
|
||||
.def("set_severity", &logger::set_severity)
|
||||
.def("get_object_severity", &logger::get_object_severity)
|
||||
.def("set_object_severity", &logger::set_object_severity)
|
||||
.def("clear_object_severity", &logger::clear_object_severity)
|
||||
.def("get_format", &logger::get_format)
|
||||
.def("set_format", &logger::set_format)
|
||||
.def("str", &logger::str)
|
||||
.def("use_file", &logger::use_file)
|
||||
.def("use_console", &logger::use_console)
|
||||
.staticmethod("get_severity")
|
||||
.staticmethod("set_severity")
|
||||
.staticmethod("get_object_severity")
|
||||
.staticmethod("set_object_severity")
|
||||
.staticmethod("clear_object_severity")
|
||||
.staticmethod("get_format")
|
||||
.staticmethod("set_format")
|
||||
.staticmethod("str")
|
||||
.staticmethod("use_file")
|
||||
.staticmethod("use_console")
|
||||
;
|
||||
}
|
490
bindings/python/mapnik_map.cpp
Normal file
490
bindings/python/mapnik_map.cpp
Normal file
|
@ -0,0 +1,490 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/python/detail/api_placeholder.hpp>
|
||||
#include <boost/python/suite/indexing/vector_indexing_suite.hpp>
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/rule.hpp>
|
||||
#include <mapnik/layer.hpp>
|
||||
#include <mapnik/map.hpp>
|
||||
#include <mapnik/projection.hpp>
|
||||
#include <mapnik/ctrans.hpp>
|
||||
#include <mapnik/feature_type_style.hpp>
|
||||
//#include <mapnik/util/deepcopy.hpp>
|
||||
#include "mapnik_enumeration.hpp"
|
||||
|
||||
using mapnik::color;
|
||||
using mapnik::coord;
|
||||
using mapnik::box2d;
|
||||
using mapnik::layer;
|
||||
using mapnik::Map;
|
||||
|
||||
std::vector<layer>& (Map::*layers_nonconst)() = &Map::layers;
|
||||
std::vector<layer> const& (Map::*layers_const)() const = &Map::layers;
|
||||
mapnik::parameters& (Map::*params_nonconst)() = &Map::get_extra_parameters;
|
||||
|
||||
mapnik::feature_type_style find_style(mapnik::Map const& m, std::string const& name)
|
||||
{
|
||||
boost::optional<mapnik::feature_type_style const&> style = m.find_style(name);
|
||||
if (!style)
|
||||
{
|
||||
PyErr_SetString(PyExc_KeyError, "Invalid style name");
|
||||
boost::python::throw_error_already_set();
|
||||
}
|
||||
return *style;
|
||||
}
|
||||
|
||||
mapnik::font_set find_fontset(mapnik::Map const& m, std::string const& name)
|
||||
{
|
||||
boost::optional<mapnik::font_set const&> fontset = m.find_fontset(name);
|
||||
if (!fontset)
|
||||
{
|
||||
PyErr_SetString(PyExc_KeyError, "Invalid font_set name");
|
||||
boost::python::throw_error_already_set();
|
||||
}
|
||||
return *fontset;
|
||||
}
|
||||
|
||||
// TODO - we likely should allow indexing by negative number from python
|
||||
// for now, protect against negative values and kindly throw
|
||||
mapnik::featureset_ptr query_point(mapnik::Map const& m, int index, double x, double y)
|
||||
{
|
||||
if (index < 0){
|
||||
PyErr_SetString(PyExc_IndexError, "Please provide a layer index >= 0");
|
||||
boost::python::throw_error_already_set();
|
||||
}
|
||||
unsigned idx = index;
|
||||
return m.query_point(idx, x, y);
|
||||
}
|
||||
|
||||
mapnik::featureset_ptr query_map_point(mapnik::Map const& m, int index, double x, double y)
|
||||
{
|
||||
if (index < 0){
|
||||
PyErr_SetString(PyExc_IndexError, "Please provide a layer index >= 0");
|
||||
boost::python::throw_error_already_set();
|
||||
}
|
||||
unsigned idx = index;
|
||||
return m.query_map_point(idx, x, y);
|
||||
}
|
||||
|
||||
// deepcopy
|
||||
/*
|
||||
mapnik::Map map_deepcopy(mapnik::Map & m, boost::python::dict memo)
|
||||
{
|
||||
// FIXME: ignore memo for now
|
||||
mapnik::Map result;
|
||||
mapnik::util::deepcopy(m, result);
|
||||
return result;
|
||||
}
|
||||
*/
|
||||
|
||||
void set_maximum_extent(mapnik::Map & m, boost::optional<mapnik::box2d<double> > const& box)
|
||||
{
|
||||
if (box)
|
||||
{
|
||||
m.set_maximum_extent(*box);
|
||||
}
|
||||
else
|
||||
{
|
||||
m.reset_maximum_extent();
|
||||
}
|
||||
}
|
||||
|
||||
void export_map()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
||||
// aspect ratio fix modes
|
||||
mapnik::enumeration_<mapnik::aspect_fix_mode_e>("aspect_fix_mode")
|
||||
.value("GROW_BBOX", mapnik::Map::GROW_BBOX)
|
||||
.value("GROW_CANVAS",mapnik::Map::GROW_CANVAS)
|
||||
.value("SHRINK_BBOX",mapnik::Map::SHRINK_BBOX)
|
||||
.value("SHRINK_CANVAS",mapnik::Map::SHRINK_CANVAS)
|
||||
.value("ADJUST_BBOX_WIDTH",mapnik::Map::ADJUST_BBOX_WIDTH)
|
||||
.value("ADJUST_BBOX_HEIGHT",mapnik::Map::ADJUST_BBOX_HEIGHT)
|
||||
.value("ADJUST_CANVAS_WIDTH",mapnik::Map::ADJUST_CANVAS_WIDTH)
|
||||
.value("ADJUST_CANVAS_HEIGHT", mapnik::Map::ADJUST_CANVAS_HEIGHT)
|
||||
;
|
||||
|
||||
class_<std::vector<layer> >("Layers")
|
||||
.def(vector_indexing_suite<std::vector<layer> >())
|
||||
;
|
||||
|
||||
class_<Map>("Map","The map object.",init<int,int,optional<std::string const&> >(
|
||||
( arg("width"),arg("height"),arg("srs") ),
|
||||
"Create a Map with a width and height as integers and, optionally,\n"
|
||||
"an srs string either with a Proj.4 epsg code ('+init=epsg:<code>')\n"
|
||||
"or with a Proj.4 literal ('+proj=<literal>').\n"
|
||||
"If no srs is specified the map will default to '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> from mapnik import Map\n"
|
||||
">>> m = Map(600,400)\n"
|
||||
">>> m\n"
|
||||
"<mapnik._mapnik.Map object at 0x6a240>\n"
|
||||
">>> m.srs\n"
|
||||
"'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n"
|
||||
))
|
||||
|
||||
.def("append_style",&Map::insert_style,
|
||||
(arg("style_name"),arg("style_object")),
|
||||
"Insert a Mapnik Style onto the map by appending it.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> sty\n"
|
||||
"<mapnik._mapnik.Style object at 0x6a330>\n"
|
||||
">>> m.append_style('Style Name', sty)\n"
|
||||
"True # style object added to map by name\n"
|
||||
">>> m.append_style('Style Name', sty)\n"
|
||||
"False # you can only append styles with unique names\n"
|
||||
)
|
||||
|
||||
.def("append_fontset",&Map::insert_fontset,
|
||||
(arg("fontset")),
|
||||
"Add a FontSet to the map."
|
||||
)
|
||||
|
||||
.def("buffered_envelope",
|
||||
&Map::get_buffered_extent,
|
||||
"Get the Box2d() of the Map given\n"
|
||||
"the Map.buffer_size.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m = Map(600,400)\n"
|
||||
">>> m.envelope()\n"
|
||||
"Box2d(-1.0,-1.0,0.0,0.0)\n"
|
||||
">>> m.buffered_envelope()\n"
|
||||
"Box2d(-1.0,-1.0,0.0,0.0)\n"
|
||||
">>> m.buffer_size = 1\n"
|
||||
">>> m.buffered_envelope()\n"
|
||||
"Box2d(-1.02222222222,-1.02222222222,0.0222222222222,0.0222222222222)\n"
|
||||
)
|
||||
|
||||
.def("envelope",
|
||||
make_function(&Map::get_current_extent,
|
||||
return_value_policy<copy_const_reference>()),
|
||||
"Return the Map Box2d object\n"
|
||||
"and print the string representation\n"
|
||||
"of the current extent of the map.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.envelope()\n"
|
||||
"Box2d(-0.185833333333,-0.96,0.189166666667,-0.71)\n"
|
||||
">>> dir(m.envelope())\n"
|
||||
"...'center', 'contains', 'expand_to_include', 'forward',\n"
|
||||
"...'height', 'intersect', 'intersects', 'inverse', 'maxx',\n"
|
||||
"...'maxy', 'minx', 'miny', 'width'\n"
|
||||
)
|
||||
|
||||
.def("find_fontset",find_fontset,
|
||||
(arg("name")),
|
||||
"Find a fontset by name."
|
||||
)
|
||||
|
||||
.def("find_style",
|
||||
find_style,
|
||||
(arg("name")),
|
||||
"Query the Map for a style by name and return\n"
|
||||
"a style object if found or raise KeyError\n"
|
||||
"style if not found.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.find_style('Style Name')\n"
|
||||
"<mapnik._mapnik.Style object at 0x654f0>\n"
|
||||
)
|
||||
|
||||
.def("pan",&Map::pan,
|
||||
(arg("x"),arg("y")),
|
||||
"Set the Map center at a given x,y location\n"
|
||||
"as integers in the coordinates of the pixmap or map surface.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m = Map(600,400)\n"
|
||||
">>> m.envelope().center()\n"
|
||||
"Coord(-0.5,-0.5) # default Map center\n"
|
||||
">>> m.pan(-1,-1)\n"
|
||||
">>> m.envelope().center()\n"
|
||||
"Coord(0.00166666666667,-0.835)\n"
|
||||
)
|
||||
|
||||
.def("pan_and_zoom",&Map::pan_and_zoom,
|
||||
(arg("x"),arg("y"),arg("factor")),
|
||||
"Set the Map center at a given x,y location\n"
|
||||
"and zoom factor as a float.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m = Map(600,400)\n"
|
||||
">>> m.envelope().center()\n"
|
||||
"Coord(-0.5,-0.5) # default Map center\n"
|
||||
">>> m.scale()\n"
|
||||
"-0.0016666666666666668\n"
|
||||
">>> m.pan_and_zoom(-1,-1,0.25)\n"
|
||||
">>> m.scale()\n"
|
||||
"0.00062500000000000001\n"
|
||||
)
|
||||
|
||||
.def("query_map_point",query_map_point,
|
||||
(arg("layer_idx"),arg("pixel_x"),arg("pixel_y")),
|
||||
"Query a Map Layer (by layer index) for features \n"
|
||||
"intersecting the given x,y location in the pixel\n"
|
||||
"coordinates of the rendered map image.\n"
|
||||
"Layer index starts at 0 (first layer in map).\n"
|
||||
"Will return a Mapnik Featureset if successful\n"
|
||||
"otherwise will return None.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> featureset = m.query_map_point(0,200,200)\n"
|
||||
">>> featureset\n"
|
||||
"<mapnik._mapnik.Featureset object at 0x23b0b0>\n"
|
||||
">>> featureset.features\n"
|
||||
">>> [<mapnik.Feature object at 0x3995630>]\n"
|
||||
)
|
||||
|
||||
.def("query_point",query_point,
|
||||
(arg("layer idx"),arg("x"),arg("y")),
|
||||
"Query a Map Layer (by layer index) for features \n"
|
||||
"intersecting the given x,y location in the coordinates\n"
|
||||
"of map projection.\n"
|
||||
"Layer index starts at 0 (first layer in map).\n"
|
||||
"Will return a Mapnik Featureset if successful\n"
|
||||
"otherwise will return None.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> featureset = m.query_point(0,-122,48)\n"
|
||||
">>> featureset\n"
|
||||
"<mapnik._mapnik.Featureset object at 0x23b0b0>\n"
|
||||
">>> featureset.features\n"
|
||||
">>> [<mapnik.Feature object at 0x3995630>]\n"
|
||||
)
|
||||
|
||||
.def("remove_all",&Map::remove_all,
|
||||
"Remove all Mapnik Styles and layers from the Map.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.remove_all()\n"
|
||||
)
|
||||
|
||||
.def("remove_style",&Map::remove_style,
|
||||
(arg("style_name")),
|
||||
"Remove a Mapnik Style from the map.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.remove_style('Style Name')\n"
|
||||
)
|
||||
|
||||
.def("resize",&Map::resize,
|
||||
(arg("width"),arg("height")),
|
||||
"Resize a Mapnik Map.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.resize(64,64)\n"
|
||||
)
|
||||
|
||||
.def("scale", &Map::scale,
|
||||
"Return the Map Scale.\n"
|
||||
"Usage:\n"
|
||||
"\n"
|
||||
">>> m.scale()\n"
|
||||
)
|
||||
|
||||
.def("scale_denominator", &Map::scale_denominator,
|
||||
"Return the Map Scale Denominator.\n"
|
||||
"Usage:\n"
|
||||
"\n"
|
||||
">>> m.scale_denominator()\n"
|
||||
)
|
||||
|
||||
.def("view_transform",&Map::view_transform,
|
||||
"Return the map ViewTransform object\n"
|
||||
"which is used internally to convert between\n"
|
||||
"geographic coordinates and screen coordinates.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.view_transform()\n"
|
||||
)
|
||||
|
||||
.def("zoom",&Map::zoom,
|
||||
(arg("factor")),
|
||||
"Zoom in or out by a given factor.\n"
|
||||
"Positive number zooms in, negative number\n"
|
||||
"zooms out.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
"\n"
|
||||
">>> m.zoom(0.25)\n"
|
||||
)
|
||||
|
||||
.def("zoom_all",&Map::zoom_all,
|
||||
"Set the geographical extent of the map\n"
|
||||
"to the combined extents of all active layers.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.zoom_all()\n"
|
||||
)
|
||||
|
||||
.def("zoom_to_box",&Map::zoom_to_box,
|
||||
(arg("Boxd2")),
|
||||
"Set the geographical extent of the map\n"
|
||||
"by specifying a Mapnik Box2d.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> extext = Box2d(-180.0, -90.0, 180.0, 90.0)\n"
|
||||
">>> m.zoom_to_box(extent)\n"
|
||||
)
|
||||
|
||||
//.def("__deepcopy__",&map_deepcopy)
|
||||
.add_property("parameters",make_function(params_nonconst,return_value_policy<reference_existing_object>()),"TODO")
|
||||
|
||||
.add_property("aspect_fix_mode",
|
||||
&Map::get_aspect_fix_mode,
|
||||
&Map::set_aspect_fix_mode,
|
||||
// TODO - how to add arg info to properties?
|
||||
//(arg("aspect_fix_mode")),
|
||||
"Get/Set aspect fix mode.\n"
|
||||
"Usage:\n"
|
||||
"\n"
|
||||
">>> m.aspect_fix_mode = aspect_fix_mode.GROW_BBOX\n"
|
||||
)
|
||||
|
||||
.add_property("background",make_function
|
||||
(&Map::background,return_value_policy<copy_const_reference>()),
|
||||
&Map::set_background,
|
||||
"The background color of the map (same as background_color property).\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.background = Color('steelblue')\n"
|
||||
)
|
||||
|
||||
.add_property("background_color",make_function
|
||||
(&Map::background,return_value_policy<copy_const_reference>()),
|
||||
&Map::set_background,
|
||||
"The background color of the map.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.background_color = Color('steelblue')\n"
|
||||
)
|
||||
|
||||
.add_property("background_image",make_function
|
||||
(&Map::background_image,return_value_policy<copy_const_reference>()),
|
||||
&Map::set_background_image,
|
||||
"The optional background image of the map.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.background_image = '/path/to/image.png'\n"
|
||||
)
|
||||
|
||||
.add_property("base",
|
||||
make_function(&Map::base_path,return_value_policy<copy_const_reference>()),
|
||||
&Map::set_base_path,
|
||||
"The base path of the map where any files using relative \n"
|
||||
"paths will be interpreted as relative to.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.base_path = '.'\n"
|
||||
)
|
||||
|
||||
.add_property("buffer_size",
|
||||
&Map::buffer_size,
|
||||
&Map::set_buffer_size,
|
||||
"Get/Set the size of buffer around map in pixels.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.buffer_size\n"
|
||||
"0 # zero by default\n"
|
||||
">>> m.buffer_size = 2\n"
|
||||
">>> m.buffer_size\n"
|
||||
"2\n"
|
||||
)
|
||||
|
||||
.add_property("height",
|
||||
&Map::height,
|
||||
&Map::set_height,
|
||||
"Get/Set the height of the map in pixels.\n"
|
||||
"Minimum settable size is 16 pixels.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.height\n"
|
||||
"400\n"
|
||||
">>> m.height = 600\n"
|
||||
">>> m.height\n"
|
||||
"600\n"
|
||||
)
|
||||
|
||||
.add_property("layers",make_function
|
||||
(layers_nonconst,return_value_policy<reference_existing_object>()),
|
||||
"The list of map layers.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.layers\n"
|
||||
"<mapnik._mapnik.layers object at 0x6d458>"
|
||||
">>> m.layers[0]\n"
|
||||
"<mapnik._mapnik.layer object at 0x5fe130>\n"
|
||||
)
|
||||
|
||||
.add_property("maximum_extent",make_function
|
||||
(&Map::maximum_extent,return_value_policy<copy_const_reference>()),
|
||||
&set_maximum_extent,
|
||||
"The maximum extent of the map.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.maximum_extent = Box2d(-180,-90,180,90)\n"
|
||||
)
|
||||
|
||||
.add_property("srs",
|
||||
make_function(&Map::srs,return_value_policy<copy_const_reference>()),
|
||||
&Map::set_srs,
|
||||
"Spatial reference in Proj.4 format.\n"
|
||||
"Either an epsg code or proj literal.\n"
|
||||
"For example, a proj literal:\n"
|
||||
"\t'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n"
|
||||
"and a proj epsg code:\n"
|
||||
"\t'+init=epsg:4326'\n"
|
||||
"\n"
|
||||
"Note: using epsg codes requires the installation of\n"
|
||||
"the Proj.4 'epsg' data file normally found in '/usr/local/share/proj'\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.srs\n"
|
||||
"'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' # The default srs if not initialized with custom srs\n"
|
||||
">>> # set to google mercator with Proj.4 literal\n"
|
||||
"... \n"
|
||||
">>> m.srs = '+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs +over'\n"
|
||||
)
|
||||
|
||||
.add_property("width",
|
||||
&Map::width,
|
||||
&Map::set_width,
|
||||
"Get/Set the width of the map in pixels.\n"
|
||||
"Minimum settable size is 16 pixels.\n"
|
||||
"\n"
|
||||
"Usage:\n"
|
||||
">>> m.width\n"
|
||||
"600\n"
|
||||
">>> m.width = 800\n"
|
||||
">>> m.width\n"
|
||||
"800\n"
|
||||
)
|
||||
;
|
||||
}
|
170
bindings/python/mapnik_markers_symbolizer.cpp
Normal file
170
bindings/python/mapnik_markers_symbolizer.cpp
Normal file
|
@ -0,0 +1,170 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2010 Artem Pavlenko
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <boost/python.hpp>
|
||||
|
||||
#include <mapnik/graphics.hpp>
|
||||
#include <mapnik/expression_node.hpp>
|
||||
#include <mapnik/value_error.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include <mapnik/markers_symbolizer.hpp>
|
||||
#include <mapnik/parse_path.hpp>
|
||||
#include "mapnik_svg.hpp"
|
||||
#include "mapnik_enumeration.hpp"
|
||||
#include <mapnik/marker_cache.hpp> // for known_svg_prefix_
|
||||
|
||||
using mapnik::markers_symbolizer;
|
||||
using mapnik::symbolizer_with_image;
|
||||
using mapnik::path_processor_type;
|
||||
using mapnik::parse_path;
|
||||
|
||||
namespace {
|
||||
using namespace boost::python;
|
||||
|
||||
std::string get_filename(mapnik::markers_symbolizer const& symbolizer)
|
||||
{
|
||||
return path_processor_type::to_string(*symbolizer.get_filename());
|
||||
}
|
||||
|
||||
void set_filename(mapnik::markers_symbolizer & symbolizer, std::string const& file_expr)
|
||||
{
|
||||
symbolizer.set_filename(parse_path(file_expr));
|
||||
}
|
||||
|
||||
void set_marker_type(mapnik::markers_symbolizer & symbolizer, std::string const& marker_type)
|
||||
{
|
||||
std::string filename;
|
||||
if (marker_type == "ellipse")
|
||||
{
|
||||
filename = mapnik::marker_cache::instance().known_svg_prefix_ + "ellipse";
|
||||
}
|
||||
else if (marker_type == "arrow")
|
||||
{
|
||||
filename = mapnik::marker_cache::instance().known_svg_prefix_ + "arrow";
|
||||
}
|
||||
else
|
||||
{
|
||||
throw mapnik::value_error("Unknown marker-type: '" + marker_type + "'");
|
||||
}
|
||||
symbolizer.set_filename(parse_path(filename));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// https://github.com/mapnik/mapnik/issues/1367
|
||||
PyObject* get_fill_opacity_impl(markers_symbolizer & sym)
|
||||
{
|
||||
boost::optional<float> fill_opacity = sym.get_fill_opacity();
|
||||
if (fill_opacity)
|
||||
return ::PyFloat_FromDouble(*fill_opacity);
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
void export_markers_symbolizer()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
||||
mapnik::enumeration_<mapnik::marker_placement_e>("marker_placement")
|
||||
.value("POINT_PLACEMENT",mapnik::MARKER_POINT_PLACEMENT)
|
||||
.value("INTERIOR_PLACEMENT",mapnik::MARKER_INTERIOR_PLACEMENT)
|
||||
.value("LINE_PLACEMENT",mapnik::MARKER_LINE_PLACEMENT)
|
||||
;
|
||||
|
||||
mapnik::enumeration_<mapnik::marker_multi_policy_e>("marker_multi_policy")
|
||||
.value("EACH",mapnik::MARKER_EACH_MULTI)
|
||||
.value("WHOLE",mapnik::MARKER_WHOLE_MULTI)
|
||||
.value("LARGEST",mapnik::MARKER_LARGEST_MULTI)
|
||||
;
|
||||
|
||||
class_<markers_symbolizer>("MarkersSymbolizer",
|
||||
init<>("Default Markers Symbolizer - circle"))
|
||||
.def (init<mapnik::path_expression_ptr>("<path expression ptr>"))
|
||||
.add_property("filename",
|
||||
&get_filename,
|
||||
&set_filename)
|
||||
.add_property("marker_type",
|
||||
&get_filename,
|
||||
&set_marker_type)
|
||||
.add_property("allow_overlap",
|
||||
&markers_symbolizer::get_allow_overlap,
|
||||
&markers_symbolizer::set_allow_overlap)
|
||||
.add_property("spacing",
|
||||
&markers_symbolizer::get_spacing,
|
||||
&markers_symbolizer::set_spacing)
|
||||
.add_property("max_error",
|
||||
&markers_symbolizer::get_max_error,
|
||||
&markers_symbolizer::set_max_error)
|
||||
.add_property("opacity",
|
||||
&markers_symbolizer::get_opacity,
|
||||
&markers_symbolizer::set_opacity,
|
||||
"Set/get the overall opacity")
|
||||
.add_property("fill_opacity",
|
||||
&get_fill_opacity_impl,
|
||||
&markers_symbolizer::set_fill_opacity,
|
||||
"Set/get the fill opacity")
|
||||
.add_property("ignore_placement",
|
||||
&markers_symbolizer::get_ignore_placement,
|
||||
&markers_symbolizer::set_ignore_placement)
|
||||
.add_property("transform",
|
||||
&mapnik::get_svg_transform<markers_symbolizer>,
|
||||
&mapnik::set_svg_transform<markers_symbolizer>)
|
||||
.add_property("width",
|
||||
make_function(&markers_symbolizer::get_width,
|
||||
return_value_policy<copy_const_reference>()),
|
||||
&markers_symbolizer::set_width,
|
||||
"Set/get the marker width")
|
||||
.add_property("height",
|
||||
make_function(&markers_symbolizer::get_height,
|
||||
return_value_policy<copy_const_reference>()),
|
||||
&markers_symbolizer::set_height,
|
||||
"Set/get the marker height")
|
||||
.add_property("fill",
|
||||
&markers_symbolizer::get_fill,
|
||||
&markers_symbolizer::set_fill,
|
||||
"Set/get the marker fill color")
|
||||
.add_property("stroke",
|
||||
&markers_symbolizer::get_stroke,
|
||||
&markers_symbolizer::set_stroke,
|
||||
"Set/get the marker stroke (outline)")
|
||||
.add_property("placement",
|
||||
&markers_symbolizer::get_marker_placement,
|
||||
&markers_symbolizer::set_marker_placement,
|
||||
"Set/get the marker placement")
|
||||
.add_property("multi_policy",
|
||||
&markers_symbolizer::get_marker_multi_policy,
|
||||
&markers_symbolizer::set_marker_multi_policy,
|
||||
"Set/get the marker multi geometry rendering policy")
|
||||
.add_property("comp_op",
|
||||
&markers_symbolizer::comp_op,
|
||||
&markers_symbolizer::set_comp_op,
|
||||
"Set/get the marker comp-op")
|
||||
.add_property("clip",
|
||||
&markers_symbolizer::clip,
|
||||
&markers_symbolizer::set_clip,
|
||||
"Set/get the marker geometry's clipping status")
|
||||
.add_property("smooth",
|
||||
&markers_symbolizer::smooth,
|
||||
&markers_symbolizer::set_smooth,
|
||||
"Set/get the marker geometry's smooth value")
|
||||
;
|
||||
}
|
59
bindings/python/mapnik_palette.cpp
Normal file
59
bindings/python/mapnik_palette.cpp
Normal file
|
@ -0,0 +1,59 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2011 Artem Pavlenko
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/make_shared.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
//mapnik
|
||||
#include <mapnik/palette.hpp>
|
||||
|
||||
static boost::shared_ptr<mapnik::rgba_palette> make_palette( std::string const& palette, std::string const& format )
|
||||
{
|
||||
mapnik::rgba_palette::palette_type type = mapnik::rgba_palette::PALETTE_RGBA;
|
||||
if (format == "rgb")
|
||||
type = mapnik::rgba_palette::PALETTE_RGB;
|
||||
else if (format == "act")
|
||||
type = mapnik::rgba_palette::PALETTE_ACT;
|
||||
else
|
||||
throw std::runtime_error("invalid type passed for mapnik.Palette: must be either rgba, rgb, or act");
|
||||
return boost::make_shared<mapnik::rgba_palette>(palette, type);
|
||||
}
|
||||
|
||||
void export_palette ()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
||||
class_<mapnik::rgba_palette,
|
||||
boost::shared_ptr<mapnik::rgba_palette>,
|
||||
boost::noncopyable >("Palette",no_init)
|
||||
//, init<std::string,std::string>(
|
||||
// ( arg("palette"), arg("type")),
|
||||
// "Creates a new color palette from a file\n"
|
||||
// )
|
||||
.def( "__init__", boost::python::make_constructor(make_palette))
|
||||
.def("to_string", &mapnik::rgba_palette::to_string,
|
||||
"Returns the palette as a string.\n"
|
||||
)
|
||||
;
|
||||
}
|
239
bindings/python/mapnik_parameters.cpp
Normal file
239
bindings/python/mapnik_parameters.cpp
Normal file
|
@ -0,0 +1,239 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2011 Artem Pavlenko
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
// boost
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/make_shared.hpp>
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/debug.hpp>
|
||||
#include <mapnik/params.hpp>
|
||||
#include <mapnik/unicode.hpp>
|
||||
#include <mapnik/value.hpp>
|
||||
// stl
|
||||
#include <iterator>
|
||||
|
||||
using mapnik::parameter;
|
||||
using mapnik::parameters;
|
||||
|
||||
struct parameter_pickle_suite : boost::python::pickle_suite
|
||||
{
|
||||
static boost::python::tuple
|
||||
getinitargs(const parameter& p)
|
||||
{
|
||||
using namespace boost::python;
|
||||
return boost::python::make_tuple(p.first,p.second);
|
||||
}
|
||||
};
|
||||
|
||||
struct parameters_pickle_suite : boost::python::pickle_suite
|
||||
{
|
||||
static boost::python::tuple
|
||||
getstate(const parameters& p)
|
||||
{
|
||||
using namespace boost::python;
|
||||
dict d;
|
||||
parameters::const_iterator pos=p.begin();
|
||||
while(pos!=p.end())
|
||||
{
|
||||
d[pos->first] = pos->second;
|
||||
++pos;
|
||||
}
|
||||
return boost::python::make_tuple(d);
|
||||
}
|
||||
|
||||
static void setstate(parameters& p, boost::python::tuple state)
|
||||
{
|
||||
using namespace boost::python;
|
||||
if (len(state) != 1)
|
||||
{
|
||||
PyErr_SetObject(PyExc_ValueError,
|
||||
("expected 1-item tuple in call to __setstate__; got %s"
|
||||
% state).ptr()
|
||||
);
|
||||
throw_error_already_set();
|
||||
}
|
||||
|
||||
dict d = extract<dict>(state[0]);
|
||||
boost::python::list keys = d.keys();
|
||||
for (int i=0; i<len(keys); ++i)
|
||||
{
|
||||
std::string key = extract<std::string>(keys[i]);
|
||||
object obj = d[key];
|
||||
extract<std::string> ex0(obj);
|
||||
extract<mapnik::value_integer> ex1(obj);
|
||||
extract<double> ex2(obj);
|
||||
extract<UnicodeString> ex3(obj);
|
||||
|
||||
// TODO - this is never hit - we need proper python string -> std::string to get invoked here
|
||||
if (ex0.check())
|
||||
{
|
||||
p[key] = ex0();
|
||||
}
|
||||
else if (ex1.check())
|
||||
{
|
||||
p[key] = ex1();
|
||||
}
|
||||
else if (ex2.check())
|
||||
{
|
||||
p[key] = ex2();
|
||||
}
|
||||
else if (ex3.check())
|
||||
{
|
||||
std::string buffer;
|
||||
mapnik::to_utf8(ex3(),buffer);
|
||||
p[key] = buffer;
|
||||
}
|
||||
else
|
||||
{
|
||||
MAPNIK_LOG_DEBUG(bindings) << "parameters_pickle_suite: Could not unpickle key=" << key;
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
mapnik::value_holder get_params_by_key1(mapnik::parameters const& p, std::string const& key)
|
||||
{
|
||||
parameters::const_iterator pos = p.find(key);
|
||||
if (pos != p.end())
|
||||
{
|
||||
// will be auto-converted to proper python type by `mapnik_params_to_python`
|
||||
return pos->second;
|
||||
}
|
||||
return mapnik::value_null();
|
||||
}
|
||||
|
||||
mapnik::value_holder get_params_by_key2(mapnik::parameters const& p, std::string const& key)
|
||||
{
|
||||
parameters::const_iterator pos = p.find(key);
|
||||
if (pos == p.end())
|
||||
{
|
||||
PyErr_SetString(PyExc_KeyError, key.c_str());
|
||||
boost::python::throw_error_already_set();
|
||||
}
|
||||
// will be auto-converted to proper python type by `mapnik_params_to_python`
|
||||
return pos->second;
|
||||
}
|
||||
|
||||
mapnik::parameter get_params_by_index(mapnik::parameters const& p, int index)
|
||||
{
|
||||
if (index < 0 || static_cast<unsigned>(index) > p.size())
|
||||
{
|
||||
PyErr_SetString(PyExc_IndexError, "Index is out of range");
|
||||
throw boost::python::error_already_set();
|
||||
}
|
||||
|
||||
parameters::const_iterator itr = p.begin();
|
||||
std::advance(itr, index);
|
||||
if (itr != p.end())
|
||||
{
|
||||
return *itr;
|
||||
}
|
||||
PyErr_SetString(PyExc_IndexError, "Index is out of range");
|
||||
throw boost::python::error_already_set();
|
||||
}
|
||||
|
||||
void add_parameter(mapnik::parameters & p, mapnik::parameter const& param)
|
||||
{
|
||||
p[param.first] = param.second;
|
||||
}
|
||||
|
||||
mapnik::value_holder get_param(mapnik::parameter const& p, int index)
|
||||
{
|
||||
if (index == 0)
|
||||
{
|
||||
return p.first;
|
||||
}
|
||||
else if (index == 1)
|
||||
{
|
||||
return p.second;
|
||||
}
|
||||
else
|
||||
{
|
||||
PyErr_SetString(PyExc_IndexError, "Index is out of range");
|
||||
throw boost::python::error_already_set();
|
||||
}
|
||||
}
|
||||
|
||||
boost::shared_ptr<mapnik::parameter> create_parameter(UnicodeString const& key, mapnik::value_holder const& value)
|
||||
{
|
||||
std::string key_utf8;
|
||||
mapnik::to_utf8(key, key_utf8);
|
||||
return boost::make_shared<mapnik::parameter>(key_utf8,value);
|
||||
}
|
||||
|
||||
// needed for Python_Unicode to std::string (utf8) conversion
|
||||
|
||||
boost::shared_ptr<mapnik::parameter> create_parameter_from_string(UnicodeString const& key, UnicodeString const& ustr)
|
||||
{
|
||||
std::string key_utf8;
|
||||
std::string ustr_utf8;
|
||||
mapnik::to_utf8(key, key_utf8);
|
||||
mapnik::to_utf8(ustr,ustr_utf8);
|
||||
return boost::make_shared<mapnik::parameter>(key_utf8, ustr_utf8);
|
||||
}
|
||||
|
||||
boost::python::dict to_json(const parameters& p)
|
||||
{
|
||||
using namespace boost::python;
|
||||
dict d;
|
||||
parameters::const_iterator pos=p.begin();
|
||||
while(pos!=p.end())
|
||||
{
|
||||
d[pos->first] = pos->second;
|
||||
++pos;
|
||||
}
|
||||
return d;
|
||||
}
|
||||
|
||||
void export_parameters()
|
||||
{
|
||||
using namespace boost::python;
|
||||
implicitly_convertible<std::string,mapnik::value_holder>();
|
||||
implicitly_convertible<mapnik::value_null,mapnik::value_holder>();
|
||||
implicitly_convertible<mapnik::value_integer,mapnik::value_holder>();
|
||||
implicitly_convertible<mapnik::value_double,mapnik::value_holder>();
|
||||
|
||||
class_<parameter,boost::shared_ptr<parameter> >("Parameter",no_init)
|
||||
.def("__init__", make_constructor(create_parameter),
|
||||
"Create a mapnik.Parameter from a pair of values, the first being a string\n"
|
||||
"and the second being either a string, and integer, or a float")
|
||||
.def("__init__", make_constructor(create_parameter_from_string),
|
||||
"Create a mapnik.Parameter from a pair of values, the first being a string\n"
|
||||
"and the second being either a string, and integer, or a float")
|
||||
|
||||
.def_pickle(parameter_pickle_suite())
|
||||
.def("__getitem__",get_param)
|
||||
;
|
||||
|
||||
class_<parameters>("Parameters",init<>())
|
||||
.def_pickle(parameters_pickle_suite())
|
||||
.def("get",get_params_by_key1)
|
||||
.def("__getitem__",get_params_by_key2)
|
||||
.def("__getitem__",get_params_by_index)
|
||||
.def("__len__",¶meters::size)
|
||||
.def("append",add_parameter)
|
||||
.def("iteritems",iterator<parameters>())
|
||||
.def("to_json",&to_json)
|
||||
;
|
||||
}
|
89
bindings/python/mapnik_point_symbolizer.cpp
Normal file
89
bindings/python/mapnik_point_symbolizer.cpp
Normal file
|
@ -0,0 +1,89 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#include "mapnik_enumeration.hpp"
|
||||
#include <mapnik/graphics.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include <mapnik/point_symbolizer.hpp>
|
||||
#include <mapnik/parse_path.hpp>
|
||||
#include "mapnik_svg.hpp"
|
||||
|
||||
using namespace mapnik;
|
||||
using mapnik::point_symbolizer;
|
||||
using mapnik::symbolizer_with_image;
|
||||
using mapnik::path_processor_type;
|
||||
using mapnik::parse_path;
|
||||
|
||||
|
||||
namespace {
|
||||
using namespace boost::python;
|
||||
|
||||
std::string get_filename(point_symbolizer const& t)
|
||||
{
|
||||
return path_processor_type::to_string(*t.get_filename());
|
||||
}
|
||||
|
||||
void set_filename(point_symbolizer & t, std::string const& file_expr)
|
||||
{
|
||||
t.set_filename(parse_path(file_expr));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void export_point_symbolizer()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
||||
enumeration_<point_placement_e>("point_placement")
|
||||
.value("CENTROID",CENTROID_POINT_PLACEMENT)
|
||||
.value("INTERIOR",INTERIOR_POINT_PLACEMENT)
|
||||
;
|
||||
|
||||
class_<point_symbolizer>("PointSymbolizer",
|
||||
init<>("Default Point Symbolizer - 4x4 black square"))
|
||||
.def (init<mapnik::path_expression_ptr>("<path expression ptr>"))
|
||||
.add_property("filename",
|
||||
&get_filename,
|
||||
&set_filename)
|
||||
.add_property("allow_overlap",
|
||||
&point_symbolizer::get_allow_overlap,
|
||||
&point_symbolizer::set_allow_overlap)
|
||||
.add_property("opacity",
|
||||
&point_symbolizer::get_opacity,
|
||||
&point_symbolizer::set_opacity)
|
||||
.add_property("ignore_placement",
|
||||
&point_symbolizer::get_ignore_placement,
|
||||
&point_symbolizer::set_ignore_placement)
|
||||
.add_property("placement",
|
||||
&point_symbolizer::get_point_placement,
|
||||
&point_symbolizer::set_point_placement,
|
||||
"Set/get the placement of the point")
|
||||
.add_property("transform",
|
||||
mapnik::get_svg_transform<point_symbolizer>,
|
||||
mapnik::set_svg_transform<point_symbolizer>)
|
||||
.add_property("comp_op",
|
||||
&point_symbolizer::comp_op,
|
||||
&point_symbolizer::set_comp_op,
|
||||
"Set/get the comp-op")
|
||||
;
|
||||
}
|
96
bindings/python/mapnik_polygon_pattern_symbolizer.cpp
Normal file
96
bindings/python/mapnik_polygon_pattern_symbolizer.cpp
Normal file
|
@ -0,0 +1,96 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include <mapnik/polygon_pattern_symbolizer.hpp>
|
||||
#include "mapnik_enumeration.hpp"
|
||||
#include <mapnik/parse_path.hpp>
|
||||
#include "mapnik_svg.hpp"
|
||||
|
||||
using namespace mapnik;
|
||||
using mapnik::polygon_pattern_symbolizer;
|
||||
using mapnik::path_expression_ptr;
|
||||
using mapnik::path_processor_type;
|
||||
using mapnik::parse_path;
|
||||
using mapnik::guess_type;
|
||||
|
||||
namespace {
|
||||
using namespace boost::python;
|
||||
|
||||
std::string get_filename(polygon_pattern_symbolizer const& t)
|
||||
{
|
||||
return path_processor_type::to_string(*t.get_filename());
|
||||
}
|
||||
|
||||
void set_filename(polygon_pattern_symbolizer & t, std::string const& file_expr)
|
||||
{
|
||||
t.set_filename(parse_path(file_expr));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void export_polygon_pattern_symbolizer()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
||||
enumeration_<pattern_alignment_e>("pattern_alignment")
|
||||
.value("LOCAL",LOCAL_ALIGNMENT)
|
||||
.value("GLOBAL",GLOBAL_ALIGNMENT)
|
||||
;
|
||||
|
||||
class_<polygon_pattern_symbolizer>("PolygonPatternSymbolizer",
|
||||
init<path_expression_ptr>("<path_expression_ptr>"))
|
||||
.add_property("alignment",
|
||||
&polygon_pattern_symbolizer::get_alignment,
|
||||
&polygon_pattern_symbolizer::set_alignment,
|
||||
"Set/get the alignment of the pattern")
|
||||
.add_property("transform",
|
||||
mapnik::get_svg_transform<polygon_pattern_symbolizer>,
|
||||
mapnik::set_svg_transform<polygon_pattern_symbolizer>)
|
||||
.add_property("filename",
|
||||
&get_filename,
|
||||
&set_filename)
|
||||
.add_property("opacity",
|
||||
&polygon_pattern_symbolizer::get_opacity,
|
||||
&polygon_pattern_symbolizer::set_opacity)
|
||||
.add_property("gamma",
|
||||
&polygon_pattern_symbolizer::get_gamma,
|
||||
&polygon_pattern_symbolizer::set_gamma)
|
||||
.add_property("gamma_method",
|
||||
&polygon_pattern_symbolizer::get_gamma_method,
|
||||
&polygon_pattern_symbolizer::set_gamma_method,
|
||||
"Set/get the gamma correction method of the polygon")
|
||||
.add_property("comp_op",
|
||||
&polygon_pattern_symbolizer::comp_op,
|
||||
&polygon_pattern_symbolizer::set_comp_op,
|
||||
"Set/get the pattern comp-op")
|
||||
.add_property("clip",
|
||||
&polygon_pattern_symbolizer::clip,
|
||||
&polygon_pattern_symbolizer::set_clip,
|
||||
"Set/get the pattern geometry's clipping status")
|
||||
.add_property("smooth",
|
||||
&polygon_pattern_symbolizer::smooth,
|
||||
&polygon_pattern_symbolizer::set_smooth,
|
||||
"Set/get the pattern geometry's smooth value")
|
||||
;
|
||||
}
|
69
bindings/python/mapnik_polygon_symbolizer.cpp
Normal file
69
bindings/python/mapnik_polygon_symbolizer.cpp
Normal file
|
@ -0,0 +1,69 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#include <mapnik/polygon_symbolizer.hpp>
|
||||
|
||||
using namespace mapnik;
|
||||
using mapnik::polygon_symbolizer;
|
||||
using mapnik::color;
|
||||
|
||||
void export_polygon_symbolizer()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
||||
class_<polygon_symbolizer>("PolygonSymbolizer",
|
||||
init<>("Default PolygonSymbolizer - solid fill grey"))
|
||||
.def(init<color const&>("TODO"))
|
||||
.add_property("fill",make_function
|
||||
(&polygon_symbolizer::get_fill,
|
||||
return_value_policy<copy_const_reference>()),
|
||||
&polygon_symbolizer::set_fill)
|
||||
.add_property("fill_opacity",
|
||||
&polygon_symbolizer::get_opacity,
|
||||
&polygon_symbolizer::set_opacity)
|
||||
.add_property("gamma",
|
||||
&polygon_symbolizer::get_gamma,
|
||||
&polygon_symbolizer::set_gamma)
|
||||
.add_property("gamma_method",
|
||||
&polygon_symbolizer::get_gamma_method,
|
||||
&polygon_symbolizer::set_gamma_method,
|
||||
"gamma correction method")
|
||||
.add_property("comp_op",
|
||||
&polygon_symbolizer::comp_op,
|
||||
&polygon_symbolizer::set_comp_op,
|
||||
"Set/get the polygon comp-op")
|
||||
.add_property("clip",
|
||||
&polygon_symbolizer::clip,
|
||||
&polygon_symbolizer::set_clip,
|
||||
"Set/get the polygon geometry's clipping status")
|
||||
.add_property("smooth",
|
||||
&polygon_symbolizer::smooth,
|
||||
&polygon_symbolizer::set_smooth,
|
||||
"Set/get the polygon geometry's smooth value")
|
||||
.add_property("simplify_tolerance",
|
||||
&polygon_symbolizer::simplify_tolerance,
|
||||
&polygon_symbolizer::set_simplify_tolerance,
|
||||
"simplfication tolerance measure")
|
||||
;
|
||||
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue