以 GeoJSON 和 MVT 切片格式提供 OpenstreetMap 数据
项目描述
DjangoStreetMap
DjangSstreetMap 是一个 Django 应用程序,用于将 OSM 数据加载到 postgis 数据库中,并将 OSM 数据作为 MVT 切片提供。
Openstreetmap 矢量瓷砖
“矢量瓦片是一种用于存储地理空间矢量数据的轻量级数据格式”
有关 MVT(Mapbox Vector Tiles)的介绍,请参阅mapbox 文档 有关 OSM 的介绍,请参阅openstreetmap.org
本项目的目的
这是一个 Django 应用程序
- 将 OSM 数据导入为 Django 模型
- 将 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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | e98eec21f3432b498d2153f0a9ef23e905cbd891e636a9af729738df14ce859b |
|
MD5 | a347ddf8414fdb43db825d55740d9699 |
|
布莱克2-256 | af005774c904b638f4ed7fa12c66d98b9544cced77cdb63abfb8590f2c8cd7b4 |
djangostreetmap -0.2.5-py3-none-any.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5228be05c7dbdd511cb5dfbaeca6d5f6f720a412eb47bc7021c33104f73828b8 |
|
MD5 | 39782bc62e74306bf469067c27e847ab |
|
布莱克2-256 | e87106ad865744b4780ae37d40967df3d5b1c534e068efc879ea2df4d20229d3 |