我按照switch2osm的教程創建了切片服務器,但本教程僅適用於Apache服務器。在Django中創建OSM地圖切片服務器
我有一個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一起創建tile服務器?有沒有任何Django庫使這更容易?
您是否需要django來生成tile(=從celery運行mapnik)或者您只需要django來爲文件提供服務(=>將它們放到django的媒體目錄中並完成它)? – dhke
我只需要Django來提供拼貼,但我認爲這些拼貼是動態生成的,所以它們不會佔用太多的磁盤空間。 –
瓷磚在瓦片服務器上動態生成,但存在兩個瓶頸:瓦片生成時間和磁盤空間。通過修剪較少使用的磁貼來節省磁盤空間,並通過緩存處理生成時間。這也是爲什麼你可能在地球上不常被訪問的地方得到空瓷磚,這是因爲瓷磚生成是異步觸發的。當然取決於實施。 – dhke