在 Django 中创建 OSM 地图切片服务器
Creating a OSM map tiles server in Django
我按照 switch2osm 中的教程创建了一个 tiles 服务器,但本教程仅适用于 apache 服务器。
我有一个 Django 服务器,想为它创建一个自定义地图。我已经安装了 Mapnik、PostGIS 并将 OSM 数据加载到我的 PostGIS 数据库中。
我创建了一个 python 脚本,它使用 Mapnik 使用以下代码创建了一个简单的地图:
#!/usr/bin/env python
import mapnik
stylesheet = 'database.xml'
image = 'database.png'
m = mapnik.Map(900, 450)
mapnik.load_map(m, stylesheet)
m.zoom_all()
mapnik.render_to_file(m, image)
print "rendered image to '%s'" % image
和 xml 文件:
<Map background-color="steelblue" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
<Style name="My Style">
<Rule>
<PolygonSymbolizer fill="#f2eff9" />
<LineSymbolizer stroke="rgb(50%,50%,50%)" stroke-width="0.1" />
</Rule>
</Style>
<Layer name="countries" status="on" srs="+proj=latlong +datum=WGS84">
<StyleName>My Style</StyleName>
<Datasource>
<Parameter name="type">postgis</Parameter>
<Parameter name="host">localhost</Parameter>
<Parameter name="dbname">db</Parameter>
<Parameter name="user">user</Parameter>
<Parameter name="password"></Parameter>
<Parameter name="table">(SELECT * from planet_osm_line where highway is not null) as foo</Parameter>
<!-- <Parameter name="extent">-180,-90,180,89.99</Parameter> -->
<!-- <Parameter name="extent">-20037508.34,-20037508.34,20037508.34,20037508.34</Parameter> -->
</Datasource>
</Layer>
</Map>
这会生成以下图像(我只加载了这个 OSM 数据,而不是整个星球):
我正在考虑创建一个类似这样的东西来创建一个 Django 视图来提供我的地图图块,但是处理时间太长(3 分钟)。
如何使用 Mapnik 和 Django 创建切片服务器?是否有任何 Django 库可以使这更容易?
我猜你混合了两个完全独立的东西:
Django 服务
这是您的部分,您可以在专用用例上创建各种逻辑、模型、视图等。例如,您编写一个平台来标记地图上有趣的地方,您可以在其中使用 djangos geoapp (fka.geodjango) 来嵌入地理空间魔法等
瓦片地图服务
这就是(独立!)创建可以被任何其他应用程序使用的地图图块(桌面 gis...JS webmap 小部件)。通常人们使用 existing tile-providers 来免费获得地图,而无需任何自己的工作。仅当您需要创建自己的自定义地图样式时,您才需要托管自己的图块渲染堆栈,如 www.switch2osm.org 中所述。无论如何,强烈建议遵循本指南并依靠现有工具(mapnik、postgis 等)来避免很多麻烦。在开始您自己的服务之前,请牢记硬件和服务要求(覆盖范围、可靠性、更新频率……)!
这平铺如何在您的 django 前端代码中链接为 Leaflet/OpenLayers/... 层。仅此而已:)
我按照 switch2osm 中的教程创建了一个 tiles 服务器,但本教程仅适用于 apache 服务器。
我有一个 Django 服务器,想为它创建一个自定义地图。我已经安装了 Mapnik、PostGIS 并将 OSM 数据加载到我的 PostGIS 数据库中。
我创建了一个 python 脚本,它使用 Mapnik 使用以下代码创建了一个简单的地图:
#!/usr/bin/env python
import mapnik
stylesheet = 'database.xml'
image = 'database.png'
m = mapnik.Map(900, 450)
mapnik.load_map(m, stylesheet)
m.zoom_all()
mapnik.render_to_file(m, image)
print "rendered image to '%s'" % image
和 xml 文件:
<Map background-color="steelblue" srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
<Style name="My Style">
<Rule>
<PolygonSymbolizer fill="#f2eff9" />
<LineSymbolizer stroke="rgb(50%,50%,50%)" stroke-width="0.1" />
</Rule>
</Style>
<Layer name="countries" status="on" srs="+proj=latlong +datum=WGS84">
<StyleName>My Style</StyleName>
<Datasource>
<Parameter name="type">postgis</Parameter>
<Parameter name="host">localhost</Parameter>
<Parameter name="dbname">db</Parameter>
<Parameter name="user">user</Parameter>
<Parameter name="password"></Parameter>
<Parameter name="table">(SELECT * from planet_osm_line where highway is not null) as foo</Parameter>
<!-- <Parameter name="extent">-180,-90,180,89.99</Parameter> -->
<!-- <Parameter name="extent">-20037508.34,-20037508.34,20037508.34,20037508.34</Parameter> -->
</Datasource>
</Layer>
</Map>
这会生成以下图像(我只加载了这个 OSM 数据,而不是整个星球):
我正在考虑创建一个类似这样的东西来创建一个 Django 视图来提供我的地图图块,但是处理时间太长(3 分钟)。
如何使用 Mapnik 和 Django 创建切片服务器?是否有任何 Django 库可以使这更容易?
我猜你混合了两个完全独立的东西:
Django 服务
这是您的部分,您可以在专用用例上创建各种逻辑、模型、视图等。例如,您编写一个平台来标记地图上有趣的地方,您可以在其中使用 djangos geoapp (fka.geodjango) 来嵌入地理空间魔法等
瓦片地图服务
这就是(独立!)创建可以被任何其他应用程序使用的地图图块(桌面 gis...JS webmap 小部件)。通常人们使用 existing tile-providers 来免费获得地图,而无需任何自己的工作。仅当您需要创建自己的自定义地图样式时,您才需要托管自己的图块渲染堆栈,如 www.switch2osm.org 中所述。无论如何,强烈建议遵循本指南并依靠现有工具(mapnik、postgis 等)来避免很多麻烦。在开始您自己的服务之前,请牢记硬件和服务要求(覆盖范围、可靠性、更新频率……)!
这平铺如何在您的 django 前端代码中链接为 Leaflet/OpenLayers/... 层。仅此而已:)