Skip to main content

将 ogr 可读文件(如 shapefile)转换为 .osm 或 .pbf 数据的工具

项目描述

ogr2pbf

将 ogr 可读文件(如 shapefile)转换为 .pbf 或 .osm 数据的工具

安装

Ogr2pbf 需要 python 3、带有 python 绑定的 gdal、lxml 和 protobuf。根据您要阅读的文件格式,您可能必须自己编译 gdal,但 shapefile 应该没有问题。

使用点子

pip install --upgrade ogr2pbf

从源头

克隆此存储库并在创建的目录中运行以下命令。

python setup.py install

关于

该程序基于pnorman 的 ogr2osm 版本,但经过重写以使其可用作通用库。

Ogr2pbf 将读取 ogr 可以读取的任何数据源并为您处理重投影。将外部数据源标签转换为 OSM 标签需要一个 python 文件,允许您使用复杂的逻辑。如果没有指定翻译,它将使用身份翻译,将所有标签从源传送到 .pbf 或 .osm 输出。

进口注意事项

任何计划导入 OpenStreetMap 的人都应该阅读并查看wiki 上的导入指南。在编写翻译文件时,您应该查看其他示例并仔细考虑每个外部数据源标签,看看是否应该将其转换为 OSM 标签。

用法

Ogr2pbf 可以作为一个独立的应用程序使用,但你也可以在你自己的 python 项目中使用它的类。

独立

usage: __main__.py [-h] [-t TRANSLATION] [--encoding ENCODING]
                   [--sql SQLQUERY] [--no-memory-copy] [-e EPSG_CODE]
                   [-p PROJ4_STRING] [--gis-order]
                   [--rounding-digits ROUNDINGDIGITS]
                   [--significant-digits SIGNIFICANTDIGITS]
                   [--split-ways MAXNODESPERWAY] [--id ID] [--idfile IDFILE]
                   [--saveid SAVEID] [-o OUTPUT] [-f] [--osm]
                   [--no-upload-false] [--never-download] [--never-upload]
                   [--locked] [--add-bounds]
                   DATASOURCE

positional arguments:
  DATASOURCE            DATASOURCE can be a file path or a org PostgreSQL
                        connection string such as: "PG:dbname=pdx_bldgs
                        user=emma host=localhost" (including the quotes)

optional arguments:
  -h, --help            show this help message and exit
  -t TRANSLATION, --translation TRANSLATION
                        Select the attribute-tags translation method. See the
                        translations/ directory for valid values.
  --encoding ENCODING   Encoding of the source file. If specified, overrides
                        the default of utf-8
  --sql SQLQUERY        SQL query to execute on a PostgreSQL source
  --no-memory-copy      Do not make an in-memory working copy
  -e EPSG_CODE, --epsg EPSG_CODE
                        EPSG code of source file. Do not include the 'EPSG:'
                        prefix. If specified, overrides projection from source
                        metadata if it exists.
  -p PROJ4_STRING, --proj4 PROJ4_STRING
                        PROJ.4 string. If specified, overrides projection from
                        source metadata if it exists.
  --gis-order           Consider the source coordinates to be in traditional
                        GIS order
  --rounding-digits ROUNDINGDIGITS
                        Number of decimal places for rounding when snapping
                        nodes together (default: 7)
  --significant-digits SIGNIFICANTDIGITS
                        Number of decimal places for coordinates to output
                        (default: 9)
  --split-ways MAXNODESPERWAY
                        Split ways with more than the specified number of
                        nodes. Defaults to 1800. Any value below 2 - do not
                        split.
  --id ID               ID to start counting from for the output file.
                        Defaults to 0.
  --idfile IDFILE       Read ID to start counting from from a file.
  --saveid SAVEID       Save last ID after execution to a file.
  -o OUTPUT, --output OUTPUT
                        Set destination .osm file name and location.
  -f, --force           Force overwrite of output file.
  --osm                 Write the output as an OSM file in stead of a PBF file
  --no-upload-false     Omit upload=false from the completed file to suppress
                        JOSM warnings when uploading.
  --never-download      Prevent JOSM from downloading more data to this file.
  --never-upload        Completely disables all upload commands for this file
                        in JOSM, rather than merely showing a warning before
                        uploading.
  --locked              Prevent any changes to this file in JOSM, such as
                        editing or downloading, and also prevents uploads.
                        Implies upload="never" and download="never".
  --add-bounds          Add boundaries to output file

