下载、读取/解析和导入/导出openstreetmap数据摘要

pydriosm的Python项目详细描述


Pydriosm

作者:qian futwitter url

pypipypi-python versionpypi-licenseGitHub code size in bytespypi-downloads

该软件包为研究人员提供了有用的实用工具,使他们能够轻松下载和读取/分析OpenStreetMap数据摘要(在.pbf.shp.zip中),这些数据摘要可从免费下载服务器获得:geofabrikbbbike。此外,它还提供了一种方便的方式,将解析后的数据导入/转储到并从apostgresql服务器检索。


内容


安装

Windows操作系统用户可以在命令提示符下使用"pip install"命令:

pip install --upgrade pydriosm

如果您正在使用一些ide,比如pycharm,那么您应该能够在pypi存储库中找到pydriosm。(在pycharm中,转到"设置"并在"项目解释器"中找到pydriosm;要安装它,请选择pydriosm,然后单击"安装包"。)

注意:

快速启动

首先,我们导入包:

importpydriosmasdri

当前版本的包只处理免费服务器上提供的子区域数据文件。要获取可用的子面域名称的完整列表,可以使用

subregion_list=dri.fetch_subregion_info_catalogue("GeoFabrik-subregion-name-list")print(subregion_list)

下面是一个使用"大伦敦"地区的.pbf数据来简要演示此软件包可以执行的一些主要功能的示例。

下载数据

要下载数据提取可用的区域(或更确切地说,子区域)的OSM数据,需要指定区域的名称(例如"大伦敦"):

subregion_name='Greater London'# or, subregion_name = 'london'; case-insensitive and fuzzy (but not toooo... fuzzy)

下载"大伦敦"的数据:

dri.download_subregion_osm_file(subregion_name,osm_file_format=".osm.pbf",download_dir=None,update=False,download_confirmation_required=True)

注意,默认情况下download_dirnone。在这种情况下,将创建一个默认文件路径,并将下载的文件保存在那里。

检查默认文件路径和名称:

default_fn,default_fp=dri.get_default_path_to_osm_file(subregion_name,osm_file_format=".osm.pbf",mkdir=False,update=False)print("Default filename: {}".format(default_fn))print("Default file path: {}".format(default_fp))

但是,您也可以将download_dir设置为任何其他有效目录,特别是在下载多个子区域的数据时。例如,

# Specify the our own data directorycustomised_data_dir="test_data"# So "test_data" folder will be created in our current working directory# Alternatively, we could specify a full path # import os# customised_data_dir = os.path.join(os.getcwd(), "test_data")# Download .pbf data of both 'London' and 'Kent' to the `customised_data_dir`dri.download_subregion_osm_file('London','Kent',osm_file_format=".osm.pbf",update=False,download_dir=customised_data_dir,download_confirmation_required=True)

.pbf数据文件将按指定保存到下载目录中。

读取/分析数据

解析.pbf数据主要依赖于gdal/ogr,使用read\u osm\u pbf()函数。

greater_london=dri.read_osm_pbf(subregion_name,data_dir=None,parsed=True,file_size_limit=50,fmt_other_tags=True,fmt_single_geom=True,fmt_multi_geom=True,update=False,download_confirmation_required=True,pickle_it=True,rm_raw_file=False)

如果数据文件太大,解析过程可能需要几分钟甚至更长的时间。如果文件大小大于给定的文件大小限制(默认值:50 MB),则将以分块方式分析数据。

请注意,大伦敦是一个dict,其键是五个不同层的名称:"点"、"线"、"多行"、"多多边形"和"其他关系"。

如果只指定了子区域的名称,即read_osm_pbf(subsystem_name,…),则函数将从默认文件路径查找数据文件。否则,函数需要特定的数据目录。例如,要读取/分析"自定义数据目录"中的数据,即"测试数据"文件夹,您需要设置如下:

greater_london_test=dri.read_osm_pbf(subregion_name,data_dir=customised_data_dir)

大伦敦大伦敦测试应该相同。

为了让生活更轻松,您可以跳过下载步骤,直接使用read_osm_pbf()。也就是说,如果目标数据不可用,read_osm_pbf()将首先下载数据文件。默认情况下,如果download_confirmation_required=true

