overpy
Advanced tools
| Changelog | ||
| ========= | ||
| 0.x (`master`_) | ||
| ~~~~~~~~~~~~~~~ | ||
| .. note:: This version is not yet released and is under development. | ||
| 0.4 (2016-12-08) | ||
| ~~~~~~~~~~~~~~~~ | ||
| * Add SAX parser | ||
| * Add option to choose DOM or SAX parser | ||
| * Fix issues with CI builds with Python 3.2 | ||
| * Add Python 3.5 to CI builds | ||
| * Fix issues (Thanks to all contributors) | ||
| * Add property for default API URL | ||
| * Add examples | ||
| * Build Fixes | ||
| * GitHub templates | ||
| * Parse center information | ||
| * Parse geometry information | ||
| * Support Areas | ||
| 0.3.1 (2015-04-30) | ||
| ~~~~~~~~~~~~~~~~~~ | ||
| * Improve example | ||
| 0.3.0 (2015-04-30) | ||
| ~~~~~~~~~~~~~~~~~~ | ||
| * Improve internal data handling (Dominik) | ||
| * Add helper functions (Morris Jobke) | ||
| 0.2.0 (2014-12-27) | ||
| ~~~~~~~~~~~~~~~~~~ | ||
| * Added support for xml response data | ||
| * Added support for exceptions | ||
| * Added tests with 100% code coverage | ||
| * Removed Python 2.6 support | ||
| * Added more examples to the documentation | ||
| 0.1.0 (2014-12-14) | ||
| ~~~~~~~~~~~~~~~~~~ | ||
| Proof of concept | ||
| * Initial release. | ||
| .. _`master`: https://github.com/DinoTools/python-overpy |
+242
| @ECHO OFF | ||
| REM Command file for Sphinx documentation | ||
| if "%SPHINXBUILD%" == "" ( | ||
| set SPHINXBUILD=sphinx-build | ||
| ) | ||
| set BUILDDIR=build | ||
| set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% source | ||
| set I18NSPHINXOPTS=%SPHINXOPTS% source | ||
| if NOT "%PAPER%" == "" ( | ||
| set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% | ||
| set I18NSPHINXOPTS=-D latex_paper_size=%PAPER% %I18NSPHINXOPTS% | ||
| ) | ||
| if "%1" == "" goto help | ||
| if "%1" == "help" ( | ||
| :help | ||
| echo.Please use `make ^<target^>` where ^<target^> is one of | ||
| echo. html to make standalone HTML files | ||
| echo. dirhtml to make HTML files named index.html in directories | ||
| echo. singlehtml to make a single large HTML file | ||
| echo. pickle to make pickle files | ||
| echo. json to make JSON files | ||
| echo. htmlhelp to make HTML files and a HTML help project | ||
| echo. qthelp to make HTML files and a qthelp project | ||
| echo. devhelp to make HTML files and a Devhelp project | ||
| echo. epub to make an epub | ||
| echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter | ||
| echo. text to make text files | ||
| echo. man to make manual pages | ||
| echo. texinfo to make Texinfo files | ||
| echo. gettext to make PO message catalogs | ||
| echo. changes to make an overview over all changed/added/deprecated items | ||
| echo. xml to make Docutils-native XML files | ||
| echo. pseudoxml to make pseudoxml-XML files for display purposes | ||
| echo. linkcheck to check all external links for integrity | ||
| echo. doctest to run all doctests embedded in the documentation if enabled | ||
| goto end | ||
| ) | ||
| if "%1" == "clean" ( | ||
| for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i | ||
| del /q /s %BUILDDIR%\* | ||
| goto end | ||
| ) | ||
| %SPHINXBUILD% 2> nul | ||
| if errorlevel 9009 ( | ||
| echo. | ||
| echo.The 'sphinx-build' command was not found. Make sure you have Sphinx | ||
| echo.installed, then set the SPHINXBUILD environment variable to point | ||
| echo.to the full path of the 'sphinx-build' executable. Alternatively you | ||
| echo.may add the Sphinx directory to PATH. | ||
| echo. | ||
| echo.If you don't have Sphinx installed, grab it from | ||
| echo.http://sphinx-doc.org/ | ||
| exit /b 1 | ||
| ) | ||
| if "%1" == "html" ( | ||
| %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished. The HTML pages are in %BUILDDIR%/html. | ||
| goto end | ||
| ) | ||
| if "%1" == "dirhtml" ( | ||
| %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. | ||
| goto end | ||
| ) | ||
| if "%1" == "singlehtml" ( | ||
| %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. | ||
| goto end | ||
| ) | ||
| if "%1" == "pickle" ( | ||
| %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished; now you can process the pickle files. | ||
| goto end | ||
| ) | ||
| if "%1" == "json" ( | ||
| %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished; now you can process the JSON files. | ||
| goto end | ||
| ) | ||
| if "%1" == "htmlhelp" ( | ||
| %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished; now you can run HTML Help Workshop with the ^ | ||
| .hhp project file in %BUILDDIR%/htmlhelp. | ||
| goto end | ||
| ) | ||
| if "%1" == "qthelp" ( | ||
| %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished; now you can run "qcollectiongenerator" with the ^ | ||
| .qhcp project file in %BUILDDIR%/qthelp, like this: | ||
| echo.^> qcollectiongenerator %BUILDDIR%\qthelp\PythonOverpassAPI.qhcp | ||
| echo.To view the help file: | ||
| echo.^> assistant -collectionFile %BUILDDIR%\qthelp\PythonOverpassAPI.ghc | ||
| goto end | ||
| ) | ||
| if "%1" == "devhelp" ( | ||
| %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished. | ||
| goto end | ||
| ) | ||
| if "%1" == "epub" ( | ||
| %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished. The epub file is in %BUILDDIR%/epub. | ||
| goto end | ||
| ) | ||
| if "%1" == "latex" ( | ||
| %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. | ||
| goto end | ||
| ) | ||
| if "%1" == "latexpdf" ( | ||
| %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex | ||
| cd %BUILDDIR%/latex | ||
| make all-pdf | ||
| cd %BUILDDIR%/.. | ||
| echo. | ||
| echo.Build finished; the PDF files are in %BUILDDIR%/latex. | ||
| goto end | ||
| ) | ||
| if "%1" == "latexpdfja" ( | ||
| %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex | ||
| cd %BUILDDIR%/latex | ||
| make all-pdf-ja | ||
| cd %BUILDDIR%/.. | ||
| echo. | ||
| echo.Build finished; the PDF files are in %BUILDDIR%/latex. | ||
| goto end | ||
| ) | ||
| if "%1" == "text" ( | ||
| %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished. The text files are in %BUILDDIR%/text. | ||
| goto end | ||
| ) | ||
| if "%1" == "man" ( | ||
| %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished. The manual pages are in %BUILDDIR%/man. | ||
| goto end | ||
| ) | ||
| if "%1" == "texinfo" ( | ||
| %SPHINXBUILD% -b texinfo %ALLSPHINXOPTS% %BUILDDIR%/texinfo | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished. The Texinfo files are in %BUILDDIR%/texinfo. | ||
| goto end | ||
| ) | ||
| if "%1" == "gettext" ( | ||
| %SPHINXBUILD% -b gettext %I18NSPHINXOPTS% %BUILDDIR%/locale | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished. The message catalogs are in %BUILDDIR%/locale. | ||
| goto end | ||
| ) | ||
| if "%1" == "changes" ( | ||
| %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.The overview file is in %BUILDDIR%/changes. | ||
| goto end | ||
| ) | ||
| if "%1" == "linkcheck" ( | ||
| %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Link check complete; look for any errors in the above output ^ | ||
| or in %BUILDDIR%/linkcheck/output.txt. | ||
| goto end | ||
| ) | ||
| if "%1" == "doctest" ( | ||
| %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Testing of doctests in the sources finished, look at the ^ | ||
| results in %BUILDDIR%/doctest/output.txt. | ||
| goto end | ||
| ) | ||
| if "%1" == "xml" ( | ||
| %SPHINXBUILD% -b xml %ALLSPHINXOPTS% %BUILDDIR%/xml | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished. The XML files are in %BUILDDIR%/xml. | ||
| goto end | ||
| ) | ||
| if "%1" == "pseudoxml" ( | ||
| %SPHINXBUILD% -b pseudoxml %ALLSPHINXOPTS% %BUILDDIR%/pseudoxml | ||
| if errorlevel 1 exit /b 1 | ||
| echo. | ||
| echo.Build finished. The pseudo-XML files are in %BUILDDIR%/pseudoxml. | ||
| goto end | ||
| ) | ||
| :end |
| API Reference | ||
| ============= | ||
| .. currentmodule:: overpy | ||
| Overpass API | ||
| ------------ | ||
| .. autoclass:: Overpass | ||
| :members: | ||
| Result | ||
| ------ | ||
| .. autoclass:: Result | ||
| :members: | ||
| Elements | ||
| -------- | ||
| .. autoclass:: Element | ||
| :members: | ||
| .. autoclass:: Area | ||
| :members: | ||
| .. autoclass:: Node | ||
| :members: | ||
| .. autoclass:: Relation | ||
| :members: | ||
| .. autoclass:: Way | ||
| :members: | ||
| Relation Members | ||
| ---------------- | ||
| .. autoclass:: RelationMember | ||
| :members: | ||
| .. autoclass:: RelationArea | ||
| :members: | ||
| .. autoclass:: RelationNode | ||
| :members: | ||
| .. autoclass:: RelationWay | ||
| :members: | ||
| Exceptions | ||
| ---------- | ||
| .. automodule:: overpy.exception | ||
| :members: | ||
| Helper | ||
| ------ | ||
| .. automodule:: overpy.helper | ||
| :members: |
| .. include:: ../../CHANGELOG.rst |
| #!/usr/bin/env python3 | ||
| # -*- coding: utf-8 -*- | ||
| # | ||
| # All configuration values have a default; values that are commented out | ||
| # serve to show the default. | ||
| import sys | ||
| import os | ||
| # If extensions (or modules to document with autodoc) are in another directory, | ||
| # add these directories to sys.path here. If the directory is relative to the | ||
| # documentation root, use os.path.abspath to make it absolute, like shown here. | ||
| #sys.path.insert(0, os.path.abspath('.')) | ||
| sys.path.insert( | ||
| 0, | ||
| os.path.abspath( | ||
| os.path.join( | ||
| os.path.dirname(__file__), | ||
| '../../' | ||
| ) | ||
| ) | ||
| ) | ||
| # -- General configuration ------------------------------------------------ | ||
| # If your documentation needs a minimal Sphinx version, state it here. | ||
| #needs_sphinx = '1.0' | ||
| # Add any Sphinx extension module names here, as strings. They can be | ||
| # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom | ||
| # ones. | ||
| extensions = [ | ||
| 'sphinx.ext.autodoc', | ||
| 'sphinx.ext.todo', | ||
| 'sphinx.ext.coverage', | ||
| 'sphinx.ext.viewcode', | ||
| ] | ||
| # Add any paths that contain templates here, relative to this directory. | ||
| templates_path = ['_templates'] | ||
| # The suffix of source filenames. | ||
| source_suffix = '.rst' | ||
| # The encoding of source files. | ||
| #source_encoding = 'utf-8-sig' | ||
| # The master toctree document. | ||
| master_doc = 'index' | ||
| # General information about the project. | ||
| project = 'Python Overpass API' | ||
| copyright = '2014, PhiBo' | ||
| # The version info for the project you're documenting, acts as replacement for | ||
| # |version| and |release|, also used in various other places throughout the | ||
| # built documents. | ||
| # | ||
| # The short X.Y version. | ||
| from overpy import __about__ as overpy_about | ||
| version = overpy_about.__version__ | ||
| # The full version, including alpha/beta/rc tags. | ||
| release = overpy_about.__version__ | ||
| # The language for content autogenerated by Sphinx. Refer to documentation | ||
| # for a list of supported languages. | ||
| #language = None | ||
| # There are two options for replacing |today|: either, you set today to some | ||
| # non-false value, then it is used: | ||
| #today = '' | ||
| # Else, today_fmt is used as the format for a strftime call. | ||
| #today_fmt = '%B %d, %Y' | ||
| # List of patterns, relative to source directory, that match files and | ||
| # directories to ignore when looking for source files. | ||
| exclude_patterns = [] | ||
| # The reST default role (used for this markup: `text`) to use for all | ||
| # documents. | ||
| #default_role = None | ||
| # If true, '()' will be appended to :func: etc. cross-reference text. | ||
| #add_function_parentheses = True | ||
| # If true, the current module name will be prepended to all description | ||
| # unit titles (such as .. function::). | ||
| #add_module_names = True | ||
| # If true, sectionauthor and moduleauthor directives will be shown in the | ||
| # output. They are ignored by default. | ||
| #show_authors = False | ||
| # The name of the Pygments (syntax highlighting) style to use. | ||
| pygments_style = 'sphinx' | ||
| # A list of ignored prefixes for module index sorting. | ||
| #modindex_common_prefix = [] | ||
| # If true, keep warnings as "system message" paragraphs in the built documents. | ||
| #keep_warnings = False | ||
| # -- Options for HTML output ---------------------------------------------- | ||
| # The theme to use for HTML and HTML Help pages. See the documentation for | ||
| # a list of builtin themes. | ||
| html_theme = 'default' | ||
| # Theme options are theme-specific and customize the look and feel of a theme | ||
| # further. For a list of options available for each theme, see the | ||
| # documentation. | ||
| #html_theme_options = {} | ||
| # Add any paths that contain custom themes here, relative to this directory. | ||
| #html_theme_path = [] | ||
| # The name for this set of Sphinx documents. If None, it defaults to | ||
| # "<project> v<release> documentation". | ||
| #html_title = None | ||
| # A shorter title for the navigation bar. Default is the same as html_title. | ||
| #html_short_title = None | ||
| # The name of an image file (relative to this directory) to place at the top | ||
| # of the sidebar. | ||
| #html_logo = None | ||
| # The name of an image file (within the static path) to use as favicon of the | ||
| # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 | ||
| # pixels large. | ||
| #html_favicon = None | ||
| # Add any paths that contain custom static files (such as style sheets) here, | ||
| # relative to this directory. They are copied after the builtin static files, | ||
| # so a file named "default.css" will overwrite the builtin "default.css". | ||
| html_static_path = ['_static'] | ||
| # Add any extra paths that contain custom files (such as robots.txt or | ||
| # .htaccess) here, relative to this directory. These files are copied | ||
| # directly to the root of the documentation. | ||
| #html_extra_path = [] | ||
| # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, | ||
| # using the given strftime format. | ||
| #html_last_updated_fmt = '%b %d, %Y' | ||
| # If true, SmartyPants will be used to convert quotes and dashes to | ||
| # typographically correct entities. | ||
| #html_use_smartypants = True | ||
| # Custom sidebar templates, maps document names to template names. | ||
| #html_sidebars = {} | ||
| # Additional templates that should be rendered to pages, maps page names to | ||
| # template names. | ||
| #html_additional_pages = {} | ||
| # If false, no module index is generated. | ||
| #html_domain_indices = True | ||
| # If false, no index is generated. | ||
| #html_use_index = True | ||
| # If true, the index is split into individual pages for each letter. | ||
| #html_split_index = False | ||
| # If true, links to the reST sources are added to the pages. | ||
| #html_show_sourcelink = True | ||
| # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. | ||
| #html_show_sphinx = True | ||
| # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. | ||
| #html_show_copyright = True | ||
| # If true, an OpenSearch description file will be output, and all pages will | ||
| # contain a <link> tag referring to it. The value of this option must be the | ||
| # base URL from which the finished HTML is served. | ||
| #html_use_opensearch = '' | ||
| # This is the file name suffix for HTML files (e.g. ".xhtml"). | ||
| #html_file_suffix = None | ||
| # Output file base name for HTML help builder. | ||
| htmlhelp_basename = 'PythonOverpassAPIdoc' | ||
| # -- Options for LaTeX output --------------------------------------------- | ||
| latex_elements = { | ||
| # The paper size ('letterpaper' or 'a4paper'). | ||
| #'papersize': 'letterpaper', | ||
| # The font size ('10pt', '11pt' or '12pt'). | ||
| #'pointsize': '10pt', | ||
| # Additional stuff for the LaTeX preamble. | ||
| #'preamble': '', | ||
| } | ||
| # Grouping the document tree into LaTeX files. List of tuples | ||
| # (source start file, target name, title, | ||
| # author, documentclass [howto, manual, or own class]). | ||
| latex_documents = [ | ||
| ('index', 'PythonOverpassAPI.tex', 'Python Overpass API Documentation', | ||
| 'PhiBo', 'manual'), | ||
| ] | ||
| # The name of an image file (relative to this directory) to place at the top of | ||
| # the title page. | ||
| #latex_logo = None | ||
| # For "manual" documents, if this is true, then toplevel headings are parts, | ||
| # not chapters. | ||
| #latex_use_parts = False | ||
| # If true, show page references after internal links. | ||
| #latex_show_pagerefs = False | ||
| # If true, show URL addresses after external links. | ||
| #latex_show_urls = False | ||
| # Documents to append as an appendix to all manuals. | ||
| #latex_appendices = [] | ||
| # If false, no module index is generated. | ||
| #latex_domain_indices = True | ||
| # -- Options for manual page output --------------------------------------- | ||
| # One entry per manual page. List of tuples | ||
| # (source start file, name, description, authors, manual section). | ||
| man_pages = [ | ||
| ('index', 'pythonoverpassapi', 'Python Overpass API Documentation', | ||
| ['PhiBo'], 1) | ||
| ] | ||
| # If true, show URL addresses after external links. | ||
| #man_show_urls = False | ||
| # -- Options for Texinfo output ------------------------------------------- | ||
| # Grouping the document tree into Texinfo files. List of tuples | ||
| # (source start file, target name, title, author, | ||
| # dir menu entry, description, category) | ||
| texinfo_documents = [ | ||
| ('index', 'PythonOverpassAPI', 'Python Overpass API Documentation', | ||
| 'PhiBo', 'PythonOverpassAPI', 'One line description of project.', | ||
| 'Miscellaneous'), | ||
| ] | ||
| # Documents to append as an appendix to all manuals. | ||
| #texinfo_appendices = [] | ||
| # If false, no module index is generated. | ||
| #texinfo_domain_indices = True | ||
| # How to display URL addresses: 'footnote', 'no', or 'inline'. | ||
| #texinfo_show_urls = 'footnote' | ||
| # If true, do not generate a @detailmenu in the "Top" node's menu. | ||
| #texinfo_no_detailmenu = False | ||
| # -- Options for Epub output ---------------------------------------------- | ||
| # Bibliographic Dublin Core info. | ||
| epub_title = 'Python Overpass API' | ||
| epub_author = 'PhiBo' | ||
| epub_publisher = 'PhiBo' | ||
| epub_copyright = '2014, PhiBo' | ||
| # The basename for the epub file. It defaults to the project name. | ||
| #epub_basename = 'Python Overpass API' | ||
| # The HTML theme for the epub output. Since the default themes are not optimized | ||
| # for small screen space, using the same theme for HTML and epub output is | ||
| # usually not wise. This defaults to 'epub', a theme designed to save visual | ||
| # space. | ||
| #epub_theme = 'epub' | ||
| # The language of the text. It defaults to the language option | ||
| # or en if the language is not set. | ||
| #epub_language = '' | ||
| # The scheme of the identifier. Typical schemes are ISBN or URL. | ||
| #epub_scheme = '' | ||
| # The unique identifier of the text. This can be a ISBN number | ||
| # or the project homepage. | ||
| #epub_identifier = '' | ||
| # A unique identification for the text. | ||
| #epub_uid = '' | ||
| # A tuple containing the cover image and cover page html template filenames. | ||
| #epub_cover = () | ||
| # A sequence of (type, uri, title) tuples for the guide element of content.opf. | ||
| #epub_guide = () | ||
| # HTML files that should be inserted before the pages created by sphinx. | ||
| # The format is a list of tuples containing the path and title. | ||
| #epub_pre_files = [] | ||
| # HTML files shat should be inserted after the pages created by sphinx. | ||
| # The format is a list of tuples containing the path and title. | ||
| #epub_post_files = [] | ||
| # A list of files that should not be packed into the epub file. | ||
| epub_exclude_files = ['search.html'] | ||
| # The depth of the table of contents in toc.ncx. | ||
| #epub_tocdepth = 3 | ||
| # Allow duplicate toc entries. | ||
| #epub_tocdup = True | ||
| # Choose between 'default' and 'includehidden'. | ||
| #epub_tocscope = 'default' | ||
| # Fix unsupported image types using the PIL. | ||
| #epub_fix_images = False | ||
| # Scale large images. | ||
| #epub_max_image_width = 0 | ||
| # How to display URL addresses: 'footnote', 'no', or 'inline'. | ||
| #epub_show_urls = 'inline' | ||
| # If false, no index is generated. | ||
| #epub_use_index = True |
| .. include:: ../../CONTRIBUTING.rst |
| Examples | ||
| ======== | ||
| Basic example | ||
| ------------- | ||
| Lets start with an example from the Overpass API documentation. | ||
| **Query String:** | ||
| .. code-block:: text | ||
| :linenos: | ||
| node(50.745,7.17,50.75,7.18); | ||
| out; | ||
| **Use OverPy:** | ||
| .. code-block:: pycon | ||
| :linenos: | ||
| >>> import overpy | ||
| >>> api = overpy.Overpass() | ||
| >>> result = api.query("node(50.745,7.17,50.75,7.18);out;") | ||
| >>> len(result.nodes) | ||
| 1984 | ||
| >>> len(result.ways) | ||
| 0 | ||
| >>> len(result.relations) | ||
| 0 | ||
| >>> node = result.nodes[2] | ||
| >>> node.id | ||
| 100792806 | ||
| >>> node.tags | ||
| {} | ||
| Line 1: | ||
| Import the required Python module | ||
| Line 2: | ||
| Create a new instance of the Overpass() class. | ||
| This instance is used to query the Overpass API. | ||
| Line 3: | ||
| Use the Query-String from above to query the Overpass API service. | ||
| Line 4,5: | ||
| Get the number of nodes in the result set. | ||
| Line 6-9: | ||
| Get the number of ways and relations available in the result set. | ||
| Line 10-14: | ||
| Get the third node from the list. | ||
| Display the ID and the tags of this node. | ||
| Use Overpass QL or Overpass XML | ||
| ------------------------------- | ||
| Queries are passed directly to the Overpass API service without any modification. | ||
| So it is possible to use Overpass QL and Overpass XML. | ||
| Overpass QL | ||
| ~~~~~~~~~~~ | ||
| **Query:** | ||
| .. code-block:: text | ||
| :linenos: | ||
| node["name"="Gielgen"]; | ||
| out body; | ||
| **Use OverPy:** | ||
| .. code-block:: pycon | ||
| :linenos: | ||
| >>> import overpy | ||
| >>> api = overpy.Overpass() | ||
| >>> result = api.query("""node["name"="Gielgen"];out body;""") | ||
| >>> len(result.nodes) | ||
| 6 | ||
| >>> len(result.ways) | ||
| 0 | ||
| >>> len(result.relations) | ||
| 0 | ||
| Overpass XML | ||
| ~~~~~~~~~~~~ | ||
| **Query:** | ||
| .. code-block:: xml | ||
| :linenos: | ||
| <osm-script> | ||
| <query type="node"> | ||
| <has-kv k="name" v="Gielgen"/> | ||
| </query> | ||
| <print/> | ||
| </osm-script> | ||
| **Use OverPy:** | ||
| .. code-block:: pycon | ||
| :linenos: | ||
| >>> import overpy | ||
| >>> api = overpy.Overpass() | ||
| >>> result = api.query("""<osm-script> | ||
| ... <query type="node"> | ||
| ... <has-kv k="name" v="Gielgen"/> | ||
| ... </query> | ||
| ... <print/> | ||
| ... </osm-script>""") | ||
| >>> len(result.nodes) | ||
| 6 | ||
| >>> len(result.ways) | ||
| 0 | ||
| >>> len(result.relations) | ||
| 0 | ||
| Parse JSON or XML responses | ||
| --------------------------- | ||
| On a request OverPy detects the content type from the response. | ||
| JSON response | ||
| ~~~~~~~~~~~~~ | ||
| **Query String:** | ||
| .. code-block:: text | ||
| :linenos: | ||
| [out:json]; | ||
| node(50.745,7.17,50.75,7.18); | ||
| out; | ||
| **Use OverPy:** | ||
| .. code-block:: pycon | ||
| :linenos: | ||
| >>> import overpy | ||
| >>> api = overpy.Overpass() | ||
| >>> result = api.query("[out:json];node(50.745,7.17,50.75,7.18);out;") | ||
| >>> len(result.nodes) | ||
| 1984 | ||
| >>> len(result.ways) | ||
| 0 | ||
| >>> len(result.relations) | ||
| 0 | ||
| XML response | ||
| ~~~~~~~~~~~~ | ||
| **Query String:** | ||
| .. code-block:: text | ||
| :linenos: | ||
| [out:xml]; | ||
| node(50.745,7.17,50.75,7.18); | ||
| out; | ||
| **Use OverPy:** | ||
| .. code-block:: pycon | ||
| :linenos: | ||
| >>> import overpy | ||
| >>> api = overpy.Overpass() | ||
| >>> result = api.query("[out:xml];node(50.745,7.17,50.75,7.18);out;") | ||
| >>> len(result.nodes) | ||
| 1984 | ||
| >>> len(result.ways) | ||
| 0 | ||
| >>> len(result.relations) | ||
| 0 | ||
| Ways | ||
| ---- | ||
| Get all nodes of a way | ||
| ~~~~~~~~~~~~~~~~~~~~~~ | ||
| In this example the Overpass API will only return the Way elements with the name "Gielgenstraße". | ||
| But there will be no Node elements in the result set. | ||
| OverPy provides a way to resolve missing nodes. | ||
| **Query String:** | ||
| .. code-block:: text | ||
| :linenos: | ||
| way | ||
| ["name"="Gielgenstraße"] | ||
| (50.7,7.1,50.8,7.25); | ||
| out; | ||
| **Use OverPy:** | ||
| .. code-block:: pycon | ||
| :linenos: | ||
| >>> import overpy | ||
| >>> api = overpy.Overpass() | ||
| >>> result = api.query("""way["name"="Gielgenstraße"](50.7,7.1,50.8,7.25);out;""") | ||
| >>> len(result.nodes) | ||
| 0 | ||
| >>> len(result.ways) | ||
| 4 | ||
| >>> way = result.ways[0] | ||
| >>> way.nodes | ||
| Traceback (most recent call last): | ||
| File "<stdin>", line 1, in <module> | ||
| [...] | ||
| raise exception.DataIncomplete("Resolve missing nodes is disabled") | ||
| overpy.exception.DataIncomplete: ('Data incomplete try to improve the query to resolve the missing data', 'Resolve missing nodes is disabled') | ||
| >>> way.get_nodes() | ||
| Traceback (most recent call last): | ||
| File "<stdin>", line 1, in <module> | ||
| [...] | ||
| raise exception.DataIncomplete("Resolve missing nodes is disabled") | ||
| overpy.exception.DataIncomplete: ('Data incomplete try to improve the query to resolve the missing data', 'Resolve missing nodes is disabled') | ||
| >>> nodes = way.get_nodes(resolve_missing=True) | ||
| >>> len(nodes) | ||
| 13 | ||
| >>> len(result.nodes) | ||
| 13 | ||
| >>> len(way.nodes) | ||
| 13 | ||
| Line 1-3: | ||
| Send a query to the Overpass API service. | ||
| Line 4-6: | ||
| There are 4 Way elements and 0 Node elements in the result set. | ||
| Line 7: | ||
| Get the first way. | ||
| Line 8-19: | ||
| Use :attr:`overpy.Way.nodes` class attribute and the :func:`overpy.Way.get_nodes()` function to get the nodes for the way. | ||
| Both raise an exception because the nodes are not in the result set and auto resolving missing nodes is disabled. | ||
| Line 20-21: | ||
| Use the :func:`overpy.Way.get_nodes()` function and let OverPy try to resolve the missing nodes. | ||
| The function will return all Node elements connected with the Way element. | ||
| Line 22-25: | ||
| The resolved nodes have been added to the result set and are available to be used again later. |
| Welcome to Python Overpass API's documentation! | ||
| =============================================== | ||
| Contents: | ||
| .. toctree:: | ||
| :maxdepth: 2 | ||
| introduction | ||
| example | ||
| api | ||
| contributing | ||
| changelog | ||
| Indices and tables | ||
| ================== | ||
| * :ref:`genindex` | ||
| * :ref:`modindex` | ||
| * :ref:`search` | ||
| Introduction | ||
| ============ | ||
| Requirements | ||
| ------------ | ||
| Supported Python versions: | ||
| * Python 2.7 | ||
| * Python > 3.2 | ||
| * PyPy | ||
| Installation | ||
| ------------ | ||
| As a Python egg | ||
| ~~~~~~~~~~~~~~~ | ||
| You can install the most recent version using ``pip`` | ||
| .. code-block:: console | ||
| $ pip install overpy | ||
| From a tarball release | ||
| ~~~~~~~~~~~~~~~~~~~~~~ | ||
| Download the most recent tarball from github, unpack it and run the following command on the command-line. | ||
| .. code-block:: console | ||
| $ python setup.py install | ||
| Install the development version | ||
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ||
| Install git and run the following commands on the command-line. | ||
| .. code-block:: console | ||
| $ git clone https://github.com/DinoTools/python-overpy.git | ||
| $ cd python-overpy | ||
| $ python setup.py install | ||
| Usage | ||
| ----- | ||
| It is recommended to have a look at the documentation of the `Overpass API`_ before using OverPy. | ||
| For more examples have a look at the :doc:`examples page <example>` or in the examples directory. | ||
| .. code-block:: python | ||
| import overpy | ||
| api = overpy.Overpass() | ||
| # fetch all ways and nodes | ||
| result = api.query(""" | ||
| way(50.746,7.154,50.748,7.157) ["highway"]; | ||
| (._;>;); | ||
| out body; | ||
| """) | ||
| for way in result.ways: | ||
| print("Name: %s" % way.tags.get("name", "n/a")) | ||
| print(" Highway: %s" % way.tags.get("highway", "n/a")) | ||
| print(" Nodes:") | ||
| for node in way.nodes: | ||
| print(" Lat: %f, Lon: %f" % (node.lat, node.lon)) | ||
| .. _Overpass API: https://wiki.openstreetmap.org/wiki/Overpass_API |
| #!/usr/bin/env python | ||
| import overpy | ||
| api = overpy.Overpass() | ||
| # fetch all areas | ||
| # More info on http://wiki.openstreetmap.org/wiki/Overpass_API/Overpass_API_by_Example | ||
| result = api.query(""" | ||
| area[name="Troisdorf"]; | ||
| out; | ||
| """) | ||
| for area in result.areas: | ||
| print( | ||
| "Name: %s (%i)" % ( | ||
| area.tags.get("name", "n/a"), | ||
| area.id | ||
| ) | ||
| ) | ||
| for n, v in area.tags.items(): | ||
| print(" Tag: %s = %s" % (n, v)) |
| #!/usr/bin/env python | ||
| import overpy | ||
| api = overpy.Overpass() | ||
| # We can also see a node's metadata: | ||
| jet_deau = 60018172 | ||
| result = api.query("node({}); out meta;".format(jet_deau)) | ||
| node = result.get_node(jet_deau) | ||
| print( | ||
| "The node for the famous Geneva {} ({},{}) was:".format( | ||
| node.tags['name'], | ||
| node.lat, | ||
| node.lon | ||
| ) | ||
| ) | ||
| attrs = node.attributes | ||
| print("* last modified {}".format(attrs['timestamp'])) | ||
| print("* by {} (uid: {})".format(attrs['user'], attrs['uid'])) | ||
| print("* in changeset {}".format(attrs['changeset'])) |
| #!/usr/bin/env python | ||
| import overpy | ||
| api = overpy.Overpass() | ||
| # fetch all ways and nodes | ||
| result = api.query(""" | ||
| way(50.746,7.154,50.748,7.157) ["highway"]; | ||
| (._;>;); | ||
| out body; | ||
| """) | ||
| for way in result.ways: | ||
| print("Name: %s" % way.tags.get("name", "n/a")) | ||
| print(" Highway: %s" % way.tags.get("highway", "n/a")) | ||
| print(" Nodes:") | ||
| for node in way.nodes: | ||
| print(" Lat: %f, Lon: %f" % (node.lat, node.lon)) |
+22
| The MIT License (MIT) | ||
| Copyright (c) 2014 PhiBo (DinoTools) | ||
| Permission is hereby granted, free of charge, to any person obtaining a copy | ||
| of this software and associated documentation files (the "Software"), to deal | ||
| in the Software without restriction, including without limitation the rights | ||
| to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
| copies of the Software, and to permit persons to whom the Software is | ||
| furnished to do so, subject to the following conditions: | ||
| The above copyright notice and this permission notice shall be included in all | ||
| copies or substantial portions of the Software. | ||
| THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
| IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
| FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
| AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
| LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
| OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE | ||
| SOFTWARE. | ||
+11
| include README.rst CHANGELOG.rst | ||
| include LICENSE | ||
| include MANIFEST.in | ||
| include docs/make.bat docs.Makefile | ||
| include docs/source/conf.py | ||
| include docs/source/*.rst | ||
| include examples/*.py | ||
| include tests/*.py | ||
| include tests/json/*.json | ||
| include tests/response/*.html | ||
| include tests/xml/*.xml |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2016-11-22T21:04:02Z", | ||
| "timestamp_areas_base": "2016-11-22T20:25:03Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "area", | ||
| "id": 2448756446, | ||
| "tags": { | ||
| "addr:city": "Troisdorf", | ||
| "addr:postcode": "53840", | ||
| "area": "yes", | ||
| "description": "Troisdorf Bahnsteig Gleis 9", | ||
| "name": "Troisdorf", | ||
| "public_transport": "platform", | ||
| "railway": "platform", | ||
| "ref": "9", | ||
| "train": "yes", | ||
| "wheelchair": "no", | ||
| "wheelchair:description": "Plattformlift ist vorhanden, Betriebsbereitschaft nach 8 Jahren stillstand fraglich.", | ||
| "width": "5" | ||
| } | ||
| } | ||
| , | ||
| { | ||
| "type": "area", | ||
| "id": 3600055060, | ||
| "tags": { | ||
| "TMC:cid_58:tabcd_1:Class": "Area", | ||
| "TMC:cid_58:tabcd_1:LCLversion": "8.00", | ||
| "TMC:cid_58:tabcd_1:LocationCode": "2550", | ||
| "admin_level": "8", | ||
| "boundary": "administrative", | ||
| "de:amtlicher_gemeindeschluessel": "05382068", | ||
| "de:place": "town", | ||
| "de:regionalschluessel": "053820068068", | ||
| "name": "Troisdorf", | ||
| "name:prefix": "Stadt", | ||
| "type": "boundary", | ||
| "wikidata": "Q3900", | ||
| "wikipedia": "de:Troisdorf" | ||
| } | ||
| } | ||
| , | ||
| { | ||
| "type": "area", | ||
| "id": 3605945175, | ||
| "tags": { | ||
| "addr:city": "Troisdorf", | ||
| "addr:postcode": "53840", | ||
| "description": "Troisdorf Bahnsteig Gleis 1+2", | ||
| "local_ref": "1;2", | ||
| "name": "Troisdorf", | ||
| "public_transport": "platform", | ||
| "railway": "platform", | ||
| "ref": "1/2", | ||
| "tactile_paving": "yes", | ||
| "train": "yes", | ||
| "type": "multipolygon", | ||
| "wheelchair": "yes" | ||
| } | ||
| } | ||
| , | ||
| { | ||
| "type": "area", | ||
| "id": 3605945176, | ||
| "tags": { | ||
| "addr:city": "Troisdorf", | ||
| "addr:postcode": "53840", | ||
| "description": "Troisdorf Bahnsteig Gleis 5+6", | ||
| "name": "Troisdorf", | ||
| "phone": "+49 221 1411055", | ||
| "public_transport": "platform", | ||
| "railway": "platform", | ||
| "ref": "5/6", | ||
| "tactile_paving": "yes", | ||
| "train": "yes", | ||
| "type": "multipolygon", | ||
| "wheelchair": "yes", | ||
| "wheelchair:description": "Der Aufzug zu diesem Bahnsteig ist oft defekt, bitte informieren. Betriebszustand kann bei 3S-Zentrale erfragt werden (siehe Telefonnummer, aber Vorsicht, die sind nicht immer informiert!)", | ||
| "width": "6" | ||
| } | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2014-12-14T12:58:02Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "node", | ||
| "id": 50878400, | ||
| "lat": 50.7461788, | ||
| "lon": 7.1742257 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 100793192, | ||
| "lat": 50.7468472, | ||
| "lon": 7.1709376, | ||
| "tags": { | ||
| "highway": "turning_circle" | ||
| } | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 3233854234, | ||
| "lat": 50.7494236, | ||
| "lon": 7.1757664, | ||
| "timestamp": "2014-12-14T07:27:19Z", | ||
| "version": 1, | ||
| "changeset": 23456789, | ||
| "user": "TestUser", | ||
| "uid": 345678 | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2014-12-21T20:00:03Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "relation", | ||
| "id": 2046898, | ||
| "timestamp": "2014-12-15T13:13:11Z", | ||
| "version": 12, | ||
| "changeset": 17433822, | ||
| "user": "Username", | ||
| "uid": 12345, | ||
| "members": [ | ||
| { | ||
| "type": "node", | ||
| "ref": 507464632, | ||
| "role": "platform" | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "ref": 2252681768, | ||
| "role": "stop" | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "ref": 507464636, | ||
| "role": "platform" | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "ref": 1620886108, | ||
| "role": "stop" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 4893348, | ||
| "role": "" | ||
| } | ||
| ], | ||
| "tags": { | ||
| "from": "Here", | ||
| "name": "Test relation", | ||
| "ref": "609", | ||
| "route": "bus", | ||
| "to": "There", | ||
| "type": "route" | ||
| } | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2014-12-14T13:34:02Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "node", | ||
| "id": 3233854233, | ||
| "lat": 50.7494187, | ||
| "lon": 7.1758731 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 3233854234, | ||
| "lat": 50.7494287, | ||
| "lon": 7.1758731 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 3233854235, | ||
| "lat": 50.7494287, | ||
| "lon": 7.1758731 | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "id": 317146078, | ||
| "nodes": [ | ||
| 3233854233, | ||
| 3233854234, | ||
| 3233854235 | ||
| ] | ||
| }, | ||
| { | ||
| "type": "relation", | ||
| "id": 2046898, | ||
| "timestamp": "2014-12-15T13:13:11Z", | ||
| "version": 12, | ||
| "changeset": 17433822, | ||
| "user": "Username", | ||
| "uid": 12345, | ||
| "members": [ | ||
| { | ||
| "type": "node", | ||
| "ref": 3233854233, | ||
| "role": "platform" | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "ref": 3233854234, | ||
| "role": "stop" | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "ref": 3233854235, | ||
| "role": "platform" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 317146078, | ||
| "role": "" | ||
| } | ||
| ], | ||
| "tags": { | ||
| "from": "Here", | ||
| "name": "Test relation", | ||
| "ref": "609", | ||
| "route": "bus", | ||
| "to": "There", | ||
| "type": "route" | ||
| } | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2016-11-23T20:28:03Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "relation", | ||
| "id": 23092, | ||
| "center": { | ||
| "lat": 50.8176646, | ||
| "lon": 7.0208539 | ||
| }, | ||
| "members": [ | ||
| { | ||
| "type": "way", | ||
| "ref": 4334856, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 234434903, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 37881522, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 37881521, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 4356491, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235363211, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 48290877, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 210683519, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 42743961, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 210683522, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 48290881, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235363214, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 4400137, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 230940375, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 4400140, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 4400142, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235824476, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 4400143, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235824475, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 178797123, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 233553030, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 4829989, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 99834112, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 133081219, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 234434905, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20661567, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 230941900, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20661568, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20661572, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 230940374, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20661573, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20662817, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 230941903, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20662819, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20662824, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20662827, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 27492515, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 129125122, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 234434901, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 234434904, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 27492542, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 27492543, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29233646, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820561, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29233647, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820559, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820562, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29233648, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29382960, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008229, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008238, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008230, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008226, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 40033062, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 40033063, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29384561, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29384563, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008224, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008227, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008237, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008232, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008239, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29384564, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31282638, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31282787, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 383262762, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31304443, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 128541594, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31304503, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31363881, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31363891, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31363892, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31363898, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31363910, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364152, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364158, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364178, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364384, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364387, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364484, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364512, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364656, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364667, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008234, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364888, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 122158730, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364985, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008235, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008231, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008233, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31365377, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31365425, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008236, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 36447898, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008228, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31366812, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31366880, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31367017, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31367443, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31367449, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31367526, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31367534, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31369852, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 449397558, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31797389, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31798039, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235363212, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 156492546, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 156492545, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 130749935, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32472877, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31798988, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31798989, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820560, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820563, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820564, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820570, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32472855, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32472856, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 37881520, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 37881519, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 234434902, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32472875, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32473071, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 128522486, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 36447896, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32473075, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32473086, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32473087, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 40033064, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 189189059, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008225, | ||
| "role": "" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 41550921, | ||
| "role": "" | ||
| } | ||
| ], | ||
| "tags": { | ||
| "TMC:cid_58:tabcd_1:Class": "Road", | ||
| "TMC:cid_58:tabcd_1:LCLversion": "8.00", | ||
| "TMC:cid_58:tabcd_1:LocationCode": "7142", | ||
| "name": "Bundesautobahn 555", | ||
| "network": "BAB", | ||
| "operator": "Bundesrepublik Deutschland", | ||
| "ref": "A 555", | ||
| "route": "road", | ||
| "type": "route", | ||
| "wikipedia": "de:Bundesautobahn 555" | ||
| } | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2016-11-24T21:40:02Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "relation", | ||
| "id": 23092, | ||
| "bounds": { | ||
| "minlat": 50.7432318, | ||
| "minlon": 6.9639432, | ||
| "maxlat": 50.8920975, | ||
| "maxlon": 7.0777645 | ||
| }, | ||
| "members": [ | ||
| { | ||
| "type": "way", | ||
| "ref": 4334856, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8104598, "lon": 6.9871803 }, | ||
| { "lat": 50.8117239, "lon": 6.9849282 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 234434903, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8117239, "lon": 6.9849282 }, | ||
| { "lat": 50.8137408, "lon": 6.9813352 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 37881522, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8137408, "lon": 6.9813352 }, | ||
| { "lat": 50.8140146, "lon": 6.9808445 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 37881521, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8140146, "lon": 6.9808445 }, | ||
| { "lat": 50.8193541, "lon": 6.9713457 }, | ||
| { "lat": 50.8203182, "lon": 6.9697248 }, | ||
| { "lat": 50.8210652, "lon": 6.9685758 }, | ||
| { "lat": 50.8217885, "lon": 6.9676136 }, | ||
| { "lat": 50.8225495, "lon": 6.9667439 }, | ||
| { "lat": 50.8233005, "lon": 6.9660515 }, | ||
| { "lat": 50.8238128, "lon": 6.9656463 }, | ||
| { "lat": 50.8243279, "lon": 6.9653077 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 4356491, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7433997, "lon": 7.0777645 }, | ||
| { "lat": 50.7434097, "lon": 7.0775890 }, | ||
| { "lat": 50.7434629, "lon": 7.0774402 }, | ||
| { "lat": 50.7435198, "lon": 7.0773718 }, | ||
| { "lat": 50.7437507, "lon": 7.0771524 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235363211, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7437507, "lon": 7.0771524 }, | ||
| { "lat": 50.7446592, "lon": 7.0762926 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 48290877, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7446592, "lon": 7.0762926 }, | ||
| { "lat": 50.7450803, "lon": 7.0757571 }, | ||
| { "lat": 50.7453888, "lon": 7.0753312 }, | ||
| { "lat": 50.7457125, "lon": 7.0748518 }, | ||
| { "lat": 50.7460370, "lon": 7.0743265 }, | ||
| { "lat": 50.7462718, "lon": 7.0739425 }, | ||
| { "lat": 50.7464798, "lon": 7.0735173 }, | ||
| { "lat": 50.7468359, "lon": 7.0727449 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 210683519, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7468359, "lon": 7.0727449 }, | ||
| { "lat": 50.7471006, "lon": 7.0720546 }, | ||
| { "lat": 50.7473135, "lon": 7.0714640 }, | ||
| { "lat": 50.7475199, "lon": 7.0708095 }, | ||
| { "lat": 50.7479418, "lon": 7.0693723 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 42743961, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7464112, "lon": 7.0734310 }, | ||
| { "lat": 50.7459053, "lon": 7.0743560 }, | ||
| { "lat": 50.7457638, "lon": 7.0745740 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 210683522, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7457638, "lon": 7.0745740 }, | ||
| { "lat": 50.7456300, "lon": 7.0747409 }, | ||
| { "lat": 50.7454858, "lon": 7.0749187 }, | ||
| { "lat": 50.7452550, "lon": 7.0752554 }, | ||
| { "lat": 50.7450000, "lon": 7.0756385 }, | ||
| { "lat": 50.7448878, "lon": 7.0758027 }, | ||
| { "lat": 50.7447522, "lon": 7.0759730 }, | ||
| { "lat": 50.7445514, "lon": 7.0762032 }, | ||
| { "lat": 50.7443577, "lon": 7.0764098 }, | ||
| { "lat": 50.7441185, "lon": 7.0766490 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 48290881, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7441185, "lon": 7.0766490 }, | ||
| { "lat": 50.7439033, "lon": 7.0768575 }, | ||
| { "lat": 50.7437722, "lon": 7.0769631 }, | ||
| { "lat": 50.7436609, "lon": 7.0770394 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235363214, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7436609, "lon": 7.0770394 }, | ||
| { "lat": 50.7435688, "lon": 7.0771154 }, | ||
| { "lat": 50.7434662, "lon": 7.0771906 }, | ||
| { "lat": 50.7434058, "lon": 7.0772230 }, | ||
| { "lat": 50.7433331, "lon": 7.0772525 }, | ||
| { "lat": 50.7432822, "lon": 7.0772636 }, | ||
| { "lat": 50.7432318, "lon": 7.0772601 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 4400137, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8887155, "lon": 6.9676900 }, | ||
| { "lat": 50.8876384, "lon": 6.9678150 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 230940375, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8876384, "lon": 6.9678150 }, | ||
| { "lat": 50.8870572, "lon": 6.9679058 }, | ||
| { "lat": 50.8858563, "lon": 6.9680103 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 4400140, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8797318, "lon": 6.9690108 }, | ||
| { "lat": 50.8799208, "lon": 6.9689396 }, | ||
| { "lat": 50.8807058, "lon": 6.9688470 }, | ||
| { "lat": 50.8824762, "lon": 6.9687068 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 4400142, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8919691, "lon": 6.9670292 }, | ||
| { "lat": 50.8918982, "lon": 6.9671419 }, | ||
| { "lat": 50.8918068, "lon": 6.9672404 }, | ||
| { "lat": 50.8917186, "lon": 6.9673001 }, | ||
| { "lat": 50.8916153, "lon": 6.9673480 }, | ||
| { "lat": 50.8914588, "lon": 6.9673816 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235824476, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8914588, "lon": 6.9673816 }, | ||
| { "lat": 50.8892470, "lon": 6.9676302 }, | ||
| { "lat": 50.8887155, "lon": 6.9676900 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 4400143, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8887787, "lon": 6.9681629 }, | ||
| { "lat": 50.8896224, "lon": 6.9680604 }, | ||
| { "lat": 50.8897525, "lon": 6.9680446 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235824475, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8897525, "lon": 6.9680446 }, | ||
| { "lat": 50.8906556, "lon": 6.9679349 }, | ||
| { "lat": 50.8912013, "lon": 6.9678862 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 178797123, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8912013, "lon": 6.9678862 }, | ||
| { "lat": 50.8913492, "lon": 6.9678648 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 233553030, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8913492, "lon": 6.9678648 }, | ||
| { "lat": 50.8916648, "lon": 6.9677762 }, | ||
| { "lat": 50.8917895, "lon": 6.9677694 }, | ||
| { "lat": 50.8919294, "lon": 6.9677947 }, | ||
| { "lat": 50.8920975, "lon": 6.9678618 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 4829989, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8105743, "lon": 6.9865001 }, | ||
| { "lat": 50.8088268, "lon": 6.9896207 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 99834112, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8088268, "lon": 6.9896207 }, | ||
| { "lat": 50.8066272, "lon": 6.9935457 }, | ||
| { "lat": 50.8057165, "lon": 6.9951151 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 133081219, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8057165, "lon": 6.9951151 }, | ||
| { "lat": 50.8050332, "lon": 6.9962100 }, | ||
| { "lat": 50.8043133, "lon": 6.9972614 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 234434905, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8043133, "lon": 6.9972614 }, | ||
| { "lat": 50.8038004, "lon": 6.9979304 }, | ||
| { "lat": 50.8032120, "lon": 6.9986363 }, | ||
| { "lat": 50.8029818, "lon": 6.9989181 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20661567, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8849681, "lon": 6.9681126 }, | ||
| { "lat": 50.8839667, "lon": 6.9682524 }, | ||
| { "lat": 50.8829770, "lon": 6.9684059 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 230941900, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8829770, "lon": 6.9684059 }, | ||
| { "lat": 50.8826286, "lon": 6.9684595 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20661568, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8850872, "lon": 6.9685052 }, | ||
| { "lat": 50.8859127, "lon": 6.9684079 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20661572, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8859127, "lon": 6.9684079 }, | ||
| { "lat": 50.8872823, "lon": 6.9682592 }, | ||
| { "lat": 50.8876807, "lon": 6.9682539 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 230940374, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8876807, "lon": 6.9682539 }, | ||
| { "lat": 50.8887787, "lon": 6.9681629 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20661573, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8858563, "lon": 6.9680103 }, | ||
| { "lat": 50.8849681, "lon": 6.9681126 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20662817, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8823655, "lon": 6.9684998 }, | ||
| { "lat": 50.8806620, "lon": 6.9686453 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 230941903, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8806620, "lon": 6.9686453 }, | ||
| { "lat": 50.8793943, "lon": 6.9687847 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20662819, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8824762, "lon": 6.9687068 }, | ||
| { "lat": 50.8827522, "lon": 6.9686901 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20662824, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8827522, "lon": 6.9686901 }, | ||
| { "lat": 50.8839133, "lon": 6.9686122 }, | ||
| { "lat": 50.8850872, "lon": 6.9685052 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 20662827, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8826286, "lon": 6.9684595 }, | ||
| { "lat": 50.8823655, "lon": 6.9684998 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 27492515, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8029818, "lon": 6.9989181 }, | ||
| { "lat": 50.8026288, "lon": 6.9992932 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 129125122, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8093979, "lon": 6.9890430 }, | ||
| { "lat": 50.8104598, "lon": 6.9871803 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 234434901, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8063753, "lon": 6.9944172 }, | ||
| { "lat": 50.8093979, "lon": 6.9890430 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 234434904, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8053262, "lon": 6.9961817 }, | ||
| { "lat": 50.8058108, "lon": 6.9953914 }, | ||
| { "lat": 50.8063753, "lon": 6.9944172 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 27492542, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8029899, "lon": 6.9991939 }, | ||
| { "lat": 50.8032828, "lon": 6.9988807 }, | ||
| { "lat": 50.8038702, "lon": 6.9982129 }, | ||
| { "lat": 50.8044350, "lon": 6.9974695 }, | ||
| { "lat": 50.8053262, "lon": 6.9961817 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 27492543, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8026483, "lon": 6.9995590 }, | ||
| { "lat": 50.8029899, "lon": 6.9991939 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29233646, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8793943, "lon": 6.9687847 }, | ||
| { "lat": 50.8716935, "lon": 6.9696241 }, | ||
| { "lat": 50.8701666, "lon": 6.9697243 }, | ||
| { "lat": 50.8688585, "lon": 6.9697057 }, | ||
| { "lat": 50.8652424, "lon": 6.9693872 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820561, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8652424, "lon": 6.9693872 }, | ||
| { "lat": 50.8636340, "lon": 6.9692339 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29233647, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8636340, "lon": 6.9692339 }, | ||
| { "lat": 50.8608791, "lon": 6.9689787 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820559, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8608791, "lon": 6.9689787 }, | ||
| { "lat": 50.8590168, "lon": 6.9688055 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820562, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8590168, "lon": 6.9688055 }, | ||
| { "lat": 50.8523854, "lon": 6.9681888 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29233648, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8522171, "lon": 6.9684787 }, | ||
| { "lat": 50.8590359, "lon": 6.9691023 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29382960, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8391695, "lon": 6.9667285 }, | ||
| { "lat": 50.8411491, "lon": 6.9672118 }, | ||
| { "lat": 50.8425706, "lon": 6.9674985 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008229, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8425706, "lon": 6.9674985 }, | ||
| { "lat": 50.8443277, "lon": 6.9677563 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008238, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8443277, "lon": 6.9677563 }, | ||
| { "lat": 50.8453254, "lon": 6.9678465 }, | ||
| { "lat": 50.8468114, "lon": 6.9679862 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008230, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8468114, "lon": 6.9679862 }, | ||
| { "lat": 50.8491169, "lon": 6.9681907 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008226, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8491169, "lon": 6.9681907 }, | ||
| { "lat": 50.8518181, "lon": 6.9684403 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 40033062, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8391857, "lon": 6.9664246 }, | ||
| { "lat": 50.8386690, "lon": 6.9662911 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 40033063, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8386690, "lon": 6.9662911 }, | ||
| { "lat": 50.8314332, "lon": 6.9644546 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29384561, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8523854, "lon": 6.9681888 }, | ||
| { "lat": 50.8519590, "lon": 6.9681595 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29384563, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8519590, "lon": 6.9681595 }, | ||
| { "lat": 50.8506534, "lon": 6.9680320 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008224, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8506534, "lon": 6.9680320 }, | ||
| { "lat": 50.8490308, "lon": 6.9678717 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008227, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8490308, "lon": 6.9678717 }, | ||
| { "lat": 50.8478121, "lon": 6.9677589 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008237, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8478121, "lon": 6.9677589 }, | ||
| { "lat": 50.8459552, "lon": 6.9676249 }, | ||
| { "lat": 50.8451822, "lon": 6.9675256 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008232, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8451822, "lon": 6.9675256 }, | ||
| { "lat": 50.8433946, "lon": 6.9673373 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008239, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8433946, "lon": 6.9673373 }, | ||
| { "lat": 50.8424071, "lon": 6.9671724 }, | ||
| { "lat": 50.8411984, "lon": 6.9669289 }, | ||
| { "lat": 50.8391857, "lon": 6.9664246 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 29384564, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8518181, "lon": 6.9684403 }, | ||
| { "lat": 50.8522171, "lon": 6.9684787 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31282638, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7547305, "lon": 7.0468957 }, | ||
| { "lat": 50.7550333, "lon": 7.0462257 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31282787, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7548175, "lon": 7.0462659 }, | ||
| { "lat": 50.7545192, "lon": 7.0469416 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 383262762, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7545192, "lon": 7.0469416 }, | ||
| { "lat": 50.7522859, "lon": 7.0519784 }, | ||
| { "lat": 50.7519030, "lon": 7.0528750 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31304443, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7519030, "lon": 7.0528750 }, | ||
| { "lat": 50.7514373, "lon": 7.0540731 }, | ||
| { "lat": 50.7512408, "lon": 7.0546346 }, | ||
| { "lat": 50.7511231, "lon": 7.0549962 }, | ||
| { "lat": 50.7508172, "lon": 7.0560135 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 128541594, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7508172, "lon": 7.0560135 }, | ||
| { "lat": 50.7504938, "lon": 7.0572440 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31304503, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7509429, "lon": 7.0561605 }, | ||
| { "lat": 50.7512483, "lon": 7.0551357 }, | ||
| { "lat": 50.7513759, "lon": 7.0547500 }, | ||
| { "lat": 50.7515670, "lon": 7.0542197 }, | ||
| { "lat": 50.7520213, "lon": 7.0530348 }, | ||
| { "lat": 50.7524214, "lon": 7.0520935 }, | ||
| { "lat": 50.7547305, "lon": 7.0468957 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31363881, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8026288, "lon": 6.9992932 }, | ||
| { "lat": 50.8018617, "lon": 7.0000625 }, | ||
| { "lat": 50.8010270, "lon": 7.0007950 }, | ||
| { "lat": 50.8001164, "lon": 7.0015291 }, | ||
| { "lat": 50.7928343, "lon": 7.0072406 }, | ||
| { "lat": 50.7832350, "lon": 7.0147268 }, | ||
| { "lat": 50.7826087, "lon": 7.0151803 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31363891, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7826087, "lon": 7.0151803 }, | ||
| { "lat": 50.7823221, "lon": 7.0153822 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31363892, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7823221, "lon": 7.0153822 }, | ||
| { "lat": 50.7802850, "lon": 7.0170023 }, | ||
| { "lat": 50.7782200, "lon": 7.0186241 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31363898, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7826777, "lon": 7.0153975 }, | ||
| { "lat": 50.7833048, "lon": 7.0149295 }, | ||
| { "lat": 50.8001641, "lon": 7.0017836 }, | ||
| { "lat": 50.8010947, "lon": 7.0010142 }, | ||
| { "lat": 50.8019538, "lon": 7.0002540 }, | ||
| { "lat": 50.8026483, "lon": 6.9995590 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31363910, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7823930, "lon": 7.0156008 }, | ||
| { "lat": 50.7826777, "lon": 7.0153975 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364152, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7782200, "lon": 7.0186241 }, | ||
| { "lat": 50.7779774, "lon": 7.0188037 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364158, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7783056, "lon": 7.0188240 }, | ||
| { "lat": 50.7788577, "lon": 7.0183860 }, | ||
| { "lat": 50.7803473, "lon": 7.0172040 }, | ||
| { "lat": 50.7816582, "lon": 7.0161766 }, | ||
| { "lat": 50.7823930, "lon": 7.0156008 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364178, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7780676, "lon": 7.0190054 }, | ||
| { "lat": 50.7783056, "lon": 7.0188240 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364384, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7749036, "lon": 7.0214625 }, | ||
| { "lat": 50.7780676, "lon": 7.0190054 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364387, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7744886, "lon": 7.0214841 }, | ||
| { "lat": 50.7712930, "lon": 7.0240315 }, | ||
| { "lat": 50.7695809, "lon": 7.0254447 }, | ||
| { "lat": 50.7686243, "lon": 7.0263151 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364484, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7748248, "lon": 7.0212347 }, | ||
| { "lat": 50.7744886, "lon": 7.0214841 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364512, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7745735, "lon": 7.0217089 }, | ||
| { "lat": 50.7749036, "lon": 7.0214625 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364656, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7686546, "lon": 7.0266216 }, | ||
| { "lat": 50.7696586, "lon": 7.0256891 }, | ||
| { "lat": 50.7713905, "lon": 7.0242565 }, | ||
| { "lat": 50.7745735, "lon": 7.0217089 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364667, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7686243, "lon": 7.0263151 }, | ||
| { "lat": 50.7676165, "lon": 7.0273126 }, | ||
| { "lat": 50.7665957, "lon": 7.0283332 }, | ||
| { "lat": 50.7653333, "lon": 7.0297134 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008234, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7653333, "lon": 7.0297134 }, | ||
| { "lat": 50.7643799, "lon": 7.0308081 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364888, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7635269, "lon": 7.0321873 }, | ||
| { "lat": 50.7641966, "lon": 7.0313729 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 122158730, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7641966, "lon": 7.0313729 }, | ||
| { "lat": 50.7644716, "lon": 7.0310241 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31364985, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7644716, "lon": 7.0310241 }, | ||
| { "lat": 50.7648596, "lon": 7.0305814 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008235, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7648596, "lon": 7.0305814 }, | ||
| { "lat": 50.7657812, "lon": 7.0295145 }, | ||
| { "lat": 50.7666465, "lon": 7.0285903 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008231, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7666465, "lon": 7.0285903 }, | ||
| { "lat": 50.7679887, "lon": 7.0272481 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008233, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7679887, "lon": 7.0272481 }, | ||
| { "lat": 50.7686546, "lon": 7.0266216 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31365377, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7643799, "lon": 7.0308081 }, | ||
| { "lat": 50.7640807, "lon": 7.0311662 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31365425, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7640807, "lon": 7.0311662 }, | ||
| { "lat": 50.7638566, "lon": 7.0314272 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008236, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7638566, "lon": 7.0314272 }, | ||
| { "lat": 50.7628914, "lon": 7.0326760 }, | ||
| { "lat": 50.7621053, "lon": 7.0336961 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 36447898, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7621053, "lon": 7.0336961 }, | ||
| { "lat": 50.7613433, "lon": 7.0347526 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008228, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7613433, "lon": 7.0347526 }, | ||
| { "lat": 50.7608295, "lon": 7.0354890 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31366812, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7588227, "lon": 7.0386254 }, | ||
| { "lat": 50.7583011, "lon": 7.0394929 }, | ||
| { "lat": 50.7576749, "lon": 7.0405773 }, | ||
| { "lat": 50.7569096, "lon": 7.0419812 }, | ||
| { "lat": 50.7558745, "lon": 7.0439976 }, | ||
| { "lat": 50.7548175, "lon": 7.0462659 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31366880, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7550333, "lon": 7.0462257 }, | ||
| { "lat": 50.7559939, "lon": 7.0442408 }, | ||
| { "lat": 50.7570656, "lon": 7.0421620 }, | ||
| { "lat": 50.7578037, "lon": 7.0408023 }, | ||
| { "lat": 50.7584541, "lon": 7.0396561 }, | ||
| { "lat": 50.7589669, "lon": 7.0387984 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31367017, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7609333, "lon": 7.0356976 }, | ||
| { "lat": 50.7619690, "lon": 7.0342371 }, | ||
| { "lat": 50.7630051, "lon": 7.0328461 }, | ||
| { "lat": 50.7635269, "lon": 7.0321873 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31367443, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7607331, "lon": 7.0359794 }, | ||
| { "lat": 50.7609333, "lon": 7.0356976 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31367449, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7589669, "lon": 7.0387984 }, | ||
| { "lat": 50.7602933, "lon": 7.0366481 }, | ||
| { "lat": 50.7607331, "lon": 7.0359794 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31367526, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7606164, "lon": 7.0358121 }, | ||
| { "lat": 50.7601681, "lon": 7.0365126 }, | ||
| { "lat": 50.7588227, "lon": 7.0386254 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31367534, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7608295, "lon": 7.0354890 }, | ||
| { "lat": 50.7606164, "lon": 7.0358121 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31369852, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7779774, "lon": 7.0188037 }, | ||
| { "lat": 50.7748248, "lon": 7.0212347 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 449397558, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7479418, "lon": 7.0693723 }, | ||
| { "lat": 50.7494783, "lon": 7.0624630 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31797389, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7494783, "lon": 7.0624630 }, | ||
| { "lat": 50.7502727, "lon": 7.0588905 }, | ||
| { "lat": 50.7506441, "lon": 7.0572942 }, | ||
| { "lat": 50.7509429, "lon": 7.0561605 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31798039, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7504938, "lon": 7.0572440 }, | ||
| { "lat": 50.7501306, "lon": 7.0588140 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235363212, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7501306, "lon": 7.0588140 }, | ||
| { "lat": 50.7492636, "lon": 7.0626737 }, | ||
| { "lat": 50.7489407, "lon": 7.0641605 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 156492546, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7489407, "lon": 7.0641605 }, | ||
| { "lat": 50.7488307, "lon": 7.0647205 }, | ||
| { "lat": 50.7483739, "lon": 7.0668216 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 156492545, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7483739, "lon": 7.0668216 }, | ||
| { "lat": 50.7483009, "lon": 7.0672440 }, | ||
| { "lat": 50.7478400, "lon": 7.0692844 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 130749935, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.7478400, "lon": 7.0692844 }, | ||
| { "lat": 50.7477294, "lon": 7.0697394 }, | ||
| { "lat": 50.7476187, "lon": 7.0701855 }, | ||
| { "lat": 50.7474997, "lon": 7.0706232 }, | ||
| { "lat": 50.7473468, "lon": 7.0711189 }, | ||
| { "lat": 50.7472087, "lon": 7.0715434 }, | ||
| { "lat": 50.7470472, "lon": 7.0719838 }, | ||
| { "lat": 50.7469114, "lon": 7.0723163 }, | ||
| { "lat": 50.7467733, "lon": 7.0726489 }, | ||
| { "lat": 50.7465937, "lon": 7.0730580 }, | ||
| { "lat": 50.7464112, "lon": 7.0734310 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32472877, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8246828, "lon": 6.9651077 }, | ||
| { "lat": 50.8253375, "lon": 6.9647718 }, | ||
| { "lat": 50.8260000, "lon": 6.9645354 }, | ||
| { "lat": 50.8266134, "lon": 6.9643649 }, | ||
| { "lat": 50.8272671, "lon": 6.9642646 }, | ||
| { "lat": 50.8278017, "lon": 6.9642349 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31798988, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8278017, "lon": 6.9642349 }, | ||
| { "lat": 50.8284805, "lon": 6.9642342 }, | ||
| { "lat": 50.8294617, "lon": 6.9643395 }, | ||
| { "lat": 50.8302437, "lon": 6.9644810 }, | ||
| { "lat": 50.8309474, "lon": 6.9646345 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 31798989, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8590359, "lon": 6.9691023 }, | ||
| { "lat": 50.8634113, "lon": 6.9695191 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820560, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8634113, "lon": 6.9695191 }, | ||
| { "lat": 50.8656224, "lon": 6.9697185 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820563, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8656224, "lon": 6.9697185 }, | ||
| { "lat": 50.8679633, "lon": 6.9699314 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820564, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8679633, "lon": 6.9699314 }, | ||
| { "lat": 50.8691580, "lon": 6.9700171 }, | ||
| { "lat": 50.8699302, "lon": 6.9700221 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 235820570, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8699302, "lon": 6.9700221 }, | ||
| { "lat": 50.8717399, "lon": 6.9699121 }, | ||
| { "lat": 50.8746263, "lon": 6.9695939 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32472855, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8246253, "lon": 6.9648384 }, | ||
| { "lat": 50.8242516, "lon": 6.9650453 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32472856, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8242516, "lon": 6.9650453 }, | ||
| { "lat": 50.8237235, "lon": 6.9653841 }, | ||
| { "lat": 50.8232034, "lon": 6.9657948 }, | ||
| { "lat": 50.8224317, "lon": 6.9665263 }, | ||
| { "lat": 50.8216642, "lon": 6.9673886 }, | ||
| { "lat": 50.8209037, "lon": 6.9684049 }, | ||
| { "lat": 50.8201541, "lon": 6.9695500 }, | ||
| { "lat": 50.8192181, "lon": 6.9711445 }, | ||
| { "lat": 50.8138575, "lon": 6.9806731 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 37881520, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8138575, "lon": 6.9806731 }, | ||
| { "lat": 50.8135770, "lon": 6.9811721 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 37881519, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8135770, "lon": 6.9811721 }, | ||
| { "lat": 50.8113547, "lon": 6.9851361 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 234434902, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8113547, "lon": 6.9851361 }, | ||
| { "lat": 50.8105743, "lon": 6.9865001 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32472875, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8243279, "lon": 6.9653077 }, | ||
| { "lat": 50.8246828, "lon": 6.9651077 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32473071, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8309464, "lon": 6.9643368 }, | ||
| { "lat": 50.8302815, "lon": 6.9641912 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 128522486, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8302815, "lon": 6.9641912 }, | ||
| { "lat": 50.8294728, "lon": 6.9640448 }, | ||
| { "lat": 50.8284964, "lon": 6.9639463 }, | ||
| { "lat": 50.8277970, "lon": 6.9639432 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 36447896, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8277970, "lon": 6.9639432 }, | ||
| { "lat": 50.8272631, "lon": 6.9639682 }, | ||
| { "lat": 50.8265661, "lon": 6.9640827 }, | ||
| { "lat": 50.8259717, "lon": 6.9642405 }, | ||
| { "lat": 50.8252714, "lon": 6.9645096 }, | ||
| { "lat": 50.8246253, "lon": 6.9648384 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32473075, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8314332, "lon": 6.9644546 }, | ||
| { "lat": 50.8309464, "lon": 6.9643368 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32473086, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8309474, "lon": 6.9646345 }, | ||
| { "lat": 50.8314534, "lon": 6.9647679 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 32473087, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8314534, "lon": 6.9647679 }, | ||
| { "lat": 50.8386440, "lon": 6.9665955 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 40033064, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8386440, "lon": 6.9665955 }, | ||
| { "lat": 50.8391695, "lon": 6.9667285 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 189189059, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8746263, "lon": 6.9695939 }, | ||
| { "lat": 50.8760907, "lon": 6.9694358 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 271008225, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8760907, "lon": 6.9694358 }, | ||
| { "lat": 50.8775484, "lon": 6.9692784 } | ||
| ] | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 41550921, | ||
| "role": "", | ||
| "geometry": [ | ||
| { "lat": 50.8775484, "lon": 6.9692784 }, | ||
| { "lat": 50.8797318, "lon": 6.9690108 } | ||
| ] | ||
| } | ||
| ], | ||
| "tags": { | ||
| "TMC:cid_58:tabcd_1:Class": "Road", | ||
| "TMC:cid_58:tabcd_1:LCLversion": "8.00", | ||
| "TMC:cid_58:tabcd_1:LocationCode": "7142", | ||
| "name": "Bundesautobahn 555", | ||
| "network": "BAB", | ||
| "operator": "Bundesrepublik Deutschland", | ||
| "ref": "A 555", | ||
| "route": "road", | ||
| "type": "route", | ||
| "wikipedia": "de:Bundesautobahn 555" | ||
| } | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2014-12-14T13:34:02Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "node", | ||
| "id": 3233854233, | ||
| "lat": 50.7494187, | ||
| "lon": 7.1758731 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 3233854234, | ||
| "lat": 50.7494287, | ||
| "lon": 7.1758731 | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "id": 317146077, | ||
| "nodes": [ | ||
| 3233854233, | ||
| 3233854234 | ||
| ], | ||
| "tags": { | ||
| "building": "yes" | ||
| } | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2014-12-14T13:34:02Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "area", | ||
| "id": 3605945176 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 3233854233, | ||
| "lat": 50.7494187, | ||
| "lon": 7.1758731 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 3233854235, | ||
| "lat": 50.7494287, | ||
| "lon": 7.1758731 | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "id": 317146078, | ||
| "nodes": [ | ||
| 3233854233, | ||
| 3233854235 | ||
| ], | ||
| "tags": { | ||
| "building": "yes" | ||
| } | ||
| }, | ||
| { | ||
| "type": "relation", | ||
| "id": 2046898, | ||
| "timestamp": "2014-12-15T13:13:11Z", | ||
| "version": 12, | ||
| "changeset": 17433822, | ||
| "user": "Username", | ||
| "uid": 12345, | ||
| "members": [ | ||
| { | ||
| "type": "node", | ||
| "ref": 3233854233, | ||
| "role": "platform" | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "ref": 3233854234, | ||
| "role": "stop" | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "ref": 3233854235, | ||
| "role": "platform" | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "ref": 317146078, | ||
| "role": "" | ||
| } | ||
| ], | ||
| "tags": { | ||
| "from": "Here", | ||
| "name": "Test relation", | ||
| "ref": "609", | ||
| "route": "bus", | ||
| "to": "There", | ||
| "type": "route" | ||
| } | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2014-12-14T13:34:02Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "way", | ||
| "id": 317146077, | ||
| "nodes": [ | ||
| 3233854233, | ||
| 3233854234 | ||
| ], | ||
| "tags": { | ||
| "building": "yes" | ||
| } | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2014-12-14T13:34:02Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "node", | ||
| "id": 3233854233, | ||
| "lat": 50.7494187, | ||
| "lon": 7.1758731 | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "id": 317146077, | ||
| "nodes": [ | ||
| 3233854233, | ||
| 3233854234 | ||
| ], | ||
| "tags": { | ||
| "building": "yes" | ||
| } | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2014-12-14T13:34:02Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "node", | ||
| "id": 3233854233, | ||
| "lat": 50.7494187, | ||
| "lon": 7.1758731 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 3233854234, | ||
| "lat": 50.7494287, | ||
| "lon": 7.1758731 | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "id": 317146077, | ||
| "nodes": [ | ||
| 3233854233, | ||
| 3233854234 | ||
| ], | ||
| "tags": { | ||
| "building": "yes" | ||
| } | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2014-12-14T13:33:02Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "way", | ||
| "id": 317146077, | ||
| "nodes": [ | ||
| 3233854241, | ||
| 3233854238, | ||
| 3233854233, | ||
| 3233854234, | ||
| 3233854236, | ||
| 3233854237, | ||
| 3233854241 | ||
| ], | ||
| "tags": { | ||
| "building": "yes" | ||
| } | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "id": 317146078, | ||
| "timestamp": "2014-12-14T07:27:21Z", | ||
| "version": 1, | ||
| "changeset": 23456789, | ||
| "user": "TestUser", | ||
| "uid": 345678, | ||
| "nodes": [ | ||
| 3233854241, | ||
| 3233854238, | ||
| 3233854233, | ||
| 3233854234, | ||
| 3233854236, | ||
| 3233854237, | ||
| 3233854241 | ||
| ] | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2014-12-14T13:34:02Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "node", | ||
| "id": 3233854233, | ||
| "lat": 50.7494187, | ||
| "lon": 7.1758731 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 3233854234, | ||
| "lat": 50.7494236, | ||
| "lon": 7.1757664 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 3233854236, | ||
| "lat": 50.7494909, | ||
| "lon": 7.1757741 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 3233854237, | ||
| "lat": 50.7494985, | ||
| "lon": 7.1756064 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 3233854238, | ||
| "lat": 50.7495391, | ||
| "lon": 7.1758868 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 3233854241, | ||
| "lat": 50.7495516, | ||
| "lon": 7.1756125 | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "id": 317146077, | ||
| "nodes": [ | ||
| 3233854241, | ||
| 3233854238, | ||
| 3233854233, | ||
| 3233854234, | ||
| 3233854236, | ||
| 3233854237, | ||
| 3233854241 | ||
| ], | ||
| "tags": { | ||
| "building": "yes" | ||
| } | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2016-11-22T22:33:02Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "node", | ||
| "id": 2343425523, | ||
| "lat": 41.8954452, | ||
| "lon": 12.5032169, | ||
| "timestamp": "2013-06-13T15:34:01Z", | ||
| "version": 1, | ||
| "changeset": 16539126, | ||
| "user": "Giardia", | ||
| "uid": 113909 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 2343425525, | ||
| "lat": 41.8954752, | ||
| "lon": 12.5031604, | ||
| "timestamp": "2013-06-13T15:34:01Z", | ||
| "version": 1, | ||
| "changeset": 16539126, | ||
| "user": "Giardia", | ||
| "uid": 113909 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 2343425526, | ||
| "lat": 41.8955244, | ||
| "lon": 12.5032926, | ||
| "timestamp": "2013-06-13T15:34:01Z", | ||
| "version": 1, | ||
| "changeset": 16539126, | ||
| "user": "Giardia", | ||
| "uid": 113909 | ||
| }, | ||
| { | ||
| "type": "node", | ||
| "id": 2343425528, | ||
| "lat": 41.8955543, | ||
| "lon": 12.5032362, | ||
| "timestamp": "2013-06-13T15:34:01Z", | ||
| "version": 1, | ||
| "changeset": 16539126, | ||
| "user": "Giardia", | ||
| "uid": 113909 | ||
| }, | ||
| { | ||
| "type": "way", | ||
| "id": 225576797, | ||
| "timestamp": "2013-06-13T15:34:01Z", | ||
| "version": 1, | ||
| "changeset": 16539126, | ||
| "user": "Giardia", | ||
| "uid": 113909, | ||
| "center": { | ||
| "lat": 41.8954998, | ||
| "lon": 12.5032265 | ||
| }, | ||
| "nodes": [ | ||
| 2343425525, | ||
| 2343425528, | ||
| 2343425526, | ||
| 2343425523, | ||
| 2343425525 | ||
| ], | ||
| "tags": { | ||
| "building": "kiosk", | ||
| "shop": "florist" | ||
| } | ||
| } | ||
| ] | ||
| } |
| { | ||
| "version": 0.6, | ||
| "generator": "Overpass API", | ||
| "osm3s": { | ||
| "timestamp_osm_base": "2016-11-22T23:25:02Z", | ||
| "copyright": "The data included in this document is from www.openstreetmap.org. The data is made available under ODbL." | ||
| }, | ||
| "elements": [ | ||
| { | ||
| "type": "way", | ||
| "id": 225576797, | ||
| "center": {}, | ||
| "nodes": [ | ||
| 2343425525, | ||
| 2343425528, | ||
| 2343425526, | ||
| 2343425523, | ||
| 2343425525 | ||
| ], | ||
| "tags": { | ||
| "building": "kiosk", | ||
| "shop": "florist" | ||
| } | ||
| } | ||
| ] | ||
| } |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" | ||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | ||
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | ||
| <head> | ||
| <meta http-equiv="content-type" content="text/html; charset=utf-8" lang="en"/> | ||
| <title>OSM3S Response</title> | ||
| </head> | ||
| <body> | ||
| <p>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</p> | ||
| <!-- Wrong encoding iso8859-15 --> | ||
| <p><strong style="color:#FF0000">Error</strong>: line 2: parse error: ';' expected - 'out' found. ���</p> | ||
| </body> | ||
| </html> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" | ||
| "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | ||
| <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> | ||
| <head> | ||
| <meta http-equiv="content-type" content="text/html; charset=utf-8" lang="en"/> | ||
| <title>OSM3S Response</title> | ||
| </head> | ||
| <body> | ||
| <p>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</p> | ||
| <p><strong style="color:#FF0000">Error</strong>: line 2: parse error: ';' expected - 'out' found. </p> | ||
| </body> | ||
| </html> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <osm version="0.6" generator="Overpass API"> | ||
| <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note> | ||
| <meta osm_base="2016-11-22T20:23:03Z" areas="2016-11-22T19:07:02Z"/> | ||
| <area id="2448756446"> | ||
| <tag k="addr:city" v="Troisdorf"/> | ||
| <tag k="addr:postcode" v="53840"/> | ||
| <tag k="area" v="yes"/> | ||
| <tag k="description" v="Troisdorf Bahnsteig Gleis 9"/> | ||
| <tag k="name" v="Troisdorf"/> | ||
| <tag k="public_transport" v="platform"/> | ||
| <tag k="railway" v="platform"/> | ||
| <tag k="ref" v="9"/> | ||
| <tag k="train" v="yes"/> | ||
| <tag k="wheelchair" v="no"/> | ||
| <tag k="wheelchair:description" v="Plattformlift ist vorhanden, Betriebsbereitschaft nach 8 Jahren stillstand fraglich."/> | ||
| <tag k="width" v="5"/> | ||
| </area> | ||
| <area id="3600055060"> | ||
| <tag k="TMC:cid_58:tabcd_1:Class" v="Area"/> | ||
| <tag k="TMC:cid_58:tabcd_1:LCLversion" v="8.00"/> | ||
| <tag k="TMC:cid_58:tabcd_1:LocationCode" v="2550"/> | ||
| <tag k="admin_level" v="8"/> | ||
| <tag k="boundary" v="administrative"/> | ||
| <tag k="de:amtlicher_gemeindeschluessel" v="05382068"/> | ||
| <tag k="de:place" v="town"/> | ||
| <tag k="de:regionalschluessel" v="053820068068"/> | ||
| <tag k="name" v="Troisdorf"/> | ||
| <tag k="name:prefix" v="Stadt"/> | ||
| <tag k="type" v="boundary"/> | ||
| <tag k="wikidata" v="Q3900"/> | ||
| <tag k="wikipedia" v="de:Troisdorf"/> | ||
| </area> | ||
| <area id="3605945175"> | ||
| <tag k="addr:city" v="Troisdorf"/> | ||
| <tag k="addr:postcode" v="53840"/> | ||
| <tag k="description" v="Troisdorf Bahnsteig Gleis 1+2"/> | ||
| <tag k="local_ref" v="1;2"/> | ||
| <tag k="name" v="Troisdorf"/> | ||
| <tag k="public_transport" v="platform"/> | ||
| <tag k="railway" v="platform"/> | ||
| <tag k="ref" v="1/2"/> | ||
| <tag k="tactile_paving" v="yes"/> | ||
| <tag k="train" v="yes"/> | ||
| <tag k="type" v="multipolygon"/> | ||
| <tag k="wheelchair" v="yes"/> | ||
| </area> | ||
| <area id="3605945176"> | ||
| <tag k="addr:city" v="Troisdorf"/> | ||
| <tag k="addr:postcode" v="53840"/> | ||
| <tag k="description" v="Troisdorf Bahnsteig Gleis 5+6"/> | ||
| <tag k="name" v="Troisdorf"/> | ||
| <tag k="phone" v="+49 221 1411055"/> | ||
| <tag k="public_transport" v="platform"/> | ||
| <tag k="railway" v="platform"/> | ||
| <tag k="ref" v="5/6"/> | ||
| <tag k="tactile_paving" v="yes"/> | ||
| <tag k="train" v="yes"/> | ||
| <tag k="type" v="multipolygon"/> | ||
| <tag k="wheelchair" v="yes"/> | ||
| <tag k="wheelchair:description" v="Der Aufzug zu diesem Bahnsteig ist oft defekt, bitte informieren. Betriebszustand kann bei 3S-Zentrale erfragt werden (siehe Telefonnummer, aber Vorsicht, die sind nicht immer informiert!)"/> | ||
| <tag k="width" v="6"/> | ||
| </area> | ||
| </osm> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <osm version="0.6" generator="Overpass API"> | ||
| <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note> | ||
| <meta osm_base="2014-12-14T12:58:02Z"/> | ||
| <node id="50878400" lat="50.7461788" lon="7.1742257"/> | ||
| <node id="100793192" lat="50.7468472" lon="7.1709376"> | ||
| <tag k="highway" v="turning_circle"/> | ||
| </node> | ||
| <node id="3233854234" lat="50.7494236" lon="7.1757664" version="1" timestamp="2014-12-14T07:27:19Z" changeset="23456789" uid="345678" user="TestUser"/> | ||
| </osm> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <osm version="0.6" generator="Overpass API"> | ||
| <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note> | ||
| <meta osm_base="2014-12-21T20:00:03Z"/> | ||
| <relation id="2046898" version="12" timestamp="2014-12-15T13:13:11Z" changeset="17433822" uid="12345" user="Username"> | ||
| <member type="node" ref="507464632" role="platform"/> | ||
| <member type="node" ref="2252681768" role="stop"/> | ||
| <member type="node" ref="507464636" role="platform"/> | ||
| <member type="node" ref="1620886108" role="stop"/> | ||
| <member type="way" ref="4893348" role=""/> | ||
| <tag k="from" v="Here"/> | ||
| <tag k="name" v="Test relation"/> | ||
| <tag k="ref" v="609"/> | ||
| <tag k="route" v="bus"/> | ||
| <tag k="to" v="There"/> | ||
| <tag k="type" v="route"/> | ||
| </relation> | ||
| </osm> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <osm version="0.6" generator="Overpass API"> | ||
| <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note> | ||
| <meta osm_base="2014-12-14T13:34:02Z"/> | ||
| <node id="3233854233" lat="50.7494187" lon="7.1758731"/> | ||
| <node id="3233854234" lat="50.7494287" lon="7.1758731"/> | ||
| <node id="3233854235" lat="50.7494287" lon="7.1758731"/> | ||
| <way id="317146078"> | ||
| <nd ref="3233854233"/> | ||
| <nd ref="3233854234"/> | ||
| <nd ref="3233854235"/> | ||
| </way> | ||
| <relation id="2046898" version="12" timestamp="2014-12-15T13:13:11Z" changeset="17433822" uid="12345" user="Username"> | ||
| <member type="node" ref="3233854233" role="platform"/> | ||
| <member type="node" ref="3233854234" role="stop"/> | ||
| <member type="node" ref="3233854235" role="platform"/> | ||
| <member type="way" ref="317146078" role=""/> | ||
| <tag k="from" v="Here"/> | ||
| <tag k="name" v="Test relation"/> | ||
| <tag k="ref" v="609"/> | ||
| <tag k="route" v="bus"/> | ||
| <tag k="to" v="There"/> | ||
| <tag k="type" v="route"/> | ||
| </relation> | ||
| </osm> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <osm version="0.6" generator="Overpass API"> | ||
| <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note> | ||
| <meta osm_base="2016-11-23T20:27:02Z"/> | ||
| <relation id="23092"> | ||
| <center lat="50.8176646" lon="7.0208539"/> | ||
| <member type="way" ref="4334856" role=""/> | ||
| <member type="way" ref="234434903" role=""/> | ||
| <member type="way" ref="37881522" role=""/> | ||
| <member type="way" ref="37881521" role=""/> | ||
| <member type="way" ref="4356491" role=""/> | ||
| <member type="way" ref="235363211" role=""/> | ||
| <member type="way" ref="48290877" role=""/> | ||
| <member type="way" ref="210683519" role=""/> | ||
| <member type="way" ref="42743961" role=""/> | ||
| <member type="way" ref="210683522" role=""/> | ||
| <member type="way" ref="48290881" role=""/> | ||
| <member type="way" ref="235363214" role=""/> | ||
| <member type="way" ref="4400137" role=""/> | ||
| <member type="way" ref="230940375" role=""/> | ||
| <member type="way" ref="4400140" role=""/> | ||
| <member type="way" ref="4400142" role=""/> | ||
| <member type="way" ref="235824476" role=""/> | ||
| <member type="way" ref="4400143" role=""/> | ||
| <member type="way" ref="235824475" role=""/> | ||
| <member type="way" ref="178797123" role=""/> | ||
| <member type="way" ref="233553030" role=""/> | ||
| <member type="way" ref="4829989" role=""/> | ||
| <member type="way" ref="99834112" role=""/> | ||
| <member type="way" ref="133081219" role=""/> | ||
| <member type="way" ref="234434905" role=""/> | ||
| <member type="way" ref="20661567" role=""/> | ||
| <member type="way" ref="230941900" role=""/> | ||
| <member type="way" ref="20661568" role=""/> | ||
| <member type="way" ref="20661572" role=""/> | ||
| <member type="way" ref="230940374" role=""/> | ||
| <member type="way" ref="20661573" role=""/> | ||
| <member type="way" ref="20662817" role=""/> | ||
| <member type="way" ref="230941903" role=""/> | ||
| <member type="way" ref="20662819" role=""/> | ||
| <member type="way" ref="20662824" role=""/> | ||
| <member type="way" ref="20662827" role=""/> | ||
| <member type="way" ref="27492515" role=""/> | ||
| <member type="way" ref="129125122" role=""/> | ||
| <member type="way" ref="234434901" role=""/> | ||
| <member type="way" ref="234434904" role=""/> | ||
| <member type="way" ref="27492542" role=""/> | ||
| <member type="way" ref="27492543" role=""/> | ||
| <member type="way" ref="29233646" role=""/> | ||
| <member type="way" ref="235820561" role=""/> | ||
| <member type="way" ref="29233647" role=""/> | ||
| <member type="way" ref="235820559" role=""/> | ||
| <member type="way" ref="235820562" role=""/> | ||
| <member type="way" ref="29233648" role=""/> | ||
| <member type="way" ref="29382960" role=""/> | ||
| <member type="way" ref="271008229" role=""/> | ||
| <member type="way" ref="271008238" role=""/> | ||
| <member type="way" ref="271008230" role=""/> | ||
| <member type="way" ref="271008226" role=""/> | ||
| <member type="way" ref="40033062" role=""/> | ||
| <member type="way" ref="40033063" role=""/> | ||
| <member type="way" ref="29384561" role=""/> | ||
| <member type="way" ref="29384563" role=""/> | ||
| <member type="way" ref="271008224" role=""/> | ||
| <member type="way" ref="271008227" role=""/> | ||
| <member type="way" ref="271008237" role=""/> | ||
| <member type="way" ref="271008232" role=""/> | ||
| <member type="way" ref="271008239" role=""/> | ||
| <member type="way" ref="29384564" role=""/> | ||
| <member type="way" ref="31282638" role=""/> | ||
| <member type="way" ref="31282787" role=""/> | ||
| <member type="way" ref="383262762" role=""/> | ||
| <member type="way" ref="31304443" role=""/> | ||
| <member type="way" ref="128541594" role=""/> | ||
| <member type="way" ref="31304503" role=""/> | ||
| <member type="way" ref="31363881" role=""/> | ||
| <member type="way" ref="31363891" role=""/> | ||
| <member type="way" ref="31363892" role=""/> | ||
| <member type="way" ref="31363898" role=""/> | ||
| <member type="way" ref="31363910" role=""/> | ||
| <member type="way" ref="31364152" role=""/> | ||
| <member type="way" ref="31364158" role=""/> | ||
| <member type="way" ref="31364178" role=""/> | ||
| <member type="way" ref="31364384" role=""/> | ||
| <member type="way" ref="31364387" role=""/> | ||
| <member type="way" ref="31364484" role=""/> | ||
| <member type="way" ref="31364512" role=""/> | ||
| <member type="way" ref="31364656" role=""/> | ||
| <member type="way" ref="31364667" role=""/> | ||
| <member type="way" ref="271008234" role=""/> | ||
| <member type="way" ref="31364888" role=""/> | ||
| <member type="way" ref="122158730" role=""/> | ||
| <member type="way" ref="31364985" role=""/> | ||
| <member type="way" ref="271008235" role=""/> | ||
| <member type="way" ref="271008231" role=""/> | ||
| <member type="way" ref="271008233" role=""/> | ||
| <member type="way" ref="31365377" role=""/> | ||
| <member type="way" ref="31365425" role=""/> | ||
| <member type="way" ref="271008236" role=""/> | ||
| <member type="way" ref="36447898" role=""/> | ||
| <member type="way" ref="271008228" role=""/> | ||
| <member type="way" ref="31366812" role=""/> | ||
| <member type="way" ref="31366880" role=""/> | ||
| <member type="way" ref="31367017" role=""/> | ||
| <member type="way" ref="31367443" role=""/> | ||
| <member type="way" ref="31367449" role=""/> | ||
| <member type="way" ref="31367526" role=""/> | ||
| <member type="way" ref="31367534" role=""/> | ||
| <member type="way" ref="31369852" role=""/> | ||
| <member type="way" ref="449397558" role=""/> | ||
| <member type="way" ref="31797389" role=""/> | ||
| <member type="way" ref="31798039" role=""/> | ||
| <member type="way" ref="235363212" role=""/> | ||
| <member type="way" ref="156492546" role=""/> | ||
| <member type="way" ref="156492545" role=""/> | ||
| <member type="way" ref="130749935" role=""/> | ||
| <member type="way" ref="32472877" role=""/> | ||
| <member type="way" ref="31798988" role=""/> | ||
| <member type="way" ref="31798989" role=""/> | ||
| <member type="way" ref="235820560" role=""/> | ||
| <member type="way" ref="235820563" role=""/> | ||
| <member type="way" ref="235820564" role=""/> | ||
| <member type="way" ref="235820570" role=""/> | ||
| <member type="way" ref="32472855" role=""/> | ||
| <member type="way" ref="32472856" role=""/> | ||
| <member type="way" ref="37881520" role=""/> | ||
| <member type="way" ref="37881519" role=""/> | ||
| <member type="way" ref="234434902" role=""/> | ||
| <member type="way" ref="32472875" role=""/> | ||
| <member type="way" ref="32473071" role=""/> | ||
| <member type="way" ref="128522486" role=""/> | ||
| <member type="way" ref="36447896" role=""/> | ||
| <member type="way" ref="32473075" role=""/> | ||
| <member type="way" ref="32473086" role=""/> | ||
| <member type="way" ref="32473087" role=""/> | ||
| <member type="way" ref="40033064" role=""/> | ||
| <member type="way" ref="189189059" role=""/> | ||
| <member type="way" ref="271008225" role=""/> | ||
| <member type="way" ref="41550921" role=""/> | ||
| <tag k="TMC:cid_58:tabcd_1:Class" v="Road"/> | ||
| <tag k="TMC:cid_58:tabcd_1:LCLversion" v="8.00"/> | ||
| <tag k="TMC:cid_58:tabcd_1:LocationCode" v="7142"/> | ||
| <tag k="name" v="Bundesautobahn 555"/> | ||
| <tag k="network" v="BAB"/> | ||
| <tag k="operator" v="Bundesrepublik Deutschland"/> | ||
| <tag k="ref" v="A 555"/> | ||
| <tag k="route" v="road"/> | ||
| <tag k="type" v="route"/> | ||
| <tag k="wikipedia" v="de:Bundesautobahn 555"/> | ||
| </relation> | ||
| </osm> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <osm version="0.6" generator="Overpass API"> | ||
| <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note> | ||
| <meta osm_base="2016-11-24T22:22:03Z"/> | ||
| <relation id="23092"> | ||
| <bounds minlat="50.7432318" minlon="6.9639432" maxlat="50.8920975" maxlon="7.0777645"/> | ||
| <member type="way" ref="4334856" role=""> | ||
| <nd lat="50.8104598" lon="6.9871803"/> | ||
| <nd lat="50.8117239" lon="6.9849282"/> | ||
| </member> | ||
| <member type="way" ref="234434903" role=""> | ||
| <nd lat="50.8117239" lon="6.9849282"/> | ||
| <nd lat="50.8137408" lon="6.9813352"/> | ||
| </member> | ||
| <member type="way" ref="37881522" role=""> | ||
| <nd lat="50.8137408" lon="6.9813352"/> | ||
| <nd lat="50.8140146" lon="6.9808445"/> | ||
| </member> | ||
| <member type="way" ref="37881521" role=""> | ||
| <nd lat="50.8140146" lon="6.9808445"/> | ||
| <nd lat="50.8193541" lon="6.9713457"/> | ||
| <nd lat="50.8203182" lon="6.9697248"/> | ||
| <nd lat="50.8210652" lon="6.9685758"/> | ||
| <nd lat="50.8217885" lon="6.9676136"/> | ||
| <nd lat="50.8225495" lon="6.9667439"/> | ||
| <nd lat="50.8233005" lon="6.9660515"/> | ||
| <nd lat="50.8238128" lon="6.9656463"/> | ||
| <nd lat="50.8243279" lon="6.9653077"/> | ||
| </member> | ||
| <member type="way" ref="4356491" role=""> | ||
| <nd lat="50.7433997" lon="7.0777645"/> | ||
| <nd lat="50.7434097" lon="7.0775890"/> | ||
| <nd lat="50.7434629" lon="7.0774402"/> | ||
| <nd lat="50.7435198" lon="7.0773718"/> | ||
| <nd lat="50.7437507" lon="7.0771524"/> | ||
| </member> | ||
| <member type="way" ref="235363211" role=""> | ||
| <nd lat="50.7437507" lon="7.0771524"/> | ||
| <nd lat="50.7446592" lon="7.0762926"/> | ||
| </member> | ||
| <member type="way" ref="48290877" role=""> | ||
| <nd lat="50.7446592" lon="7.0762926"/> | ||
| <nd lat="50.7450803" lon="7.0757571"/> | ||
| <nd lat="50.7453888" lon="7.0753312"/> | ||
| <nd lat="50.7457125" lon="7.0748518"/> | ||
| <nd lat="50.7460370" lon="7.0743265"/> | ||
| <nd lat="50.7462718" lon="7.0739425"/> | ||
| <nd lat="50.7464798" lon="7.0735173"/> | ||
| <nd lat="50.7468359" lon="7.0727449"/> | ||
| </member> | ||
| <member type="way" ref="210683519" role=""> | ||
| <nd lat="50.7468359" lon="7.0727449"/> | ||
| <nd lat="50.7471006" lon="7.0720546"/> | ||
| <nd lat="50.7473135" lon="7.0714640"/> | ||
| <nd lat="50.7475199" lon="7.0708095"/> | ||
| <nd lat="50.7479418" lon="7.0693723"/> | ||
| </member> | ||
| <member type="way" ref="42743961" role=""> | ||
| <nd lat="50.7464112" lon="7.0734310"/> | ||
| <nd lat="50.7459053" lon="7.0743560"/> | ||
| <nd lat="50.7457638" lon="7.0745740"/> | ||
| </member> | ||
| <member type="way" ref="210683522" role=""> | ||
| <nd lat="50.7457638" lon="7.0745740"/> | ||
| <nd lat="50.7456300" lon="7.0747409"/> | ||
| <nd lat="50.7454858" lon="7.0749187"/> | ||
| <nd lat="50.7452550" lon="7.0752554"/> | ||
| <nd lat="50.7450000" lon="7.0756385"/> | ||
| <nd lat="50.7448878" lon="7.0758027"/> | ||
| <nd lat="50.7447522" lon="7.0759730"/> | ||
| <nd lat="50.7445514" lon="7.0762032"/> | ||
| <nd lat="50.7443577" lon="7.0764098"/> | ||
| <nd lat="50.7441185" lon="7.0766490"/> | ||
| </member> | ||
| <member type="way" ref="48290881" role=""> | ||
| <nd lat="50.7441185" lon="7.0766490"/> | ||
| <nd lat="50.7439033" lon="7.0768575"/> | ||
| <nd lat="50.7437722" lon="7.0769631"/> | ||
| <nd lat="50.7436609" lon="7.0770394"/> | ||
| </member> | ||
| <member type="way" ref="235363214" role=""> | ||
| <nd lat="50.7436609" lon="7.0770394"/> | ||
| <nd lat="50.7435688" lon="7.0771154"/> | ||
| <nd lat="50.7434662" lon="7.0771906"/> | ||
| <nd lat="50.7434058" lon="7.0772230"/> | ||
| <nd lat="50.7433331" lon="7.0772525"/> | ||
| <nd lat="50.7432822" lon="7.0772636"/> | ||
| <nd lat="50.7432318" lon="7.0772601"/> | ||
| </member> | ||
| <member type="way" ref="4400137" role=""> | ||
| <nd lat="50.8887155" lon="6.9676900"/> | ||
| <nd lat="50.8876384" lon="6.9678150"/> | ||
| </member> | ||
| <member type="way" ref="230940375" role=""> | ||
| <nd lat="50.8876384" lon="6.9678150"/> | ||
| <nd lat="50.8870572" lon="6.9679058"/> | ||
| <nd lat="50.8858563" lon="6.9680103"/> | ||
| </member> | ||
| <member type="way" ref="4400140" role=""> | ||
| <nd lat="50.8797318" lon="6.9690108"/> | ||
| <nd lat="50.8799208" lon="6.9689396"/> | ||
| <nd lat="50.8807058" lon="6.9688470"/> | ||
| <nd lat="50.8824762" lon="6.9687068"/> | ||
| </member> | ||
| <member type="way" ref="4400142" role=""> | ||
| <nd lat="50.8919691" lon="6.9670292"/> | ||
| <nd lat="50.8918982" lon="6.9671419"/> | ||
| <nd lat="50.8918068" lon="6.9672404"/> | ||
| <nd lat="50.8917186" lon="6.9673001"/> | ||
| <nd lat="50.8916153" lon="6.9673480"/> | ||
| <nd lat="50.8914588" lon="6.9673816"/> | ||
| </member> | ||
| <member type="way" ref="235824476" role=""> | ||
| <nd lat="50.8914588" lon="6.9673816"/> | ||
| <nd lat="50.8892470" lon="6.9676302"/> | ||
| <nd lat="50.8887155" lon="6.9676900"/> | ||
| </member> | ||
| <member type="way" ref="4400143" role=""> | ||
| <nd lat="50.8887787" lon="6.9681629"/> | ||
| <nd lat="50.8896224" lon="6.9680604"/> | ||
| <nd lat="50.8897525" lon="6.9680446"/> | ||
| </member> | ||
| <member type="way" ref="235824475" role=""> | ||
| <nd lat="50.8897525" lon="6.9680446"/> | ||
| <nd lat="50.8906556" lon="6.9679349"/> | ||
| <nd lat="50.8912013" lon="6.9678862"/> | ||
| </member> | ||
| <member type="way" ref="178797123" role=""> | ||
| <nd lat="50.8912013" lon="6.9678862"/> | ||
| <nd lat="50.8913492" lon="6.9678648"/> | ||
| </member> | ||
| <member type="way" ref="233553030" role=""> | ||
| <nd lat="50.8913492" lon="6.9678648"/> | ||
| <nd lat="50.8916648" lon="6.9677762"/> | ||
| <nd lat="50.8917895" lon="6.9677694"/> | ||
| <nd lat="50.8919294" lon="6.9677947"/> | ||
| <nd lat="50.8920975" lon="6.9678618"/> | ||
| </member> | ||
| <member type="way" ref="4829989" role=""> | ||
| <nd lat="50.8105743" lon="6.9865001"/> | ||
| <nd lat="50.8088268" lon="6.9896207"/> | ||
| </member> | ||
| <member type="way" ref="99834112" role=""> | ||
| <nd lat="50.8088268" lon="6.9896207"/> | ||
| <nd lat="50.8066272" lon="6.9935457"/> | ||
| <nd lat="50.8057165" lon="6.9951151"/> | ||
| </member> | ||
| <member type="way" ref="133081219" role=""> | ||
| <nd lat="50.8057165" lon="6.9951151"/> | ||
| <nd lat="50.8050332" lon="6.9962100"/> | ||
| <nd lat="50.8043133" lon="6.9972614"/> | ||
| </member> | ||
| <member type="way" ref="234434905" role=""> | ||
| <nd lat="50.8043133" lon="6.9972614"/> | ||
| <nd lat="50.8038004" lon="6.9979304"/> | ||
| <nd lat="50.8032120" lon="6.9986363"/> | ||
| <nd lat="50.8029818" lon="6.9989181"/> | ||
| </member> | ||
| <member type="way" ref="20661567" role=""> | ||
| <nd lat="50.8849681" lon="6.9681126"/> | ||
| <nd lat="50.8839667" lon="6.9682524"/> | ||
| <nd lat="50.8829770" lon="6.9684059"/> | ||
| </member> | ||
| <member type="way" ref="230941900" role=""> | ||
| <nd lat="50.8829770" lon="6.9684059"/> | ||
| <nd lat="50.8826286" lon="6.9684595"/> | ||
| </member> | ||
| <member type="way" ref="20661568" role=""> | ||
| <nd lat="50.8850872" lon="6.9685052"/> | ||
| <nd lat="50.8859127" lon="6.9684079"/> | ||
| </member> | ||
| <member type="way" ref="20661572" role=""> | ||
| <nd lat="50.8859127" lon="6.9684079"/> | ||
| <nd lat="50.8872823" lon="6.9682592"/> | ||
| <nd lat="50.8876807" lon="6.9682539"/> | ||
| </member> | ||
| <member type="way" ref="230940374" role=""> | ||
| <nd lat="50.8876807" lon="6.9682539"/> | ||
| <nd lat="50.8887787" lon="6.9681629"/> | ||
| </member> | ||
| <member type="way" ref="20661573" role=""> | ||
| <nd lat="50.8858563" lon="6.9680103"/> | ||
| <nd lat="50.8849681" lon="6.9681126"/> | ||
| </member> | ||
| <member type="way" ref="20662817" role=""> | ||
| <nd lat="50.8823655" lon="6.9684998"/> | ||
| <nd lat="50.8806620" lon="6.9686453"/> | ||
| </member> | ||
| <member type="way" ref="230941903" role=""> | ||
| <nd lat="50.8806620" lon="6.9686453"/> | ||
| <nd lat="50.8793943" lon="6.9687847"/> | ||
| </member> | ||
| <member type="way" ref="20662819" role=""> | ||
| <nd lat="50.8824762" lon="6.9687068"/> | ||
| <nd lat="50.8827522" lon="6.9686901"/> | ||
| </member> | ||
| <member type="way" ref="20662824" role=""> | ||
| <nd lat="50.8827522" lon="6.9686901"/> | ||
| <nd lat="50.8839133" lon="6.9686122"/> | ||
| <nd lat="50.8850872" lon="6.9685052"/> | ||
| </member> | ||
| <member type="way" ref="20662827" role=""> | ||
| <nd lat="50.8826286" lon="6.9684595"/> | ||
| <nd lat="50.8823655" lon="6.9684998"/> | ||
| </member> | ||
| <member type="way" ref="27492515" role=""> | ||
| <nd lat="50.8029818" lon="6.9989181"/> | ||
| <nd lat="50.8026288" lon="6.9992932"/> | ||
| </member> | ||
| <member type="way" ref="129125122" role=""> | ||
| <nd lat="50.8093979" lon="6.9890430"/> | ||
| <nd lat="50.8104598" lon="6.9871803"/> | ||
| </member> | ||
| <member type="way" ref="234434901" role=""> | ||
| <nd lat="50.8063753" lon="6.9944172"/> | ||
| <nd lat="50.8093979" lon="6.9890430"/> | ||
| </member> | ||
| <member type="way" ref="234434904" role=""> | ||
| <nd lat="50.8053262" lon="6.9961817"/> | ||
| <nd lat="50.8058108" lon="6.9953914"/> | ||
| <nd lat="50.8063753" lon="6.9944172"/> | ||
| </member> | ||
| <member type="way" ref="27492542" role=""> | ||
| <nd lat="50.8029899" lon="6.9991939"/> | ||
| <nd lat="50.8032828" lon="6.9988807"/> | ||
| <nd lat="50.8038702" lon="6.9982129"/> | ||
| <nd lat="50.8044350" lon="6.9974695"/> | ||
| <nd lat="50.8053262" lon="6.9961817"/> | ||
| </member> | ||
| <member type="way" ref="27492543" role=""> | ||
| <nd lat="50.8026483" lon="6.9995590"/> | ||
| <nd lat="50.8029899" lon="6.9991939"/> | ||
| </member> | ||
| <member type="way" ref="29233646" role=""> | ||
| <nd lat="50.8793943" lon="6.9687847"/> | ||
| <nd lat="50.8716935" lon="6.9696241"/> | ||
| <nd lat="50.8701666" lon="6.9697243"/> | ||
| <nd lat="50.8688585" lon="6.9697057"/> | ||
| <nd lat="50.8652424" lon="6.9693872"/> | ||
| </member> | ||
| <member type="way" ref="235820561" role=""> | ||
| <nd lat="50.8652424" lon="6.9693872"/> | ||
| <nd lat="50.8636340" lon="6.9692339"/> | ||
| </member> | ||
| <member type="way" ref="29233647" role=""> | ||
| <nd lat="50.8636340" lon="6.9692339"/> | ||
| <nd lat="50.8608791" lon="6.9689787"/> | ||
| </member> | ||
| <member type="way" ref="235820559" role=""> | ||
| <nd lat="50.8608791" lon="6.9689787"/> | ||
| <nd lat="50.8590168" lon="6.9688055"/> | ||
| </member> | ||
| <member type="way" ref="235820562" role=""> | ||
| <nd lat="50.8590168" lon="6.9688055"/> | ||
| <nd lat="50.8523854" lon="6.9681888"/> | ||
| </member> | ||
| <member type="way" ref="29233648" role=""> | ||
| <nd lat="50.8522171" lon="6.9684787"/> | ||
| <nd lat="50.8590359" lon="6.9691023"/> | ||
| </member> | ||
| <member type="way" ref="29382960" role=""> | ||
| <nd lat="50.8391695" lon="6.9667285"/> | ||
| <nd lat="50.8411491" lon="6.9672118"/> | ||
| <nd lat="50.8425706" lon="6.9674985"/> | ||
| </member> | ||
| <member type="way" ref="271008229" role=""> | ||
| <nd lat="50.8425706" lon="6.9674985"/> | ||
| <nd lat="50.8443277" lon="6.9677563"/> | ||
| </member> | ||
| <member type="way" ref="271008238" role=""> | ||
| <nd lat="50.8443277" lon="6.9677563"/> | ||
| <nd lat="50.8453254" lon="6.9678465"/> | ||
| <nd lat="50.8468114" lon="6.9679862"/> | ||
| </member> | ||
| <member type="way" ref="271008230" role=""> | ||
| <nd lat="50.8468114" lon="6.9679862"/> | ||
| <nd lat="50.8491169" lon="6.9681907"/> | ||
| </member> | ||
| <member type="way" ref="271008226" role=""> | ||
| <nd lat="50.8491169" lon="6.9681907"/> | ||
| <nd lat="50.8518181" lon="6.9684403"/> | ||
| </member> | ||
| <member type="way" ref="40033062" role=""> | ||
| <nd lat="50.8391857" lon="6.9664246"/> | ||
| <nd lat="50.8386690" lon="6.9662911"/> | ||
| </member> | ||
| <member type="way" ref="40033063" role=""> | ||
| <nd lat="50.8386690" lon="6.9662911"/> | ||
| <nd lat="50.8314332" lon="6.9644546"/> | ||
| </member> | ||
| <member type="way" ref="29384561" role=""> | ||
| <nd lat="50.8523854" lon="6.9681888"/> | ||
| <nd lat="50.8519590" lon="6.9681595"/> | ||
| </member> | ||
| <member type="way" ref="29384563" role=""> | ||
| <nd lat="50.8519590" lon="6.9681595"/> | ||
| <nd lat="50.8506534" lon="6.9680320"/> | ||
| </member> | ||
| <member type="way" ref="271008224" role=""> | ||
| <nd lat="50.8506534" lon="6.9680320"/> | ||
| <nd lat="50.8490308" lon="6.9678717"/> | ||
| </member> | ||
| <member type="way" ref="271008227" role=""> | ||
| <nd lat="50.8490308" lon="6.9678717"/> | ||
| <nd lat="50.8478121" lon="6.9677589"/> | ||
| </member> | ||
| <member type="way" ref="271008237" role=""> | ||
| <nd lat="50.8478121" lon="6.9677589"/> | ||
| <nd lat="50.8459552" lon="6.9676249"/> | ||
| <nd lat="50.8451822" lon="6.9675256"/> | ||
| </member> | ||
| <member type="way" ref="271008232" role=""> | ||
| <nd lat="50.8451822" lon="6.9675256"/> | ||
| <nd lat="50.8433946" lon="6.9673373"/> | ||
| </member> | ||
| <member type="way" ref="271008239" role=""> | ||
| <nd lat="50.8433946" lon="6.9673373"/> | ||
| <nd lat="50.8424071" lon="6.9671724"/> | ||
| <nd lat="50.8411984" lon="6.9669289"/> | ||
| <nd lat="50.8391857" lon="6.9664246"/> | ||
| </member> | ||
| <member type="way" ref="29384564" role=""> | ||
| <nd lat="50.8518181" lon="6.9684403"/> | ||
| <nd lat="50.8522171" lon="6.9684787"/> | ||
| </member> | ||
| <member type="way" ref="31282638" role=""> | ||
| <nd lat="50.7547305" lon="7.0468957"/> | ||
| <nd lat="50.7550333" lon="7.0462257"/> | ||
| </member> | ||
| <member type="way" ref="31282787" role=""> | ||
| <nd lat="50.7548175" lon="7.0462659"/> | ||
| <nd lat="50.7545192" lon="7.0469416"/> | ||
| </member> | ||
| <member type="way" ref="383262762" role=""> | ||
| <nd lat="50.7545192" lon="7.0469416"/> | ||
| <nd lat="50.7522859" lon="7.0519784"/> | ||
| <nd lat="50.7519030" lon="7.0528750"/> | ||
| </member> | ||
| <member type="way" ref="31304443" role=""> | ||
| <nd lat="50.7519030" lon="7.0528750"/> | ||
| <nd lat="50.7514373" lon="7.0540731"/> | ||
| <nd lat="50.7512408" lon="7.0546346"/> | ||
| <nd lat="50.7511231" lon="7.0549962"/> | ||
| <nd lat="50.7508172" lon="7.0560135"/> | ||
| </member> | ||
| <member type="way" ref="128541594" role=""> | ||
| <nd lat="50.7508172" lon="7.0560135"/> | ||
| <nd lat="50.7504938" lon="7.0572440"/> | ||
| </member> | ||
| <member type="way" ref="31304503" role=""> | ||
| <nd lat="50.7509429" lon="7.0561605"/> | ||
| <nd lat="50.7512483" lon="7.0551357"/> | ||
| <nd lat="50.7513759" lon="7.0547500"/> | ||
| <nd lat="50.7515670" lon="7.0542197"/> | ||
| <nd lat="50.7520213" lon="7.0530348"/> | ||
| <nd lat="50.7524214" lon="7.0520935"/> | ||
| <nd lat="50.7547305" lon="7.0468957"/> | ||
| </member> | ||
| <member type="way" ref="31363881" role=""> | ||
| <nd lat="50.8026288" lon="6.9992932"/> | ||
| <nd lat="50.8018617" lon="7.0000625"/> | ||
| <nd lat="50.8010270" lon="7.0007950"/> | ||
| <nd lat="50.8001164" lon="7.0015291"/> | ||
| <nd lat="50.7928343" lon="7.0072406"/> | ||
| <nd lat="50.7832350" lon="7.0147268"/> | ||
| <nd lat="50.7826087" lon="7.0151803"/> | ||
| </member> | ||
| <member type="way" ref="31363891" role=""> | ||
| <nd lat="50.7826087" lon="7.0151803"/> | ||
| <nd lat="50.7823221" lon="7.0153822"/> | ||
| </member> | ||
| <member type="way" ref="31363892" role=""> | ||
| <nd lat="50.7823221" lon="7.0153822"/> | ||
| <nd lat="50.7802850" lon="7.0170023"/> | ||
| <nd lat="50.7782200" lon="7.0186241"/> | ||
| </member> | ||
| <member type="way" ref="31363898" role=""> | ||
| <nd lat="50.7826777" lon="7.0153975"/> | ||
| <nd lat="50.7833048" lon="7.0149295"/> | ||
| <nd lat="50.8001641" lon="7.0017836"/> | ||
| <nd lat="50.8010947" lon="7.0010142"/> | ||
| <nd lat="50.8019538" lon="7.0002540"/> | ||
| <nd lat="50.8026483" lon="6.9995590"/> | ||
| </member> | ||
| <member type="way" ref="31363910" role=""> | ||
| <nd lat="50.7823930" lon="7.0156008"/> | ||
| <nd lat="50.7826777" lon="7.0153975"/> | ||
| </member> | ||
| <member type="way" ref="31364152" role=""> | ||
| <nd lat="50.7782200" lon="7.0186241"/> | ||
| <nd lat="50.7779774" lon="7.0188037"/> | ||
| </member> | ||
| <member type="way" ref="31364158" role=""> | ||
| <nd lat="50.7783056" lon="7.0188240"/> | ||
| <nd lat="50.7788577" lon="7.0183860"/> | ||
| <nd lat="50.7803473" lon="7.0172040"/> | ||
| <nd lat="50.7816582" lon="7.0161766"/> | ||
| <nd lat="50.7823930" lon="7.0156008"/> | ||
| </member> | ||
| <member type="way" ref="31364178" role=""> | ||
| <nd lat="50.7780676" lon="7.0190054"/> | ||
| <nd lat="50.7783056" lon="7.0188240"/> | ||
| </member> | ||
| <member type="way" ref="31364384" role=""> | ||
| <nd lat="50.7749036" lon="7.0214625"/> | ||
| <nd lat="50.7780676" lon="7.0190054"/> | ||
| </member> | ||
| <member type="way" ref="31364387" role=""> | ||
| <nd lat="50.7744886" lon="7.0214841"/> | ||
| <nd lat="50.7712930" lon="7.0240315"/> | ||
| <nd lat="50.7695809" lon="7.0254447"/> | ||
| <nd lat="50.7686243" lon="7.0263151"/> | ||
| </member> | ||
| <member type="way" ref="31364484" role=""> | ||
| <nd lat="50.7748248" lon="7.0212347"/> | ||
| <nd lat="50.7744886" lon="7.0214841"/> | ||
| </member> | ||
| <member type="way" ref="31364512" role=""> | ||
| <nd lat="50.7745735" lon="7.0217089"/> | ||
| <nd lat="50.7749036" lon="7.0214625"/> | ||
| </member> | ||
| <member type="way" ref="31364656" role=""> | ||
| <nd lat="50.7686546" lon="7.0266216"/> | ||
| <nd lat="50.7696586" lon="7.0256891"/> | ||
| <nd lat="50.7713905" lon="7.0242565"/> | ||
| <nd lat="50.7745735" lon="7.0217089"/> | ||
| </member> | ||
| <member type="way" ref="31364667" role=""> | ||
| <nd lat="50.7686243" lon="7.0263151"/> | ||
| <nd lat="50.7676165" lon="7.0273126"/> | ||
| <nd lat="50.7665957" lon="7.0283332"/> | ||
| <nd lat="50.7653333" lon="7.0297134"/> | ||
| </member> | ||
| <member type="way" ref="271008234" role=""> | ||
| <nd lat="50.7653333" lon="7.0297134"/> | ||
| <nd lat="50.7643799" lon="7.0308081"/> | ||
| </member> | ||
| <member type="way" ref="31364888" role=""> | ||
| <nd lat="50.7635269" lon="7.0321873"/> | ||
| <nd lat="50.7641966" lon="7.0313729"/> | ||
| </member> | ||
| <member type="way" ref="122158730" role=""> | ||
| <nd lat="50.7641966" lon="7.0313729"/> | ||
| <nd lat="50.7644716" lon="7.0310241"/> | ||
| </member> | ||
| <member type="way" ref="31364985" role=""> | ||
| <nd lat="50.7644716" lon="7.0310241"/> | ||
| <nd lat="50.7648596" lon="7.0305814"/> | ||
| </member> | ||
| <member type="way" ref="271008235" role=""> | ||
| <nd lat="50.7648596" lon="7.0305814"/> | ||
| <nd lat="50.7657812" lon="7.0295145"/> | ||
| <nd lat="50.7666465" lon="7.0285903"/> | ||
| </member> | ||
| <member type="way" ref="271008231" role=""> | ||
| <nd lat="50.7666465" lon="7.0285903"/> | ||
| <nd lat="50.7679887" lon="7.0272481"/> | ||
| </member> | ||
| <member type="way" ref="271008233" role=""> | ||
| <nd lat="50.7679887" lon="7.0272481"/> | ||
| <nd lat="50.7686546" lon="7.0266216"/> | ||
| </member> | ||
| <member type="way" ref="31365377" role=""> | ||
| <nd lat="50.7643799" lon="7.0308081"/> | ||
| <nd lat="50.7640807" lon="7.0311662"/> | ||
| </member> | ||
| <member type="way" ref="31365425" role=""> | ||
| <nd lat="50.7640807" lon="7.0311662"/> | ||
| <nd lat="50.7638566" lon="7.0314272"/> | ||
| </member> | ||
| <member type="way" ref="271008236" role=""> | ||
| <nd lat="50.7638566" lon="7.0314272"/> | ||
| <nd lat="50.7628914" lon="7.0326760"/> | ||
| <nd lat="50.7621053" lon="7.0336961"/> | ||
| </member> | ||
| <member type="way" ref="36447898" role=""> | ||
| <nd lat="50.7621053" lon="7.0336961"/> | ||
| <nd lat="50.7613433" lon="7.0347526"/> | ||
| </member> | ||
| <member type="way" ref="271008228" role=""> | ||
| <nd lat="50.7613433" lon="7.0347526"/> | ||
| <nd lat="50.7608295" lon="7.0354890"/> | ||
| </member> | ||
| <member type="way" ref="31366812" role=""> | ||
| <nd lat="50.7588227" lon="7.0386254"/> | ||
| <nd lat="50.7583011" lon="7.0394929"/> | ||
| <nd lat="50.7576749" lon="7.0405773"/> | ||
| <nd lat="50.7569096" lon="7.0419812"/> | ||
| <nd lat="50.7558745" lon="7.0439976"/> | ||
| <nd lat="50.7548175" lon="7.0462659"/> | ||
| </member> | ||
| <member type="way" ref="31366880" role=""> | ||
| <nd lat="50.7550333" lon="7.0462257"/> | ||
| <nd lat="50.7559939" lon="7.0442408"/> | ||
| <nd lat="50.7570656" lon="7.0421620"/> | ||
| <nd lat="50.7578037" lon="7.0408023"/> | ||
| <nd lat="50.7584541" lon="7.0396561"/> | ||
| <nd lat="50.7589669" lon="7.0387984"/> | ||
| </member> | ||
| <member type="way" ref="31367017" role=""> | ||
| <nd lat="50.7609333" lon="7.0356976"/> | ||
| <nd lat="50.7619690" lon="7.0342371"/> | ||
| <nd lat="50.7630051" lon="7.0328461"/> | ||
| <nd lat="50.7635269" lon="7.0321873"/> | ||
| </member> | ||
| <member type="way" ref="31367443" role=""> | ||
| <nd lat="50.7607331" lon="7.0359794"/> | ||
| <nd lat="50.7609333" lon="7.0356976"/> | ||
| </member> | ||
| <member type="way" ref="31367449" role=""> | ||
| <nd lat="50.7589669" lon="7.0387984"/> | ||
| <nd lat="50.7602933" lon="7.0366481"/> | ||
| <nd lat="50.7607331" lon="7.0359794"/> | ||
| </member> | ||
| <member type="way" ref="31367526" role=""> | ||
| <nd lat="50.7606164" lon="7.0358121"/> | ||
| <nd lat="50.7601681" lon="7.0365126"/> | ||
| <nd lat="50.7588227" lon="7.0386254"/> | ||
| </member> | ||
| <member type="way" ref="31367534" role=""> | ||
| <nd lat="50.7608295" lon="7.0354890"/> | ||
| <nd lat="50.7606164" lon="7.0358121"/> | ||
| </member> | ||
| <member type="way" ref="31369852" role=""> | ||
| <nd lat="50.7779774" lon="7.0188037"/> | ||
| <nd lat="50.7748248" lon="7.0212347"/> | ||
| </member> | ||
| <member type="way" ref="449397558" role=""> | ||
| <nd lat="50.7479418" lon="7.0693723"/> | ||
| <nd lat="50.7494783" lon="7.0624630"/> | ||
| </member> | ||
| <member type="way" ref="31797389" role=""> | ||
| <nd lat="50.7494783" lon="7.0624630"/> | ||
| <nd lat="50.7502727" lon="7.0588905"/> | ||
| <nd lat="50.7506441" lon="7.0572942"/> | ||
| <nd lat="50.7509429" lon="7.0561605"/> | ||
| </member> | ||
| <member type="way" ref="31798039" role=""> | ||
| <nd lat="50.7504938" lon="7.0572440"/> | ||
| <nd lat="50.7501306" lon="7.0588140"/> | ||
| </member> | ||
| <member type="way" ref="235363212" role=""> | ||
| <nd lat="50.7501306" lon="7.0588140"/> | ||
| <nd lat="50.7492636" lon="7.0626737"/> | ||
| <nd lat="50.7489407" lon="7.0641605"/> | ||
| </member> | ||
| <member type="way" ref="156492546" role=""> | ||
| <nd lat="50.7489407" lon="7.0641605"/> | ||
| <nd lat="50.7488307" lon="7.0647205"/> | ||
| <nd lat="50.7483739" lon="7.0668216"/> | ||
| </member> | ||
| <member type="way" ref="156492545" role=""> | ||
| <nd lat="50.7483739" lon="7.0668216"/> | ||
| <nd lat="50.7483009" lon="7.0672440"/> | ||
| <nd lat="50.7478400" lon="7.0692844"/> | ||
| </member> | ||
| <member type="way" ref="130749935" role=""> | ||
| <nd lat="50.7478400" lon="7.0692844"/> | ||
| <nd lat="50.7477294" lon="7.0697394"/> | ||
| <nd lat="50.7476187" lon="7.0701855"/> | ||
| <nd lat="50.7474997" lon="7.0706232"/> | ||
| <nd lat="50.7473468" lon="7.0711189"/> | ||
| <nd lat="50.7472087" lon="7.0715434"/> | ||
| <nd lat="50.7470472" lon="7.0719838"/> | ||
| <nd lat="50.7469114" lon="7.0723163"/> | ||
| <nd lat="50.7467733" lon="7.0726489"/> | ||
| <nd lat="50.7465937" lon="7.0730580"/> | ||
| <nd lat="50.7464112" lon="7.0734310"/> | ||
| </member> | ||
| <member type="way" ref="32472877" role=""> | ||
| <nd lat="50.8246828" lon="6.9651077"/> | ||
| <nd lat="50.8253375" lon="6.9647718"/> | ||
| <nd lat="50.8260000" lon="6.9645354"/> | ||
| <nd lat="50.8266134" lon="6.9643649"/> | ||
| <nd lat="50.8272671" lon="6.9642646"/> | ||
| <nd lat="50.8278017" lon="6.9642349"/> | ||
| </member> | ||
| <member type="way" ref="31798988" role=""> | ||
| <nd lat="50.8278017" lon="6.9642349"/> | ||
| <nd lat="50.8284805" lon="6.9642342"/> | ||
| <nd lat="50.8294617" lon="6.9643395"/> | ||
| <nd lat="50.8302437" lon="6.9644810"/> | ||
| <nd lat="50.8309474" lon="6.9646345"/> | ||
| </member> | ||
| <member type="way" ref="31798989" role=""> | ||
| <nd lat="50.8590359" lon="6.9691023"/> | ||
| <nd lat="50.8634113" lon="6.9695191"/> | ||
| </member> | ||
| <member type="way" ref="235820560" role=""> | ||
| <nd lat="50.8634113" lon="6.9695191"/> | ||
| <nd lat="50.8656224" lon="6.9697185"/> | ||
| </member> | ||
| <member type="way" ref="235820563" role=""> | ||
| <nd lat="50.8656224" lon="6.9697185"/> | ||
| <nd lat="50.8679633" lon="6.9699314"/> | ||
| </member> | ||
| <member type="way" ref="235820564" role=""> | ||
| <nd lat="50.8679633" lon="6.9699314"/> | ||
| <nd lat="50.8691580" lon="6.9700171"/> | ||
| <nd lat="50.8699302" lon="6.9700221"/> | ||
| </member> | ||
| <member type="way" ref="235820570" role=""> | ||
| <nd lat="50.8699302" lon="6.9700221"/> | ||
| <nd lat="50.8717399" lon="6.9699121"/> | ||
| <nd lat="50.8746263" lon="6.9695939"/> | ||
| </member> | ||
| <member type="way" ref="32472855" role=""> | ||
| <nd lat="50.8246253" lon="6.9648384"/> | ||
| <nd lat="50.8242516" lon="6.9650453"/> | ||
| </member> | ||
| <member type="way" ref="32472856" role=""> | ||
| <nd lat="50.8242516" lon="6.9650453"/> | ||
| <nd lat="50.8237235" lon="6.9653841"/> | ||
| <nd lat="50.8232034" lon="6.9657948"/> | ||
| <nd lat="50.8224317" lon="6.9665263"/> | ||
| <nd lat="50.8216642" lon="6.9673886"/> | ||
| <nd lat="50.8209037" lon="6.9684049"/> | ||
| <nd lat="50.8201541" lon="6.9695500"/> | ||
| <nd lat="50.8192181" lon="6.9711445"/> | ||
| <nd lat="50.8138575" lon="6.9806731"/> | ||
| </member> | ||
| <member type="way" ref="37881520" role=""> | ||
| <nd lat="50.8138575" lon="6.9806731"/> | ||
| <nd lat="50.8135770" lon="6.9811721"/> | ||
| </member> | ||
| <member type="way" ref="37881519" role=""> | ||
| <nd lat="50.8135770" lon="6.9811721"/> | ||
| <nd lat="50.8113547" lon="6.9851361"/> | ||
| </member> | ||
| <member type="way" ref="234434902" role=""> | ||
| <nd lat="50.8113547" lon="6.9851361"/> | ||
| <nd lat="50.8105743" lon="6.9865001"/> | ||
| </member> | ||
| <member type="way" ref="32472875" role=""> | ||
| <nd lat="50.8243279" lon="6.9653077"/> | ||
| <nd lat="50.8246828" lon="6.9651077"/> | ||
| </member> | ||
| <member type="way" ref="32473071" role=""> | ||
| <nd lat="50.8309464" lon="6.9643368"/> | ||
| <nd lat="50.8302815" lon="6.9641912"/> | ||
| </member> | ||
| <member type="way" ref="128522486" role=""> | ||
| <nd lat="50.8302815" lon="6.9641912"/> | ||
| <nd lat="50.8294728" lon="6.9640448"/> | ||
| <nd lat="50.8284964" lon="6.9639463"/> | ||
| <nd lat="50.8277970" lon="6.9639432"/> | ||
| </member> | ||
| <member type="way" ref="36447896" role=""> | ||
| <nd lat="50.8277970" lon="6.9639432"/> | ||
| <nd lat="50.8272631" lon="6.9639682"/> | ||
| <nd lat="50.8265661" lon="6.9640827"/> | ||
| <nd lat="50.8259717" lon="6.9642405"/> | ||
| <nd lat="50.8252714" lon="6.9645096"/> | ||
| <nd lat="50.8246253" lon="6.9648384"/> | ||
| </member> | ||
| <member type="way" ref="32473075" role=""> | ||
| <nd lat="50.8314332" lon="6.9644546"/> | ||
| <nd lat="50.8309464" lon="6.9643368"/> | ||
| </member> | ||
| <member type="way" ref="32473086" role=""> | ||
| <nd lat="50.8309474" lon="6.9646345"/> | ||
| <nd lat="50.8314534" lon="6.9647679"/> | ||
| </member> | ||
| <member type="way" ref="32473087" role=""> | ||
| <nd lat="50.8314534" lon="6.9647679"/> | ||
| <nd lat="50.8386440" lon="6.9665955"/> | ||
| </member> | ||
| <member type="way" ref="40033064" role=""> | ||
| <nd lat="50.8386440" lon="6.9665955"/> | ||
| <nd lat="50.8391695" lon="6.9667285"/> | ||
| </member> | ||
| <member type="way" ref="189189059" role=""> | ||
| <nd lat="50.8746263" lon="6.9695939"/> | ||
| <nd lat="50.8760907" lon="6.9694358"/> | ||
| </member> | ||
| <member type="way" ref="271008225" role=""> | ||
| <nd lat="50.8760907" lon="6.9694358"/> | ||
| <nd lat="50.8775484" lon="6.9692784"/> | ||
| </member> | ||
| <member type="way" ref="41550921" role=""> | ||
| <nd lat="50.8775484" lon="6.9692784"/> | ||
| <nd lat="50.8797318" lon="6.9690108"/> | ||
| </member> | ||
| <tag k="TMC:cid_58:tabcd_1:Class" v="Road"/> | ||
| <tag k="TMC:cid_58:tabcd_1:LCLversion" v="8.00"/> | ||
| <tag k="TMC:cid_58:tabcd_1:LocationCode" v="7142"/> | ||
| <tag k="name" v="Bundesautobahn 555"/> | ||
| <tag k="network" v="BAB"/> | ||
| <tag k="operator" v="Bundesrepublik Deutschland"/> | ||
| <tag k="ref" v="A 555"/> | ||
| <tag k="route" v="road"/> | ||
| <tag k="type" v="route"/> | ||
| <tag k="wikipedia" v="de:Bundesautobahn 555"/> | ||
| </relation> | ||
| </osm> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <osm version="0.6" generator="Overpass API"> | ||
| <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note> | ||
| <meta osm_base="2014-12-14T13:33:02Z"/> | ||
| <way id="317146077"> | ||
| <nd ref="3233854241"/> | ||
| <nd ref="3233854238"/> | ||
| <nd ref="3233854233"/> | ||
| <nd ref="3233854234"/> | ||
| <nd ref="3233854236"/> | ||
| <nd ref="3233854237"/> | ||
| <nd ref="3233854241"/> | ||
| <tag k="building" v="yes"/> | ||
| </way> | ||
| <way id="317146078" version="1" timestamp="2014-12-14T07:27:21Z" changeset="23456789" uid="345678" user="TestUser"> | ||
| <nd ref="3233854241"/> | ||
| <nd ref="3233854238"/> | ||
| <nd ref="3233854233"/> | ||
| <nd ref="3233854234"/> | ||
| <nd ref="3233854236"/> | ||
| <nd ref="3233854237"/> | ||
| <nd ref="3233854241"/> | ||
| </way> | ||
| </osm> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <osm version="0.6" generator="Overpass API"> | ||
| <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note> | ||
| <meta osm_base="2014-12-14T13:34:02Z"/> | ||
| <node id="3233854233" lat="50.7494187" lon="7.1758731"/> | ||
| <node id="3233854234" lat="50.7494236" lon="7.1757664"/> | ||
| <node id="3233854236" lat="50.7494909" lon="7.1757741"/> | ||
| <node id="3233854237" lat="50.7494985" lon="7.1756064"/> | ||
| <node id="3233854238" lat="50.7495391" lon="7.1758868"/> | ||
| <node id="3233854241" lat="50.7495516" lon="7.1756125"/> | ||
| <way id="317146077"> | ||
| <nd ref="3233854241"/> | ||
| <nd ref="3233854238"/> | ||
| <nd ref="3233854233"/> | ||
| <nd ref="3233854234"/> | ||
| <nd ref="3233854236"/> | ||
| <nd ref="3233854237"/> | ||
| <nd ref="3233854241"/> | ||
| <tag k="building" v="yes"/> | ||
| </way> | ||
| </osm> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <osm version="0.6" generator="Overpass API"> | ||
| <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note> | ||
| <meta osm_base="2016-11-22T22:35:03Z"/> | ||
| <node id="2343425523" lat="41.8954452" lon="12.5032169" version="1" timestamp="2013-06-13T15:34:01Z" changeset="16539126" uid="113909" user="Giardia"/> | ||
| <node id="2343425525" lat="41.8954752" lon="12.5031604" version="1" timestamp="2013-06-13T15:34:01Z" changeset="16539126" uid="113909" user="Giardia"/> | ||
| <node id="2343425526" lat="41.8955244" lon="12.5032926" version="1" timestamp="2013-06-13T15:34:01Z" changeset="16539126" uid="113909" user="Giardia"/> | ||
| <node id="2343425528" lat="41.8955543" lon="12.5032362" version="1" timestamp="2013-06-13T15:34:01Z" changeset="16539126" uid="113909" user="Giardia"/> | ||
| <way id="225576797" version="1" timestamp="2013-06-13T15:34:01Z" changeset="16539126" uid="113909" user="Giardia"> | ||
| <center lat="41.8954998" lon="12.5032265"/> | ||
| <nd ref="2343425525"/> | ||
| <nd ref="2343425528"/> | ||
| <nd ref="2343425526"/> | ||
| <nd ref="2343425523"/> | ||
| <nd ref="2343425525"/> | ||
| <tag k="building" v="kiosk"/> | ||
| <tag k="shop" v="florist"/> | ||
| </way> | ||
| </osm> |
| <?xml version="1.0" encoding="UTF-8"?> | ||
| <osm version="0.6" generator="Overpass API"> | ||
| <note>The data included in this document is from www.openstreetmap.org. The data is made available under ODbL.</note> | ||
| <meta osm_base="2016-11-22T23:24:03Z"/> | ||
| <way id="225576797"> | ||
| <center/> | ||
| <nd ref="2343425525"/> | ||
| <nd ref="2343425528"/> | ||
| <nd ref="2343425526"/> | ||
| <nd ref="2343425523"/> | ||
| <nd ref="2343425525"/> | ||
| <tag k="building" v="kiosk"/> | ||
| <tag k="shop" v="florist"/> | ||
| </way> | ||
| </osm> |
| Metadata-Version: 1.1 | ||
| Name: overpy | ||
| Version: 0.3.1 | ||
| Version: 0.4 | ||
| Summary: Python Wrapper to access the OpenStreepMap Overpass API | ||
@@ -110,2 +110,3 @@ Home-page: https://github.com/DinoTools/python-overpy | ||
| Keywords: OverPy Overpass OSM OpenStreetMap | ||
| Platform: UNKNOWN | ||
@@ -121,3 +122,4 @@ Classifier: Development Status :: 4 - Beta | ||
| Classifier: Programming Language :: Python :: 3.4 | ||
| Classifier: Programming Language :: Python :: 3.5 | ||
| Classifier: Programming Language :: Python :: Implementation :: CPython | ||
| Classifier: Programming Language :: Python :: Implementation :: PyPy |
@@ -0,3 +1,18 @@ | ||
| CHANGELOG.rst | ||
| LICENSE | ||
| MANIFEST.in | ||
| README.rst | ||
| setup.cfg | ||
| setup.py | ||
| docs/make.bat | ||
| docs/source/api.rst | ||
| docs/source/changelog.rst | ||
| docs/source/conf.py | ||
| docs/source/contributing.rst | ||
| docs/source/example.rst | ||
| docs/source/index.rst | ||
| docs/source/introduction.rst | ||
| examples/get_areas.py | ||
| examples/get_nodes.py | ||
| examples/get_ways.py | ||
| overpy/__about__.py | ||
@@ -19,2 +34,29 @@ overpy/__init__.py | ||
| tests/test_result_way.py | ||
| tests/test_xml.py | ||
| tests/test_xml.py | ||
| tests/json/area-01.json | ||
| tests/json/node-01.json | ||
| tests/json/relation-01.json | ||
| tests/json/relation-02.json | ||
| tests/json/relation-03.json | ||
| tests/json/relation-04.json | ||
| tests/json/result-expand-01.json | ||
| tests/json/result-expand-02.json | ||
| tests/json/result-way-01.json | ||
| tests/json/result-way-02.json | ||
| tests/json/result-way-03.json | ||
| tests/json/way-01.json | ||
| tests/json/way-02.json | ||
| tests/json/way-03.json | ||
| tests/json/way-04.json | ||
| tests/response/bad-request-encoding.html | ||
| tests/response/bad-request.html | ||
| tests/xml/area-01.xml | ||
| tests/xml/node-01.xml | ||
| tests/xml/relation-01.xml | ||
| tests/xml/relation-02.xml | ||
| tests/xml/relation-03.xml | ||
| tests/xml/relation-04.xml | ||
| tests/xml/way-01.xml | ||
| tests/xml/way-02.xml | ||
| tests/xml/way-03.xml | ||
| tests/xml/way-04.xml |
@@ -16,3 +16,3 @@ __all__ = [ | ||
| __version__ = "0.3.1" | ||
| __version__ = "0.4" | ||
@@ -23,2 +23,2 @@ __author__ = "PhiBo (DinoTools)" | ||
| __license__ = "MIT" | ||
| __copyright__ = "Copyright 2014-2015 %s" % __author__ | ||
| __copyright__ = "Copyright 2014-2016 %s" % __author__ |
+659
-57
| from collections import OrderedDict | ||
| from datetime import datetime | ||
| from decimal import Decimal | ||
| from xml.sax import handler, make_parser | ||
| import json | ||
@@ -13,6 +15,8 @@ import re | ||
| PY2 = sys.version_info[0] == 2 | ||
| PY3 = sys.version_info[0] == 3 | ||
| XML_PARSER_DOM = 1 | ||
| XML_PARSER_SAX = 2 | ||
| if PY2: | ||
@@ -43,9 +47,17 @@ from urllib2 import urlopen | ||
| default_read_chunk_size = 4096 | ||
| default_url = "http://overpass-api.de/api/interpreter" | ||
| def __init__(self, read_chunk_size=None): | ||
| def __init__(self, read_chunk_size=None, url=None, xml_parser=XML_PARSER_SAX): | ||
| """ | ||
| :param read_chunk_size: Max size of each chunk read from the server response | ||
| :type read_chunk_size: Integer | ||
| :param url: Optional URL of the Overpass server. Defaults to http://overpass-api.de/api/interpreter | ||
| :type url: str | ||
| :param xml_parser: The xml parser to use | ||
| :type xml_parser: Integer | ||
| """ | ||
| self.url = "http://overpass-api.de/api/interpreter" | ||
| self.url = self.default_url | ||
| if url is not None: | ||
| self.url = url | ||
| self._regex_extract_error_msg = re.compile(b"\<p\>(?P<msg>\<strong\s.*?)\</p\>") | ||
@@ -56,2 +68,3 @@ self._regex_remove_tag = re.compile(b"<[^>]*?>") | ||
| self.read_chunk_size = read_chunk_size | ||
| self.xml_parser = xml_parser | ||
@@ -67,3 +80,3 @@ def query(self, query): | ||
| if not isinstance(query, bytes): | ||
| query = bytes(query, "utf-8") | ||
| query = query.encode("utf-8") | ||
@@ -137,3 +150,3 @@ try: | ||
| def parse_xml(self, data, encoding="utf-8"): | ||
| def parse_xml(self, data, encoding="utf-8", parser=None): | ||
| """ | ||
@@ -148,2 +161,5 @@ | ||
| """ | ||
| if parser is None: | ||
| parser = self.xml_parser | ||
| if isinstance(data, bytes): | ||
@@ -154,7 +170,6 @@ data = data.decode(encoding) | ||
| data = data.encode(encoding) | ||
| import xml.etree.ElementTree as ET | ||
| root = ET.fromstring(data) | ||
| return Result.from_xml(root, api=self) | ||
| return Result.from_xml(data, api=self, parser=parser) | ||
| class Result(object): | ||
@@ -164,2 +179,3 @@ """ | ||
| """ | ||
| def __init__(self, elements=None, api=None): | ||
@@ -174,6 +190,8 @@ """ | ||
| elements = [] | ||
| self._areas = OrderedDict((element.id, element) for element in elements if is_valid_type(element, Area)) | ||
| self._nodes = OrderedDict((element.id, element) for element in elements if is_valid_type(element, Node)) | ||
| self._ways = OrderedDict((element.id, element) for element in elements if is_valid_type(element, Way)) | ||
| self._relations = OrderedDict((element.id, element) for element in elements if is_valid_type(element, Relation)) | ||
| self._class_collection_map = {Node: self._nodes, Way: self._ways, Relation: self._relations} | ||
| self._relations = OrderedDict((element.id, element) | ||
| for element in elements if is_valid_type(element, Relation)) | ||
| self._class_collection_map = {Node: self._nodes, Way: self._ways, Relation: self._relations, Area: self._areas} | ||
| self.api = api | ||
@@ -194,3 +212,3 @@ | ||
| other_collection_map = {Node: other.nodes, Way: other.ways, Relation: other.relations} | ||
| other_collection_map = {Node: other.nodes, Way: other.ways, Relation: other.relations, Area: other.areas} | ||
| for element_type, own_collection in self._class_collection_map.items(): | ||
@@ -249,2 +267,5 @@ for element in other_collection_map[element_type]: | ||
| def get_area_ids(self): | ||
| return self.get_ids(filter_cls=Area) | ||
| @classmethod | ||
@@ -263,3 +284,3 @@ def from_json(cls, data, api=None): | ||
| result = cls(api=api) | ||
| for elem_cls in [Node, Way, Relation]: | ||
| for elem_cls in [Node, Way, Relation, Area]: | ||
| for element in data.get("elements", []): | ||
@@ -273,3 +294,3 @@ e_type = element.get("type") | ||
| @classmethod | ||
| def from_xml(cls, root, api=None): | ||
| def from_xml(cls, data, api=None, parser=XML_PARSER_SAX): | ||
| """ | ||
@@ -282,2 +303,4 @@ Create a new instance and load data from xml object. | ||
| :type api: Overpass | ||
| :param parser: Specify the parser to use(DOM or SAX) | ||
| :type parser: Integer | ||
| :return: New instance of Result object | ||
@@ -287,9 +310,71 @@ :rtype: Result | ||
| result = cls(api=api) | ||
| for elem_cls in [Node, Way, Relation]: | ||
| for child in root: | ||
| if child.tag.lower() == elem_cls._type_value: | ||
| result.append(elem_cls.from_xml(child, result=result)) | ||
| if parser == XML_PARSER_DOM: | ||
| import xml.etree.ElementTree as ET | ||
| root = ET.fromstring(data) | ||
| for elem_cls in [Node, Way, Relation, Area]: | ||
| for child in root: | ||
| if child.tag.lower() == elem_cls._type_value: | ||
| result.append(elem_cls.from_xml(child, result=result)) | ||
| elif parser == XML_PARSER_SAX: | ||
| if PY2: | ||
| from StringIO import StringIO | ||
| else: | ||
| from io import StringIO | ||
| source = StringIO(data) | ||
| sax_handler = OSMSAXHandler(result) | ||
| parser = make_parser() | ||
| parser.setContentHandler(sax_handler) | ||
| parser.parse(source) | ||
| else: | ||
| # ToDo: better exception | ||
| raise Exception("Unknown XML parser") | ||
| return result | ||
| def get_area(self, area_id, resolve_missing=False): | ||
| """ | ||
| Get an area by its ID. | ||
| :param area_id: The area ID | ||
| :type area_id: Integer | ||
| :param resolve_missing: Query the Overpass API if the area is missing in the result set. | ||
| :return: The area | ||
| :rtype: overpy.Area | ||
| :raises overpy.exception.DataIncomplete: The requested way is not available in the result cache. | ||
| :raises overpy.exception.DataIncomplete: If resolve_missing is True and the area can't be resolved. | ||
| """ | ||
| areas = self.get_areas(area_id=area_id) | ||
| if len(areas) == 0: | ||
| if resolve_missing is False: | ||
| raise exception.DataIncomplete("Resolve missing area is disabled") | ||
| query = ("\n" | ||
| "[out:json];\n" | ||
| "area({area_id});\n" | ||
| "out body;\n" | ||
| ) | ||
| query = query.format( | ||
| area_id=area_id | ||
| ) | ||
| tmp_result = self.api.query(query) | ||
| self.expand(tmp_result) | ||
| areas = self.get_areas(area_id=area_id) | ||
| if len(areas) == 0: | ||
| raise exception.DataIncomplete("Unable to resolve requested areas") | ||
| return areas[0] | ||
| def get_areas(self, area_id=None, **kwargs): | ||
| """ | ||
| Alias for get_elements() but filter the result by Area | ||
| :param area_id: The Id of the area | ||
| :type area_id: Integer | ||
| :return: List of elements | ||
| """ | ||
| return self.get_elements(Area, elem_id=area_id, **kwargs) | ||
| def get_node(self, node_id, resolve_missing=False): | ||
@@ -313,6 +398,6 @@ """ | ||
| query = ("\n" | ||
| "[out:json];\n" | ||
| "node({node_id});\n" | ||
| "out body;\n" | ||
| ) | ||
| "[out:json];\n" | ||
| "node({node_id});\n" | ||
| "out body;\n" | ||
| ) | ||
| query = query.format( | ||
@@ -359,6 +444,6 @@ node_id=node_id | ||
| query = ("\n" | ||
| "[out:json];\n" | ||
| "relation({relation_id});\n" | ||
| "out body;\n" | ||
| ) | ||
| "[out:json];\n" | ||
| "relation({relation_id});\n" | ||
| "out body;\n" | ||
| ) | ||
| query = query.format( | ||
@@ -405,6 +490,6 @@ relation_id=rel_id | ||
| query = ("\n" | ||
| "[out:json];\n" | ||
| "way({way_id});\n" | ||
| "out body;\n" | ||
| ) | ||
| "[out:json];\n" | ||
| "way({way_id});\n" | ||
| "out body;\n" | ||
| ) | ||
| query = query.format( | ||
@@ -433,2 +518,4 @@ way_id=way_id | ||
| area_ids = property(get_area_ids) | ||
| areas = property(get_areas) | ||
| node_ids = property(get_node_ids) | ||
@@ -457,6 +544,149 @@ nodes = property(get_nodes) | ||
| self._result = result | ||
| # Try to convert some common attributes | ||
| # http://wiki.openstreetmap.org/wiki/Elements#Common_attributes | ||
| self._attribute_modifiers = { | ||
| "changeset": int, | ||
| "timestamp": lambda ts: datetime.strptime(ts, "%Y-%m-%dT%H:%M:%SZ"), | ||
| "uid": int, | ||
| "version": int, | ||
| "visible": lambda v: v.lower() == "true" | ||
| } | ||
| self.attributes = attributes | ||
| for n, m in self._attribute_modifiers.items(): | ||
| if n in self.attributes: | ||
| self.attributes[n] = m(self.attributes[n]) | ||
| self.id = None | ||
| self.tags = tags | ||
| @classmethod | ||
| def get_center_from_json(cls, data): | ||
| """ | ||
| Get center information from json data | ||
| :param data: json data | ||
| :return: tuple with two elements: lat and lon | ||
| :rtype: tuple | ||
| """ | ||
| center_lat = None | ||
| center_lon = None | ||
| center = data.get("center") | ||
| if isinstance(center, dict): | ||
| center_lat = center.get("lat") | ||
| center_lon = center.get("lon") | ||
| if center_lat is None or center_lon is None: | ||
| raise ValueError("Unable to get lat or lon of way center.") | ||
| center_lat = Decimal(center_lat) | ||
| center_lon = Decimal(center_lon) | ||
| return (center_lat, center_lon) | ||
| @classmethod | ||
| def get_center_from_xml_dom(cls, sub_child): | ||
| center_lat = sub_child.attrib.get("lat") | ||
| center_lon = sub_child.attrib.get("lon") | ||
| if center_lat is None or center_lon is None: | ||
| raise ValueError("Unable to get lat or lon of way center.") | ||
| center_lat = Decimal(center_lat) | ||
| center_lon = Decimal(center_lon) | ||
| return center_lat, center_lon | ||
| class Area(Element): | ||
| """ | ||
| Class to represent an element of type area | ||
| """ | ||
| _type_value = "area" | ||
| def __init__(self, area_id=None, **kwargs): | ||
| """ | ||
| :param area_id: Id of the area element | ||
| :type area_id: Integer | ||
| :param kwargs: Additional arguments are passed directly to the parent class | ||
| """ | ||
| Element.__init__(self, **kwargs) | ||
| #: The id of the way | ||
| self.id = area_id | ||
| def __repr__(self): | ||
| return "<overpy.Area id={}>".format(self.id) | ||
| @classmethod | ||
| def from_json(cls, data, result=None): | ||
| """ | ||
| Create new Area element from JSON data | ||
| :param data: Element data from JSON | ||
| :type data: Dict | ||
| :param result: The result this element belongs to | ||
| :type result: overpy.Result | ||
| :return: New instance of Way | ||
| :rtype: overpy.Area | ||
| :raises overpy.exception.ElementDataWrongType: If type value of the passed JSON data does not match. | ||
| """ | ||
| if data.get("type") != cls._type_value: | ||
| raise exception.ElementDataWrongType( | ||
| type_expected=cls._type_value, | ||
| type_provided=data.get("type") | ||
| ) | ||
| tags = data.get("tags", {}) | ||
| area_id = data.get("id") | ||
| attributes = {} | ||
| ignore = ["id", "tags", "type"] | ||
| for n, v in data.items(): | ||
| if n in ignore: | ||
| continue | ||
| attributes[n] = v | ||
| return cls(area_id=area_id, attributes=attributes, tags=tags, result=result) | ||
| @classmethod | ||
| def from_xml(cls, child, result=None): | ||
| """ | ||
| Create new way element from XML data | ||
| :param child: XML node to be parsed | ||
| :type child: xml.etree.ElementTree.Element | ||
| :param result: The result this node belongs to | ||
| :type result: overpy.Result | ||
| :return: New Way oject | ||
| :rtype: overpy.Way | ||
| :raises overpy.exception.ElementDataWrongType: If name of the xml child node doesn't match | ||
| :raises ValueError: If the ref attribute of the xml node is not provided | ||
| :raises ValueError: If a tag doesn't have a name | ||
| """ | ||
| if child.tag.lower() != cls._type_value: | ||
| raise exception.ElementDataWrongType( | ||
| type_expected=cls._type_value, | ||
| type_provided=child.tag.lower() | ||
| ) | ||
| tags = {} | ||
| for sub_child in child: | ||
| if sub_child.tag.lower() == "tag": | ||
| name = sub_child.attrib.get("k") | ||
| if name is None: | ||
| raise ValueError("Tag without name/key.") | ||
| value = sub_child.attrib.get("v") | ||
| tags[name] = value | ||
| area_id = child.attrib.get("id") | ||
| if area_id is not None: | ||
| area_id = int(area_id) | ||
| attributes = {} | ||
| ignore = ["id"] | ||
| for n, v in child.attrib.items(): | ||
| if n in ignore: | ||
| continue | ||
| attributes[n] = v | ||
| return cls(area_id=area_id, attributes=attributes, tags=tags, result=result) | ||
| class Node(Element): | ||
@@ -484,3 +714,3 @@ """ | ||
| self.lon = lon | ||
| def __repr__(self): | ||
@@ -494,4 +724,4 @@ return "<overpy.Node id={} lat={} lon={}>".format(self.id, self.lat, self.lon) | ||
| :param child: Element data from JSON | ||
| :type child: Dict | ||
| :param data: Element data from JSON | ||
| :type data: Dict | ||
| :param result: The result this element belongs to | ||
@@ -581,3 +811,3 @@ :type result: overpy.Result | ||
| def __init__(self, way_id=None, node_ids=None, **kwargs): | ||
| def __init__(self, way_id=None, center_lat=None, center_lon=None, node_ids=None, **kwargs): | ||
| """ | ||
@@ -598,3 +828,7 @@ :param node_ids: List of node IDs | ||
| self._node_ids = node_ids | ||
| #: The lat/lon of the center of the way (optional depending on query) | ||
| self.center_lat = center_lat | ||
| self.center_lon = center_lon | ||
| def __repr__(self): | ||
@@ -642,7 +876,7 @@ return "<overpy.Way id={} nodes={}>".format(self.id, self._node_ids) | ||
| query = ("\n" | ||
| "[out:json];\n" | ||
| "way({way_id});\n" | ||
| "node(w);\n" | ||
| "out body;\n" | ||
| ) | ||
| "[out:json];\n" | ||
| "way({way_id});\n" | ||
| "node(w);\n" | ||
| "out body;\n" | ||
| ) | ||
| query = query.format( | ||
@@ -672,4 +906,4 @@ way_id=self.id | ||
| :param child: Element data from JSON | ||
| :type child: Dict | ||
| :param data: Element data from JSON | ||
| :type data: Dict | ||
| :param result: The result this element belongs to | ||
@@ -691,5 +925,6 @@ :type result: overpy.Result | ||
| node_ids = data.get("nodes") | ||
| (center_lat, center_lon) = cls.get_center_from_json(data=data) | ||
| attributes = {} | ||
| ignore = ["id", "nodes", "tags", "type"] | ||
| ignore = ["center", "id", "nodes", "tags", "type"] | ||
| for n, v in data.items(): | ||
@@ -700,3 +935,11 @@ if n in ignore: | ||
| return cls(way_id=way_id, attributes=attributes, node_ids=node_ids, tags=tags, result=result) | ||
| return cls( | ||
| attributes=attributes, | ||
| center_lat=center_lat, | ||
| center_lon=center_lon, | ||
| node_ids=node_ids, | ||
| tags=tags, | ||
| result=result, | ||
| way_id=way_id | ||
| ) | ||
@@ -726,2 +969,4 @@ @classmethod | ||
| node_ids = [] | ||
| center_lat = None | ||
| center_lon = None | ||
@@ -741,2 +986,4 @@ for sub_child in child: | ||
| node_ids.append(ref_id) | ||
| if sub_child.tag.lower() == "center": | ||
| (center_lat, center_lon) = cls.get_center_from_xml_dom(sub_child=sub_child) | ||
@@ -754,3 +1001,4 @@ way_id = child.attrib.get("id") | ||
| return cls(way_id=way_id, attributes=attributes, node_ids=node_ids, tags=tags, result=result) | ||
| return cls(way_id=way_id, center_lat=center_lat, center_lon=center_lon, | ||
| attributes=attributes, node_ids=node_ids, tags=tags, result=result) | ||
@@ -765,3 +1013,3 @@ | ||
| def __init__(self, rel_id=None, members=None, **kwargs): | ||
| def __init__(self, rel_id=None, center_lat=None, center_lon=None, members=None, **kwargs): | ||
| """ | ||
@@ -778,3 +1026,7 @@ :param members: | ||
| self.members = members | ||
| #: The lat/lon of the center of the way (optional depending on query) | ||
| self.center_lat = center_lat | ||
| self.center_lon = center_lon | ||
| def __repr__(self): | ||
@@ -788,4 +1040,4 @@ return "<overpy.Relation id={}>".format(self.id) | ||
| :param child: Element data from JSON | ||
| :type child: Dict | ||
| :param data: Element data from JSON | ||
| :type data: Dict | ||
| :param result: The result this element belongs to | ||
@@ -806,6 +1058,7 @@ :type result: overpy.Result | ||
| rel_id = data.get("id") | ||
| (center_lat, center_lon) = cls.get_center_from_json(data=data) | ||
| members = [] | ||
| supported_members = [RelationNode, RelationWay] | ||
| supported_members = [RelationNode, RelationWay, RelationRelation] | ||
| for member in data.get("members", []): | ||
@@ -829,3 +1082,11 @@ type_value = member.get("type") | ||
| return cls(rel_id=rel_id, attributes=attributes, members=members, tags=tags, result=result) | ||
| return cls( | ||
| rel_id=rel_id, | ||
| attributes=attributes, | ||
| center_lat=center_lat, | ||
| center_lon=center_lon, | ||
| members=members, | ||
| tags=tags, | ||
| result=result | ||
| ) | ||
@@ -854,4 +1115,6 @@ @classmethod | ||
| members = [] | ||
| center_lat = None | ||
| center_lon = None | ||
| supported_members = [RelationNode, RelationWay] | ||
| supported_members = [RelationNode, RelationWay, RelationRelation, RelationArea] | ||
| for sub_child in child: | ||
@@ -874,2 +1137,4 @@ if sub_child.tag.lower() == "tag": | ||
| ) | ||
| if sub_child.tag.lower() == "center": | ||
| (center_lat, center_lon) = cls.get_center_from_xml_dom(sub_child=sub_child) | ||
@@ -887,3 +1152,11 @@ rel_id = child.attrib.get("id") | ||
| return cls(rel_id=rel_id, attributes=attributes, members=members, tags=tags, result=result) | ||
| return cls( | ||
| rel_id=rel_id, | ||
| attributes=attributes, | ||
| center_lat=center_lat, | ||
| center_lon=center_lon, | ||
| members=members, | ||
| tags=tags, | ||
| result=result | ||
| ) | ||
@@ -895,3 +1168,4 @@ | ||
| """ | ||
| def __init__(self, ref=None, role=None, result=None): | ||
| def __init__(self, attributes=None, geometry=None, ref=None, role=None, result=None): | ||
| """ | ||
@@ -907,2 +1181,4 @@ :param ref: Reference Id | ||
| self.role = role | ||
| self.attributes = attributes | ||
| self.geometry = geometry | ||
@@ -930,4 +1206,32 @@ @classmethod | ||
| role = data.get("role") | ||
| return cls(ref=ref, role=role, result=result) | ||
| attributes = {} | ||
| ignore = ["geometry", "type", "ref", "role"] | ||
| for n, v in data.items(): | ||
| if n in ignore: | ||
| continue | ||
| attributes[n] = v | ||
| geometry = data.get("geometry") | ||
| if isinstance(geometry, list): | ||
| geometry_orig = geometry | ||
| geometry = [] | ||
| for v in geometry_orig: | ||
| geometry.append( | ||
| RelationWayGeometryValue( | ||
| lat=v.get("lat"), | ||
| lon=v.get("lon") | ||
| ) | ||
| ) | ||
| else: | ||
| geometry = None | ||
| return cls( | ||
| attributes=attributes, | ||
| geometry=geometry, | ||
| ref=ref, | ||
| role=role, | ||
| result=result | ||
| ) | ||
| @classmethod | ||
@@ -956,5 +1260,31 @@ def from_xml(cls, child, result=None): | ||
| role = child.attrib.get("role") | ||
| return cls(ref=ref, role=role, result=result) | ||
| attributes = {} | ||
| ignore = ["geometry", "ref", "role", "type"] | ||
| for n, v in child.attrib.items(): | ||
| if n in ignore: | ||
| continue | ||
| attributes[n] = v | ||
| geometry = None | ||
| for sub_child in child: | ||
| if sub_child.tag.lower() == "nd": | ||
| if geometry is None: | ||
| geometry = [] | ||
| geometry.append( | ||
| RelationWayGeometryValue( | ||
| lat=Decimal(sub_child.attrib["lat"]), | ||
| lon=Decimal(sub_child.attrib["lon"]) | ||
| ) | ||
| ) | ||
| return cls( | ||
| attributes=attributes, | ||
| geometry=geometry, | ||
| ref=ref, | ||
| role=role, | ||
| result=result | ||
| ) | ||
| class RelationNode(RelationMember): | ||
@@ -965,3 +1295,3 @@ _type_value = "node" | ||
| return self._result.get_node(self.ref, resolve_missing=resolve_missing) | ||
| def __repr__(self): | ||
@@ -976,4 +1306,276 @@ return "<overpy.RelationNode ref={} role={}>".format(self.ref, self.role) | ||
| return self._result.get_way(self.ref, resolve_missing=resolve_missing) | ||
| def __repr__(self): | ||
| return "<overpy.RelationWay ref={} role={}>".format(self.ref, self.role) | ||
| class RelationWayGeometryValue(object): | ||
| def __init__(self, lat, lon): | ||
| self.lat = lat | ||
| self.lon = lon | ||
| def __repr__(self): | ||
| return "<overpy.RelationWayGeometryValue lat={} lon={}>".format(self.lat, self.lon) | ||
| class RelationRelation(RelationMember): | ||
| _type_value = "relation" | ||
| def resolve(self, resolve_missing=False): | ||
| return self._result.get_relation(self.ref, resolve_missing=resolve_missing) | ||
| def __repr__(self): | ||
| return "<overpy.RelationRelation ref={} role={}>".format(self.ref, self.role) | ||
| class RelationArea(RelationMember): | ||
| _type_value = "area" | ||
| def resolve(self, resolve_missing=False): | ||
| return self._result.get_area(self.ref, resolve_missing=resolve_missing) | ||
| def __repr__(self): | ||
| return "<overpy.RelationArea ref={} role={}>".format(self.ref, self.role) | ||
| class OSMSAXHandler(handler.ContentHandler): | ||
| """ | ||
| SAX parser for Overpass XML response. | ||
| """ | ||
| #: Tuple of opening elements to ignore | ||
| ignore_start = ('osm', 'meta', 'note', 'bounds', 'remark') | ||
| #: Tuple of closing elements to ignore | ||
| ignore_end = ('osm', 'meta', 'note', 'bounds', 'remark', 'tag', 'nd', 'center') | ||
| def __init__(self, result): | ||
| """ | ||
| :param result: Append results to this result set. | ||
| :type result: overpy.Result | ||
| """ | ||
| handler.ContentHandler.__init__(self) | ||
| self._result = result | ||
| self._curr = {} | ||
| #: Current relation member object | ||
| self.cur_relation_member = None | ||
| def startElement(self, name, attrs): | ||
| """ | ||
| Handle opening elements. | ||
| :param name: Name of the element | ||
| :type name: String | ||
| :param attrs: Attributes of the element | ||
| :type attrs: Dict | ||
| """ | ||
| if name in self.ignore_start: | ||
| return | ||
| try: | ||
| handler = getattr(self, '_handle_start_%s' % name) | ||
| except AttributeError: | ||
| raise KeyError("Unknown element start '%s'" % name) | ||
| handler(attrs) | ||
| def endElement(self, name): | ||
| """ | ||
| Handle closing elements | ||
| :param name: Name of the element | ||
| :type name: String | ||
| """ | ||
| if name in self.ignore_end: | ||
| return | ||
| try: | ||
| handler = getattr(self, '_handle_end_%s' % name) | ||
| except AttributeError: | ||
| raise KeyError("Unknown element end '%s'" % name) | ||
| handler() | ||
| def _handle_start_center(self, attrs): | ||
| """ | ||
| Handle opening center element | ||
| :param attrs: Attributes of the element | ||
| :type attrs: Dict | ||
| """ | ||
| center_lat = attrs.get("lat") | ||
| center_lon = attrs.get("lon") | ||
| if center_lat is None or center_lon is None: | ||
| raise ValueError("Unable to get lat or lon of way center.") | ||
| self._curr["center_lat"] = Decimal(center_lat) | ||
| self._curr["center_lon"] = Decimal(center_lon) | ||
| def _handle_start_tag(self, attrs): | ||
| """ | ||
| Handle opening tag element | ||
| :param attrs: Attributes of the element | ||
| :type attrs: Dict | ||
| """ | ||
| try: | ||
| tag_key = attrs['k'] | ||
| except KeyError: | ||
| raise ValueError("Tag without name/key.") | ||
| self._curr['tags'][tag_key] = attrs.get('v') | ||
| def _handle_start_node(self, attrs): | ||
| """ | ||
| Handle opening node element | ||
| :param attrs: Attributes of the element | ||
| :type attrs: Dict | ||
| """ | ||
| self._curr = { | ||
| 'attributes': dict(attrs), | ||
| 'lat': None, | ||
| 'lon': None, | ||
| 'node_id': None, | ||
| 'tags': {} | ||
| } | ||
| if attrs.get('id', None) is not None: | ||
| self._curr['node_id'] = int(attrs['id']) | ||
| del self._curr['attributes']['id'] | ||
| if attrs.get('lat', None) is not None: | ||
| self._curr['lat'] = Decimal(attrs['lat']) | ||
| del self._curr['attributes']['lat'] | ||
| if attrs.get('lon', None) is not None: | ||
| self._curr['lon'] = Decimal(attrs['lon']) | ||
| del self._curr['attributes']['lon'] | ||
| def _handle_end_node(self): | ||
| """ | ||
| Handle closing node element | ||
| """ | ||
| self._result.append(Node(result=self._result, **self._curr)) | ||
| self._curr = {} | ||
| def _handle_start_way(self, attrs): | ||
| """ | ||
| Handle opening way element | ||
| :param attrs: Attributes of the element | ||
| :type attrs: Dict | ||
| """ | ||
| self._curr = { | ||
| 'center_lat': None, | ||
| 'center_lon': None, | ||
| 'attributes': dict(attrs), | ||
| 'node_ids': [], | ||
| 'tags': {}, | ||
| 'way_id': None | ||
| } | ||
| if attrs.get('id', None) is not None: | ||
| self._curr['way_id'] = int(attrs['id']) | ||
| del self._curr['attributes']['id'] | ||
| def _handle_end_way(self): | ||
| """ | ||
| Handle closing way element | ||
| """ | ||
| self._result.append(Way(result=self._result, **self._curr)) | ||
| self._curr = {} | ||
| def _handle_start_area(self, attrs): | ||
| """ | ||
| Handle opening area element | ||
| :param attrs: Attributes of the element | ||
| :type attrs: Dict | ||
| """ | ||
| self._curr = { | ||
| 'attributes': dict(attrs), | ||
| 'tags': {}, | ||
| 'area_id': None | ||
| } | ||
| if attrs.get('id', None) is not None: | ||
| self._curr['area_id'] = int(attrs['id']) | ||
| del self._curr['attributes']['id'] | ||
| def _handle_end_area(self): | ||
| """ | ||
| Handle closing area element | ||
| """ | ||
| self._result.append(Area(result=self._result, **self._curr)) | ||
| self._curr = {} | ||
| def _handle_start_nd(self, attrs): | ||
| """ | ||
| Handle opening nd element | ||
| :param attrs: Attributes of the element | ||
| :type attrs: Dict | ||
| """ | ||
| if isinstance(self.cur_relation_member, RelationWay): | ||
| if self.cur_relation_member.geometry is None: | ||
| self.cur_relation_member.geometry = [] | ||
| self.cur_relation_member.geometry.append( | ||
| RelationWayGeometryValue( | ||
| lat=Decimal(attrs["lat"]), | ||
| lon=Decimal(attrs["lon"]) | ||
| ) | ||
| ) | ||
| else: | ||
| try: | ||
| node_ref = attrs['ref'] | ||
| except KeyError: | ||
| raise ValueError("Unable to find required ref value.") | ||
| self._curr['node_ids'].append(int(node_ref)) | ||
| def _handle_start_relation(self, attrs): | ||
| """ | ||
| Handle opening relation element | ||
| :param attrs: Attributes of the element | ||
| :type attrs: Dict | ||
| """ | ||
| self._curr = { | ||
| 'attributes': dict(attrs), | ||
| 'members': [], | ||
| 'rel_id': None, | ||
| 'tags': {} | ||
| } | ||
| if attrs.get('id', None) is not None: | ||
| self._curr['rel_id'] = int(attrs['id']) | ||
| del self._curr['attributes']['id'] | ||
| def _handle_end_relation(self): | ||
| """ | ||
| Handle closing relation element | ||
| """ | ||
| self._result.append(Relation(result=self._result, **self._curr)) | ||
| self._curr = {} | ||
| def _handle_start_member(self, attrs): | ||
| """ | ||
| Handle opening member element | ||
| :param attrs: Attributes of the element | ||
| :type attrs: Dict | ||
| """ | ||
| params = { | ||
| # ToDo: Parse attributes | ||
| 'attributes': {}, | ||
| 'ref': None, | ||
| 'result': self._result, | ||
| 'role': None | ||
| } | ||
| if attrs.get('ref', None): | ||
| params['ref'] = int(attrs['ref']) | ||
| if attrs.get('role', None): | ||
| params['role'] = attrs['role'] | ||
| cls_map = { | ||
| "area": RelationArea, | ||
| "node": RelationNode, | ||
| "relation": RelationRelation, | ||
| "way": RelationWay | ||
| } | ||
| cls = cls_map.get(attrs["type"]) | ||
| if cls is None: | ||
| raise ValueError("Undefined type for member: '%s'" % attrs['type']) | ||
| self.cur_relation_member = cls(**params) | ||
| self._curr['members'].append(self.cur_relation_member) | ||
| def _handle_end_member(self): | ||
| self.cur_relation_member = None |
@@ -67,6 +67,6 @@ class OverPyException(BaseException): | ||
| """ | ||
| Raised if load of the Overpass API service is to high and it can't handle the request. | ||
| Raised if load of the Overpass API service is too high and it can't handle the request. | ||
| """ | ||
| def __init__(self): | ||
| OverPyException.__init__(self, "Server load to high") | ||
| OverPyException.__init__(self, "Server load too high") | ||
@@ -73,0 +73,0 @@ |
+3
-1
| Metadata-Version: 1.1 | ||
| Name: overpy | ||
| Version: 0.3.1 | ||
| Version: 0.4 | ||
| Summary: Python Wrapper to access the OpenStreepMap Overpass API | ||
@@ -110,2 +110,3 @@ Home-page: https://github.com/DinoTools/python-overpy | ||
| Keywords: OverPy Overpass OSM OpenStreetMap | ||
| Platform: UNKNOWN | ||
@@ -121,3 +122,4 @@ Classifier: Development Status :: 4 - Beta | ||
| Classifier: Programming Language :: Python :: 3.4 | ||
| Classifier: Programming Language :: Python :: 3.5 | ||
| Classifier: Programming Language :: Python :: Implementation :: CPython | ||
| Classifier: Programming Language :: Python :: Implementation :: PyPy |
+9
-0
@@ -0,1 +1,10 @@ | ||
| [metadata] | ||
| license-file = LICENSE | ||
| [aliases] | ||
| test = pytest | ||
| [tool:pytest] | ||
| python_files = tests/*.py | ||
| [egg_info] | ||
@@ -2,0 +11,0 @@ tag_build = |
+12
-2
| #!/usr/bin/env python | ||
| import os | ||
| import sys | ||
| from setuptools import setup, find_packages | ||
@@ -11,4 +12,9 @@ | ||
| with open(os.path.join(base_dir, "README.rst")) as f: | ||
| long_description = f.read() | ||
| filename_readme = os.path.join(base_dir, "README.rst") | ||
| if sys.version_info[0] == 2: | ||
| import io | ||
| fp = io.open(filename_readme, encoding="utf-8") | ||
| else: | ||
| fp = open(filename_readme, encoding="utf-8") | ||
| long_description = fp.read() | ||
@@ -36,5 +42,7 @@ setup( | ||
| "Programming Language :: Python :: 3.4", | ||
| "Programming Language :: Python :: 3.5", | ||
| "Programming Language :: Python :: Implementation :: CPython", | ||
| "Programming Language :: Python :: Implementation :: PyPy" | ||
| ], | ||
| keywords="OverPy Overpass OSM OpenStreetMap", | ||
| install_requires=[], | ||
@@ -46,2 +54,4 @@ packages=find_packages(exclude=["*.tests", "*.tests.*"]), | ||
| }, | ||
| setup_requires=["pytest-runner"], | ||
| tests_require=["pytest"], | ||
| ) |
+11
-4
| import os | ||
| import sys | ||
| from threading import Thread, Lock | ||
| import time | ||
| from multiprocessing import Process | ||
| from threading import Lock | ||
@@ -14,3 +16,3 @@ PY2 = sys.version_info[0] == 2 | ||
| HOST = "127.0.0.1" | ||
| PORT_START = 10000 | ||
| PORT_START = sys.version_info[0] * 10000 + sys.version_info[1] * 100 | ||
@@ -45,5 +47,10 @@ current_port = PORT_START | ||
| ) | ||
| p = Process(target=server_thread, args=(server,)) | ||
| p.start() | ||
| # Give the server some time to bind | ||
| # Is there a better option? | ||
| time.sleep(0.2) | ||
| return ( | ||
| "http://%s:%d" % (HOST, port), | ||
| Thread(target=server_thread, args=(server,)) | ||
| ) | ||
| p | ||
| ) |
+190
-8
| from decimal import Decimal | ||
| from datetime import datetime | ||
| import os | ||
@@ -11,2 +12,69 @@ | ||
| class BaseTestAreas(object): | ||
| def _test_area01(self, result): | ||
| assert len(result.areas) == 4 | ||
| assert len(result.nodes) == 0 | ||
| assert len(result.relations) == 0 | ||
| assert len(result.ways) == 0 | ||
| area = result.areas[0] | ||
| assert isinstance(area, overpy.Area) | ||
| assert isinstance(area.id, int) | ||
| assert area.id == 2448756446 | ||
| assert isinstance(area.tags, dict) | ||
| assert len(area.tags) == 12 | ||
| area = result.areas[1] | ||
| assert isinstance(area, overpy.Area) | ||
| assert isinstance(area.id, int) | ||
| assert area.id == 3600055060 | ||
| assert isinstance(area.tags, dict) | ||
| assert len(area.tags) == 13 | ||
| area = result.areas[2] | ||
| assert isinstance(area, overpy.Area) | ||
| assert isinstance(area.id, int) | ||
| assert area.id == 3605945175 | ||
| assert isinstance(area.tags, dict) | ||
| assert len(area.tags) == 12 | ||
| area = result.areas[3] | ||
| assert isinstance(area, overpy.Area) | ||
| assert isinstance(area.id, int) | ||
| assert area.id == 3605945176 | ||
| assert isinstance(area.tags, dict) | ||
| assert len(area.tags) == 14 | ||
| # try to get a single area by id | ||
| area = result.get_area(3605945175) | ||
| assert area.id == 3605945175 | ||
| # try to get a single area by id not available in the result | ||
| with pytest.raises(overpy.exception.DataIncomplete): | ||
| result.get_area(123456) | ||
| # area_ids is an alias for get_node_ids() and should return the same data | ||
| for area_ids in (result.area_ids, result.get_area_ids()): | ||
| assert len(area_ids) == 4 | ||
| assert area_ids[0] == 2448756446 | ||
| assert area_ids[1] == 3600055060 | ||
| assert area_ids[2] == 3605945175 | ||
| assert area_ids[3] == 3605945176 | ||
| assert len(result.node_ids) == 0 | ||
| assert len(result.get_node_ids()) == 0 | ||
| assert len(result.relation_ids) == 0 | ||
| assert len(result.get_relation_ids()) == 0 | ||
| assert len(result.way_ids) == 0 | ||
| assert len(result.get_way_ids()) == 0 | ||
| class BaseTestNodes(object): | ||
@@ -57,6 +125,9 @@ def _test_node01(self, result): | ||
| assert len(node.attributes) == 5 | ||
| # ToDo: fix | ||
| # assert node.attributes["changeset"] == 23456789 | ||
| # assert node.attributes["user"] == "TestUser" | ||
| assert node.attributes["changeset"] == 23456789 | ||
| assert node.attributes["timestamp"] == datetime(2014, 12, 14, 7, 27, 19, 0, None) | ||
| assert node.attributes["uid"] == 345678 | ||
| assert node.attributes["user"] == "TestUser" | ||
| assert node.attributes["version"] == 1 | ||
| # try to get a single node by id | ||
@@ -108,2 +179,8 @@ node = result.get_node(50878400) | ||
| assert relation.attributes["changeset"] == 17433822 | ||
| assert relation.attributes["timestamp"] == datetime(2014, 12, 15, 13, 13, 11, 0, None) | ||
| assert relation.attributes["uid"] == 12345 | ||
| assert relation.attributes["user"] == "Username" | ||
| assert relation.attributes["version"] == 12 | ||
| assert len(relation.members) == 5 | ||
@@ -169,3 +246,50 @@ assert isinstance(relation.members[0], overpy.RelationNode) | ||
| def _test_relation03(self, result): | ||
| assert len(result.nodes) == 0 | ||
| assert len(result.relations) == 1 | ||
| assert len(result.ways) == 0 | ||
| relation = result.relations[0] | ||
| assert isinstance(relation, overpy.Relation) | ||
| assert isinstance(relation.id, int) | ||
| assert relation.id == 23092 | ||
| assert isinstance(relation.tags, dict) | ||
| assert len(relation.tags) == 10 | ||
| assert isinstance(relation.center_lat, Decimal) | ||
| assert isinstance(relation.center_lon, Decimal) | ||
| assert relation.center_lat == Decimal("50.8176646") | ||
| assert relation.center_lon == Decimal("7.0208539") | ||
| def _test_relation04(self, result): | ||
| assert len(result.nodes) == 0 | ||
| assert len(result.relations) == 1 | ||
| assert len(result.ways) == 0 | ||
| relation = result.relations[0] | ||
| assert isinstance(relation, overpy.Relation) | ||
| assert isinstance(relation.id, int) | ||
| assert relation.id == 23092 | ||
| assert isinstance(relation.tags, dict) | ||
| assert len(relation.tags) == 10 | ||
| way = relation.members[2] | ||
| assert isinstance(way, overpy.RelationWay) | ||
| assert len(way.attributes) == 0 | ||
| assert isinstance(way.attributes, dict) | ||
| assert isinstance(way.geometry, list) | ||
| assert len(way.geometry) == 2 | ||
| assert isinstance(way.geometry[0], overpy.RelationWayGeometryValue) | ||
| assert isinstance(way.geometry[0].lat, Decimal) | ||
| assert isinstance(way.geometry[0].lon, Decimal) | ||
| assert way.geometry[0].lat == Decimal("50.8137408") | ||
| assert way.geometry[0].lon == Decimal("6.9813352") | ||
| class BaseTestWay(object): | ||
@@ -202,6 +326,7 @@ def _test_way01(self, result): | ||
| # ToDo: fix it | ||
| # assert way.attributes["uid"] == 345678 | ||
| # assert way.attributes["user"] == "TestUser" | ||
| # assert way.attributes["changeset"] == 23456789 | ||
| assert way.attributes["changeset"] == 23456789 | ||
| assert way.attributes["timestamp"] == datetime(2014, 12, 14, 7, 27, 21, 0, None) | ||
| assert way.attributes["uid"] == 345678 | ||
| assert way.attributes["user"] == "TestUser" | ||
| assert way.attributes["version"] == 1 | ||
@@ -286,2 +411,59 @@ # try to get a single way by id | ||
| assert len(way_ids) == 1 | ||
| assert way_ids[0] == 317146077 | ||
| assert way_ids[0] == 317146077 | ||
| def _test_way03(self, result): | ||
| assert len(result.nodes) == 4 | ||
| assert len(result.relations) == 0 | ||
| assert len(result.ways) == 1 | ||
| way = result.ways[0] | ||
| assert isinstance(way, overpy.Way) | ||
| assert isinstance(way.id, int) | ||
| assert way.id == 225576797 | ||
| assert isinstance(way.tags, dict) | ||
| assert len(way.tags) == 2 | ||
| assert way.tags["building"] == "kiosk" | ||
| assert way.tags["shop"] == "florist" | ||
| assert isinstance(way.center_lat, Decimal) | ||
| assert isinstance(way.center_lon, Decimal) | ||
| assert way.center_lat == Decimal("41.8954998") | ||
| assert way.center_lon == Decimal("12.5032265") | ||
| for nodes in (way.nodes, way.get_nodes()): | ||
| assert len(nodes) == 5 | ||
| for node in nodes: | ||
| assert isinstance(node, overpy.Node) | ||
| assert isinstance(node.id, int) | ||
| assert nodes[0].id == 2343425525 | ||
| assert nodes[1].id == 2343425528 | ||
| assert nodes[2].id == 2343425526 | ||
| assert nodes[3].id == 2343425523 | ||
| assert nodes[4].id == 2343425525 | ||
| # try to get a single way by id | ||
| way = result.get_way(225576797) | ||
| assert way.id == 225576797 | ||
| # try to get a single way by id not available in the result | ||
| with pytest.raises(overpy.exception.DataIncomplete): | ||
| result.get_way(123456) | ||
| # node_ids is an alias for get_node_ids() and should return the same data | ||
| for node_ids in (result.node_ids, result.get_node_ids()): | ||
| assert len(node_ids) == 4 | ||
| assert node_ids[0] == 2343425523 | ||
| assert node_ids[1] == 2343425525 | ||
| assert node_ids[2] == 2343425526 | ||
| assert node_ids[3] == 2343425528 | ||
| assert len(result.relation_ids) == 0 | ||
| assert len(result.get_relation_ids()) == 0 | ||
| # way_ids is an alias for get_way_ids() and should return the same data | ||
| for way_ids in (result.way_ids, result.get_way_ids()): | ||
| assert len(way_ids) == 1 | ||
| assert way_ids[0] == 225576797 |
+28
-1
@@ -5,6 +5,13 @@ import pytest | ||
| from tests.base_class import BaseTestNodes, BaseTestRelation, BaseTestWay | ||
| from tests.base_class import BaseTestAreas, BaseTestNodes, BaseTestRelation, BaseTestWay | ||
| from tests.base_class import read_file | ||
| class TestAreas(BaseTestAreas): | ||
| def test_area01(self): | ||
| api = overpy.Overpass() | ||
| result = api.parse_json(read_file("json/area-01.json")) | ||
| self._test_area01(result) | ||
| class TestNodes(BaseTestNodes): | ||
@@ -28,3 +35,13 @@ def test_node01(self): | ||
| def test_relation03(self): | ||
| api = overpy.Overpass() | ||
| result = api.parse_json(read_file("json/relation-03.json")) | ||
| self._test_relation03(result) | ||
| def test_relation04(self): | ||
| api = overpy.Overpass() | ||
| result = api.parse_json(read_file("json/relation-04.json")) | ||
| self._test_relation04(result) | ||
| class TestWay(BaseTestWay): | ||
@@ -41,3 +58,13 @@ def test_way01(self): | ||
| def test_way03(self): | ||
| api = overpy.Overpass() | ||
| result = api.parse_json(read_file("json/way-03.json")) | ||
| self._test_way03(result) | ||
| def test_way04(self): | ||
| api = overpy.Overpass() | ||
| with pytest.raises(ValueError): | ||
| api.parse_json(read_file("json/way-04.json")) | ||
| class TestDataError(object): | ||
@@ -44,0 +71,0 @@ def test_element_wrong_type(self): |
@@ -93,3 +93,2 @@ import pytest | ||
| url, t = new_server_thread(HandleResponseJSON) | ||
| t.start() | ||
@@ -104,3 +103,2 @@ api = overpy.Overpass(read_chunk_size=128) | ||
| url, t = new_server_thread(HandleOverpassBadRequest) | ||
| t.start() | ||
@@ -124,3 +122,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleOverpassBadRequestEncoding) | ||
| t.start() | ||
@@ -139,3 +136,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleOverpassTooManyRequests) | ||
| t.start() | ||
@@ -153,3 +149,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleOverpassGatewayTimeout) | ||
| t.start() | ||
@@ -167,3 +162,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleOverpassUnknownHTTPStatusCode) | ||
| t.start() | ||
@@ -181,3 +175,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleResponseJSON) | ||
| t.start() | ||
@@ -192,3 +185,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleResponseUnknown) | ||
| t.start() | ||
@@ -203,3 +195,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleResponseXML) | ||
| t.start() | ||
@@ -206,0 +197,0 @@ api = overpy.Overpass() |
@@ -41,3 +41,2 @@ import pytest | ||
| url, t = new_server_thread(HandleResponseJSON01) | ||
| t.start() | ||
@@ -65,3 +64,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleResponseJSON02) | ||
| t.start() | ||
@@ -89,3 +87,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleResponseJSON03) | ||
| t.start() | ||
@@ -92,0 +89,0 @@ api = overpy.Overpass() |
+32
-6
@@ -48,6 +48,37 @@ import pytest | ||
| class TestArea(object): | ||
| def test_missing_unresolvable(self): | ||
| url, t = new_server_thread(HandleResponseJSON02) | ||
| api = overpy.Overpass() | ||
| api.url = url | ||
| result1 = api.parse_json(read_file("json/result-expand-01.json")) | ||
| with pytest.raises(overpy.exception.DataIncomplete): | ||
| result1.get_area(123, resolve_missing=True) | ||
| t.join() | ||
| def test_missing_resolvable(self): | ||
| url, t = new_server_thread(HandleResponseJSON02) | ||
| api = overpy.Overpass() | ||
| api.url = url | ||
| result1 = api.parse_json(read_file("json/result-expand-01.json")) | ||
| # Node must not be available | ||
| with pytest.raises(overpy.exception.DataIncomplete): | ||
| result1.get_area(3605945176) | ||
| # Node must be available | ||
| area = result1.get_area(3605945176, resolve_missing=True) | ||
| assert isinstance(area, overpy.Area) | ||
| assert area.id == 3605945176 | ||
| t.join() | ||
| class TestNode(object): | ||
| def test_missing_unresolvable(self): | ||
| url, t = new_server_thread(HandleResponseJSON02) | ||
| t.start() | ||
@@ -64,3 +95,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleResponseJSON02) | ||
| t.start() | ||
@@ -87,3 +117,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleResponseJSON02) | ||
| t.start() | ||
@@ -100,3 +129,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleResponseJSON02) | ||
| t.start() | ||
@@ -123,3 +151,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleResponseJSON02) | ||
| t.start() | ||
@@ -136,3 +163,2 @@ api = overpy.Overpass() | ||
| url, t = new_server_thread(HandleResponseJSON02) | ||
| t.start() | ||
@@ -139,0 +165,0 @@ api = overpy.Overpass() |
+74
-6
@@ -5,11 +5,26 @@ import pytest | ||
| from tests.base_class import BaseTestNodes, BaseTestRelation, BaseTestWay | ||
| from tests.base_class import BaseTestAreas, BaseTestNodes, BaseTestRelation, BaseTestWay | ||
| from tests.base_class import read_file | ||
| class TestAreas(BaseTestAreas): | ||
| def test_node01(self): | ||
| api = overpy.Overpass() | ||
| # DOM | ||
| result = api.parse_xml(read_file("xml/area-01.xml"), parser=overpy.XML_PARSER_DOM) | ||
| self._test_area01(result) | ||
| # SAX | ||
| result = api.parse_xml(read_file("xml/area-01.xml"), parser=overpy.XML_PARSER_SAX) | ||
| self._test_area01(result) | ||
| class TestNodes(BaseTestNodes): | ||
| def test_node01(self): | ||
| api = overpy.Overpass() | ||
| result = api.parse_xml(read_file("xml/node-01.xml")) | ||
| # DOM | ||
| result = api.parse_xml(read_file("xml/node-01.xml"), parser=overpy.XML_PARSER_DOM) | ||
| self._test_node01(result) | ||
| # SAX | ||
| result = api.parse_xml(read_file("xml/node-01.xml"), parser=overpy.XML_PARSER_SAX) | ||
| self._test_node01(result) | ||
@@ -20,23 +35,76 @@ | ||
| api = overpy.Overpass() | ||
| result = api.parse_xml(read_file("xml/relation-01.xml")) | ||
| # DOM | ||
| result = api.parse_xml(read_file("xml/relation-01.xml"), parser=overpy.XML_PARSER_DOM) | ||
| self._test_relation01(result) | ||
| # SAX | ||
| result = api.parse_xml(read_file("xml/relation-01.xml"), parser=overpy.XML_PARSER_SAX) | ||
| self._test_relation01(result) | ||
| def test_relation02(self): | ||
| api = overpy.Overpass() | ||
| result = api.parse_xml(read_file("xml/relation-02.xml")) | ||
| # DOM | ||
| result = api.parse_xml(read_file("xml/relation-02.xml"), parser=overpy.XML_PARSER_DOM) | ||
| self._test_relation02(result) | ||
| # SAX | ||
| result = api.parse_xml(read_file("xml/relation-02.xml"), parser=overpy.XML_PARSER_SAX) | ||
| self._test_relation02(result) | ||
| def test_relation03(self): | ||
| api = overpy.Overpass() | ||
| # DOM | ||
| result = api.parse_xml(read_file("xml/relation-03.xml"), parser=overpy.XML_PARSER_DOM) | ||
| self._test_relation03(result) | ||
| # SAX | ||
| result = api.parse_xml(read_file("xml/relation-03.xml"), parser=overpy.XML_PARSER_SAX) | ||
| self._test_relation03(result) | ||
| def test_relation04(self): | ||
| api = overpy.Overpass() | ||
| # DOM | ||
| result = api.parse_xml(read_file("xml/relation-04.xml"), parser=overpy.XML_PARSER_DOM) | ||
| self._test_relation04(result) | ||
| # SAX | ||
| result = api.parse_xml(read_file("xml/relation-04.xml"), parser=overpy.XML_PARSER_SAX) | ||
| self._test_relation04(result) | ||
| class TestWay(BaseTestWay): | ||
| def test_way01(self): | ||
| api = overpy.Overpass() | ||
| result = api.parse_xml(read_file("xml/way-01.xml")) | ||
| # DOM | ||
| result = api.parse_xml(read_file("xml/way-01.xml"), parser=overpy.XML_PARSER_DOM) | ||
| self._test_way01(result) | ||
| # SAX | ||
| result = api.parse_xml(read_file("xml/way-01.xml"), parser=overpy.XML_PARSER_SAX) | ||
| self._test_way01(result) | ||
| def test_way02(self): | ||
| api = overpy.Overpass() | ||
| result = api.parse_xml(read_file("xml/way-02.xml")) | ||
| # DOM | ||
| result = api.parse_xml(read_file("xml/way-02.xml"), parser=overpy.XML_PARSER_DOM) | ||
| self._test_way02(result) | ||
| # SAX | ||
| result = api.parse_xml(read_file("xml/way-02.xml"), parser=overpy.XML_PARSER_SAX) | ||
| self._test_way02(result) | ||
| def test_way03(self): | ||
| api = overpy.Overpass() | ||
| # DOM | ||
| result = api.parse_xml(read_file("xml/way-03.xml"), parser=overpy.XML_PARSER_DOM) | ||
| self._test_way03(result) | ||
| # SAX | ||
| result = api.parse_xml(read_file("xml/way-03.xml"), parser=overpy.XML_PARSER_SAX) | ||
| self._test_way03(result) | ||
| def test_way04(self): | ||
| api = overpy.Overpass() | ||
| # DOM | ||
| with pytest.raises(ValueError): | ||
| api.parse_xml(read_file("xml/way-04.xml"), parser=overpy.XML_PARSER_DOM) | ||
| # SAX | ||
| with pytest.raises(ValueError): | ||
| api.parse_xml(read_file("xml/way-04.xml"), parser=overpy.XML_PARSER_SAX) | ||
| class TestDataError(object): | ||
@@ -43,0 +111,0 @@ def _get_element_wrong_type(self): |
Alert delta unavailable
Currently unable to show alert delta for PyPI packages.
241399
210.25%62
195.24%5488
219.63%