从矢量数据生成地理图块
Posted
技术标签:
【中文标题】从矢量数据生成地理图块【英文标题】:generate geo tiles from vector data 【发布时间】:2013-03-12 17:36:10 【问题描述】:我正面临这个问题:我的数据库中有一些矢量数据(折线...),它们描述了许多世界/国家/地区/城市边界。
我想在这些地区制作交互式地图。
当我在浏览器中渲染这些数据(数据以 geojson 发送)时,速度很慢(我并不感到惊讶)。
下一个原因是生成一些光栅图块来表示不同缩放级别的区域,并有一种方法可以在单击区域和选定区域之间建立关系(以显示更多信息)。
我是地理图块的新手:
从矢量数据生成 png/jpg 切片的最佳工具是什么? 如何在点击的区域和数据库中的“id”之间建立关系?我知道我的问题很大,但是如果您有一些建议...
谢谢!
【问题讨论】:
你的数据库是什么?比如 mongo 支持 2d geospatial indexing. 另外,+1 表示使用 data 作为复数形式。 -1 虽然同时提出两个问题。 我正在使用 Mongodb,但地理索引并不是我的问题,我的问题是快速提供不同缩放级别的交互式地图。并且使用矢量数据并在客户端渲染它太慢了......这就是为什么我正在考虑生成静态/栅格图块以使其成为可能。 (抱歉同时问了两个问题) 你是怎么渲染的? Leaflet.js 带有 geojson 图层渲染器,它很慢 :( 【参考方案1】:我最近写了一篇关于如何提高光栅图块渲染速度的博文: http://blog.webfoot.com/2013/03/12/optimizing-map-tile-generation/
至于将点击连接到司法管辖区 ID,我认为没有捷径:您需要将点击转换为 lat/lng(或 Vast Coordinate System,正如我在博文中描述的那样),然后执行多边形点检查。如果你使用 PostGIS,那么你可以做一个 ST_Intersects。
注意:如果您使用的是 mysql,则交叉点由 边界框 完成,而不是多边形。它仍然是可能的:你只需要从某个地方获取一个多边形中的点函数来检查哪个多边形,如果一个边界框检查让你不止一个。
以下是您可以单击的点的示例: http://maps.webfoot.com/demos/CanadianStimulus/CanadianStimulus.html
请注意,由于人们在点击时并不精确(尤其是对于小点),我实际上在这些点周围制作了几个像素“活”以及单像素点。您也可以点击远离点,然后它将显示多边形(在本例中为联邦选举区)。
【讨论】:
Thanx Kailtlin,不幸的是,我已经从带有地理模块的 mysql 迁移到 mongo,因为我不需要空间计算(只需访问地理数据,mondo 做得很好)。但我将使用经典的交叉方法。我会仔细阅读你的帖子。谢谢! 从 mysql 点/折线等生成切片的软件堆栈是什么?我不知道使用哪个库从空间数据(opengis 格式/geojson 或其他)生成 png 文件 我自己滚动。我使用带有 php 的 gd 库 (boutell.com/gd) 绘制多边形,但实际上任何图形库和语言都可以。 呃,我应该注意到困难的部分是将数据加载到我的数据库中。我有一张用于管辖区域的表格,一张用于多边形的表格,一张用于点的表格。为了做到这一点,我不得不修改 shp2mysql。这意味着很容易进行查询以获取特定管辖范围内所有多边形的所有点,按多边形排序 => 易于绘制多边形。【参考方案2】:Geoserver 有一个 MongoDB Plugin datasource,它是一个功能齐全的 WebGIS 服务器。您可以使用它为您的数据构建地图渲染服务(实际上是 WMS)。然后使用Geowebcache 生成地图图块。
通过这种方式,您可以使用功能齐全的 WebGIS 堆栈,该堆栈允许您管理其他数据源,并在部分数据更新时轻松重新创建切片子集。
还通过 Geoservers WFS 实现提供地图上的查询功能(将地图位置与数据库中元素的关系)。
【讨论】:
以上是关于从矢量数据生成地理图块的主要内容,如果未能解决你的问题,请参考以下文章