设置pickle-it=true是将解析数据的本地副本保存为pickle-file。如果update=false,当您再次运行read_osm_pbf(subsystem_name)时,函数将直接加载pickle文件。如果update=true,函数将尝试下载最新版本的数据文件并再次对其进行分析。

相比之下,您可以使用read_shp_zip(),它主要依赖于geopandas,读取.shp.zip数据文件:

pip install --upgrade pydriosm
0

请注意,大伦敦和大伦敦是不同的。

若要获取有关多个子面域的信息,还可以合并这些子面域中特定图层的.shp文件。例如,要合并"大伦敦"和"埃塞克斯"两个分区域的"铁路"层,我们可以执行以下操作。

pip install --upgrade pydriosm
1

您还可以设置data dir=customized\u data dir以保存下载的.shp.zip文件;或设置output\u dir=customized\u data dir以使合并的.shp文件可用于customized\u data dir

使用PostgreSQL服务器导入和检索数据

pydriosm还提供了一个名为"osm"的类,它与postgresql服务器通信。

pip install --upgrade pydriosm
2

要建立与服务器的连接,系统会要求您输入用户名、密码、主机名/地址和要连接的数据库的名称。

例如,您可以键入"postgres"来连接默认数据库。(请注意,键入名称时应去掉引号。)

如果要连接到另一个数据库(而不是默认的"postgres"),请运行

pip install --upgrade pydriosm
3

然后,如果在建立连接之前不存在名为"osm_pbf_data撸u extracts"的数据库,则会自动创建该数据库。

(1)将数据导入数据库

要将"大伦敦"的大伦敦(即已解析的.pbf数据)导入数据库,"OSM>大伦敦数据提取":

pip install --upgrade pydriosm
4

greater_london数据的每个元素(即层)将存储在不同的模式中。架构被命名为每个层的名称。

(2)从数据库检索数据

要检索转储的数据:

pip install --upgrade pydriosm
5

注意greater_london_retrieval可能与greater_london不完全相同。这是因为greater-london中元素的键按以下顺序排列:"points"、"lines"、"multilinestrings"、"multipolygons"和"other-relations";而当将greater-london转储到数据库时,五个不同的模式按字母顺序排序为如下:"行"、"多行"、"多多边形"、"其他关系"和"点",因此从服务器检索数据将按后一顺序进行。尽管如此,大伦敦和大伦敦检索中包含的数据是一致的。

如果需要查询特定层(或多个层)的数据,或按特定的层(模式)顺序查询数据:

pip install --upgrade pydriosm
6

(3)将给定(子)区域的所有子区域的数据导入数据库

pip install --upgrade pydriosm
7

设置rm_raw_file=falsedata_dir=none会将所有原始.pbf数据文件保留在默认数据文件夹中。

如果要导入"大不列颠"的所有分区域数据:

pip install --upgrade pydriosm
8

不是返回['England'、'Scotland'、'Wales'],而是包含"England"(而不是"England"作为单个元素)、"Scotland"和"Wales"的所有子区域。


website网站

数据/地图数据

所有来自OpenStreetMap的数据都在OpenStreetMap许可证下获得许可。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java解析一个文本文件,如果内容是一种特定的格式,就打印它   java如何使jbutton在另一个组件中执行键盘笔划   连接到独立帐户的java Stripe   java在数据库连接过程中出错。。。初始连接   一个系列JavaFX中特定节点的java集样式   java重建recycler视图会导致它消失   在codechef上提交java Getting runtime(NZEC)时出错   Java类路径设置错误   java如何显示数组中2个数字之间的信息?   java为什么新的GC只有很长的用户时间?   如何解决java。关于此代码的lang.OutOfMemoryError   通过应用程序在Facebook粉丝页面上发布java帖子   java Red5服务器无法启动   系统输出Java读取文本文件外置行   java整数。Parse对excel获取的字符串抛出NumberFormatException   有一个Java数组列表;如何按每个数组的最后一个元素排序?   java需要txt文件中的数据(以逗号分隔)来用现有类中的对象填充arraylist