Python 在Django中创建OSM地图平铺服务器

Python 在Django中创建OSM地图平铺服务器,python,django,openstreetmap,mapnik,Python,Django,Openstreetmap,Mapnik,我按照中的教程创建了tiles服务器,但本教程仅适用于apache服务器 我有一个Django服务器,想为它创建一个自定义映射。我已经安装了Mapnik、PostGIS,并将OSM数据加载到我的PostGIS数据库中 我创建了一个python脚本,该脚本使用Mapnik创建了一个简单的映射,代码如下: #!/usr/bin/env python import mapnik stylesheet = 'database.xml' image = 'database.png' m = mapnik

我按照中的教程创建了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服务 这是您的部分,您可以在专用用例上创建各种逻辑、模型、视图等。例如,您可以编写一个平台来在地图上标记感兴趣的地方,在那里可以使用fka。geodjango嵌入了地理空间魔法等

平铺地图服务 这是什么独立!创建可由任何其他应用程序桌面gis使用的地图分幅。。。JSWebMap小部件。通常人们不用自己的工作就可以免费获得地图。只有当您需要创建自己的自定义贴图样式时,才需要承载自己的平铺渲染堆栈,如www.switch2osm.org所述。无论如何,强烈建议遵循本指南并依赖现有工具mapnik、postgis。。。避免很多麻烦。请记住硬件和服务要求,包括覆盖范围、可靠性、更新频率等。。。在您开始自己的服务之前


这是如何链接到django前端代码的传单/OpenLayers/。。。层没什么了:

你需要django生成瓷砖=>从芹菜中运行mapnik,还是只需要django来提供文件=>将它们放入django的媒体目录并完成它?我只需要django来提供瓷砖,但我认为这些瓷砖是动态生成的,这样它们就不会占用那么多的磁盘空间。磁贴是在磁贴服务器上动态生成的,但存在两个瓶颈:磁贴生成时间和磁盘空间。通过修剪使用较少的磁贴来节省磁盘空间,并通过缓存处理生成时间。这也是为什么在异步触发瓷砖生成时,您可能会在地球上不常访问的位置获得空瓷砖的原因。当然,这取决于实现。但是是否有Django应用程序/库可以帮助生成/缓存/服务这些互动程序?如果没有,最好的方法是什么?或者,让Django服务器和apache服务器同时为这些磁贴提供服务的唯一简单方法是什么?我可以向现有的磁贴提供程序添加额外数据吗?例如,如果我的PostGIS数据库中有人行道状况信息,我是否可以在显示包含这些信息的更完整地图时使用这些瓷砖提供程序,比如用不同的颜色为某些人行道着色?当然!您只需通过WMS或vector(例如geoJSON)向JS小部件添加一个新层(可能是光栅层)。如果您愿意,此源代码可以是您的Django服务,只需几行代码即可查看。我已经在使用Django REST framework GIS来提供JSON信息。在地图中的新层中使用GeoFeatureModelSerializer比使用GeoModelSerializer更容易吗?您知道在使用Android的OSMdroid或其他库来在Android中使用OSM贴图块时添加新层是否容易吗?谢谢你的帮助!完全取决于你的需要。在大多数情况下,ModelSerializer可以按1:1的比例发布模型,包括引用等。但是如果您想调整模型的API表示形式,可以切换到其他更手动的序列化器。我没有OSMdroid的任何经验,但您似乎需要添加覆盖功能等。。。请单独提问,因为这与原始主题无关