作为图书馆

示例代码:

import ogr2pbf

# 1. Required parameters for this example:

# - datasource_parameter is a variable holding the input filename, or a
#   database connection such as "PG:dbname=pdx_bldgs user=emma host=localhost"
datasource_parameter = ...

# - in case your datasource is a database, you will need a query
query = ...

# - the output file to write
output_file = ...

# 2. Create the translation object. If no translation is required you
#    can use the base class from ogr2pbf, otherwise you need to instantiate
#    a subclass of ogr2pbf.TranslationBase
translation_object = ogr2pbf.TranslationBase()

# 3. Create the ogr datasource. You can specify a source projection but
#    EPSG:4326 will be assumed if none is given and if the projection of the
#    datasource is unknown.
datasource = ogr2pbf.OgrDatasource(translation_object)
datasource.open_datasource(datasource_parameter)

# 4. If the datasource is a database then you must set the query to use.
#    Setting the query for any other datasource is useless but not an error.
datasource.set_query(query)

# 5. Instantiate the ogr to osm converter class ogr2pbf.OsmData and start the
#    conversion process
osmdata = ogr2pbf.OsmData(translation_object)
osmdata.process(datasource)

# 6. Instantiate either ogr2pbf.OsmDataWriter or ogr2pbf.PbfDataWriter and
#    invoke output() to write the output file. If required you can write a
#    custom datawriter class by subclassing ogr2pbf.DataWriterBase.
datawriter = ogr2pbf.OsmDataWriter(output_file)
osmdata.output(datawriter)

有关自定义翻译类和坐标重投影的完整示例,请参阅contour-osm

翻译

就像 ogr2osm 一样,ogr2pbf 支持您的数据的自定义翻译。为此,您需要继承 ogr2pbf.TranslationBase 并覆盖您要运行自定义代码的方法。

class TranslationBase:
    # Override this method if you want to modify the given layer,
    # or return None if you want to suppress the layer
    def filter_layer(self, layer):
        return layer

    # Override this method if you want to modify the given feature,
    # or return None if you want to suppress the feature
    # note 1: layer_fields contains a tuple (index, field_name, field_type)
    # note 2: reproject is a function to convert the feature to 4326 projection
    # with coordinates in traditional gis order. However, do not return the
    # reprojected feature since it will be done again in ogr2pbf.
    def filter_feature(self, ogrfeature, layer_fields, reproject):
        return ogrfeature

    # Override this method if you want to modify or add tags to the xml output
    def filter_tags(self, tags):
        return tags

    # This method is used to identify identical nodes for merging. By default
    # only the rounded coordinates are taken into account, but you can extend
    # this with some tags as desired. The return value should be a hashable
    # type, if you don't want to merge you can just return a counter value.
    # note: this function will not be called for nodes belonging to a way,
    # they are always identified by the tuple (rounded_x, rounded_y).
    def get_unique_node_identifier(self, rounded_x, rounded_y, tags):
        return (rounded_x, rounded_y)

    # This method is called after the creation of an OsmGeometry object. The
    # ogr feature and ogr geometry used to create the object are passed as
    # well. Note that any return values will be discarded by ogr2pbf.
    def process_feature_post(self, osmgeometry, ogrfeature, ogrgeometry):
        pass

    # Override this method if you want to modify the list of nodes, ways or
    # relations, or take any additional actions right before writing the
    # objects to the OSM file. Note that any return values will be discarded
    # by ogr2pbf.
    def process_output(self, osmnodes, osmways, osmrelations):
        pass

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

ogr2pbf-0.1.2.tar.gz (25.7 kB 查看哈希

已上传 source

内置分布

ogr2pbf-0.1.2-py3-none-any.whl (26.6 kB 查看哈希

已上传 py3