Skip to main content

以 GeoJSON 和 MVT 切片格式提供 OpenstreetMap 数据

项目描述

编解码器

DjangoStreetMap

DjangSstreetMap 是一个 Django 应用程序,用于将 OSM 数据加载到 postgis 数据库中,并将 OSM 数据作为 MVT 切片提供。

Openstreetmap 矢量瓷砖

“矢量瓦片是一种用于存储地理空间矢量数据的轻量级数据格式”

有关 MVT(Mapbox Vector Tiles)的介绍,请参阅mapbox 文档 有关 OSM 的介绍,请参阅openstreetmap.org

本项目的目的

这是一个 Django 应用程序

  1. 将 OSM 数据导入为 Django 模型
  2. 将 Django 模型公开为 MVT(Mapbox Vector Tile)地理格式数据

当几何位于 srid=3857 时(或者可能在该 SRID 中有索引?),切片生成速度要快得多

先决条件

您需要gdal安装库

在 Ubuntu 上:

sudo apt install binutils libproj-dev gdal-bin

否则请参阅 Django 文档“安装地理空间库”

添加到项目

如有必要,在您的环境中安装 psycopg2

使用以下应用扩展 installed_apps:

pip install osmflex

[
    "django.contrib.gis",
    "djangostreetmap",
    "osmflex",
]

(推荐)设置缓存

您可能希望为您的切片设置快速缓存,例如 Memcached。如果找不到,将使用默认缓存;这可能会慢一些,并且非常不持久 这假设您正在运行 memcached (Linux apt install memcached:) 并安装了 memcached( pip install python-memcached)

CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

在测试中运行更快

poetry install

要运行 pytest,您需要有一个合适的 postgis 数据库如果您使用 docker,一个选项是运行以下命令:

docker run \
    --rm \
    -p 49155:5432 \
    --name=djangostreetmap \
    -e POSTGRES_PASSWORD=post1234 \
    postgis/postgis:14-3.2 \
    -c fsync=off \
    -c shared_buffers=4096MB

poetry run pytest

Runserver 是“好的”,但这个秘诀将提供更快的性能用于演示目的

pip install gunicorn
gunicorn -w 8 djangostreetmap.wsgi:application

建造

诗歌版本补丁诗歌构建诗歌发布

编写视图

要设置一个新视图,请创建一个 TileLayerView 的子类,其中一些MvtQuery实例作为图层:

class RoadLayerView(TileLayerView):
    layers = [
        MvtQuery(table=OsmHighway._meta.db_table, attributes=["name"], filters=[f"\"highway\"='{road_class}'"], layer=road_class)
        for road_class in ("primary", "secondary", "tertiary")
    ]

将 URL 附加到您的 urls.py,如下所示。注意缩放,x 和 y 是强制性的。

    path("highways/<int:zoom>/<int:x>/<int:y>.pbf", RoadLayerView.as_view()),

在开发中运行

设置postgis

docker run --name=osm \
    -e POSTGRES_DB=postgres \
    -e POSTGRES_USER=postgres \
    -e POSTGRES_PASSWORD=post1234 \
    -p 49155:5432 \
    postgis/postgis:12-3.1

找到您的端口:如果您不使用49155上述方法:

(env) josh@m4800:~/github/joshbrooks/djangostreetmap$ docker ps
CONTAINER ID   IMAGE                            COMMAND                  CREATED          STATUS             PORTS                                         NAMES
c619232fe38a   postgis/postgis:12-3.1           "docker-entrypoint.s…"   33 seconds ago   Up 32 seconds      0.0.0.0:49155->5432/tcp, :::49155->5432/tcp   osm
...

OSM 位于端口 49155

要将其应用于您的项目:

  DATABASES = {
    "default": {
        "ENGINE": "django.contrib.gis.db.backends.postgis",
        "USER": "postgres",
        "PASSWORD": "post1233",
        "HOST": "localhost",
        "PORT": "49154",
        "NAME": "postgres",
    }
}

获取您的数据

wget https://download.geofabrik.de/australia-oceania/papua-new-guinea-latest.osm.pbf

或者

wget https://download.geofabrik.de/asia/east-timor-latest.osm.pbf

安装 osm2psql

要运行下面的管理命令,您需要osm2pgsql大约 1.3 或更高版本。这在 ubuntu 包管理器中不可用(还)...

导入数据

“osmflex”应用程序有两个要运行的管理命令,它们将填充 osmflex 模型

./manage.py run_osm2pgsql /media/josh/blackgate/osm/asia/east-timor-latest.osm.pbf
./manage.py import_from_pgosmflex

探索数据

请参阅 Django 管理员了解 osmflex:

http://localhost:8000/admin/osmflex

psql --host localhost --username postgres --port 49159

地理信息系统

  • 使用以下设置添加一个新的 Postgres 连接:

名称:DjangoStreetMap 主机:localhost 端口:49155 数据库:postgres

身份验证:基本 postgres / post1233

发展

代码被涂黑、剥落、分类和mypy'd。

pip install pre-commit

项目详情


下载文件

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

源分布

djangostreetmap-0.2.5.tar.gz (41.2 kB 查看哈希)

已上传 source

内置分布

djangostreetmap-0.2.5-py3-none-any.whl (50.9 kB 查看哈希

已上传 py3