1

我有一个不寻常的挑战,我正在努力应对。我希望有人遇到过这个问题,并可以指出我的解决方案。

概述:

我正在寻找一种方法来使用具有动态过滤结果的 mapnik + shapefile,而无需 PostgreSQL 或手动更改 dbf 文件。

细节:

我需要在地图上绘制由邮政编码组成的区域。我当前的解决方案从 MySQL 数据库中提取多边形,并在运行时将它们绘制在谷歌地图上。这显然非常缓慢。我更愿意将其移至与 mapnik 兼容的解决方案,这样我就可以即时渲染图块并让地图更快地响应。

现在,在你说只使用 Postgres 而不是 shapefile 之前,让我说这个服务器上没有也不能有 Postgres。这很糟糕,但这是一个硬限制。动态数据源是mapnik不支持的MySQL。

当然,我可以离线手动渲染这些区域(我碰巧使用了 TileMill)。为此,我必须在 OpenOffice 中操作 shapefile 的 dbf 文件,方法是添加一个简单的列来标记 ZIP 是否在一个区域内以及它属于谁。然后在我的 CartoCSS 中,只需查找 [INCLUDE="Y"] { ... } 即可绘制或隐藏多边形,并根据领土所有者的 ID 进行简单的颜色分配。没有问题,除了这是非常耗时和劳动密集型的事实。

真正的问题是客户有近百个不时变化的区域。更糟糕的是,当它们发生变化时,连锁反应会导致相邻地区发生变化的连锁反应。更糟糕的是,他们不希望领地所有者看到彼此的领地,这意味着每个领地都必须单独过滤和绘制。

因此,我正在寻找一种自动化的混合解决方案来处理 shapefile 的过滤,这样我就不必在每次地区发生变化时都手动重做。

我的头发在这个上变白了。只要解决方案不依赖于 PostgreSQL 或手动操作 shapefile 的 dbf 数据库,我就可以选择。

非常感谢任何帮助和建议。

谢谢,史蒂夫

TLDR:我需要使用具有动态过滤结果的 mapnik + shapefiles,而不需要 PostgreSQL 或手动更改 dbf 文件

4

1 回答 1

0

您可以通过使用独特的颜色渲染区域,然后在提供图像时操纵渲染图像的调色板来做到这一点。如果在 C 中完成,在服务器上执行此操作很便宜,或者您可以尝试在 javascript 中执行此操作(我未知的性能可能使用 javascript 更改图像调色板?)。

这里有一个描述:http: //blog.webfoot.com/2013/03/12/optimizing-map-tile-generation/

如果您只渲染边界,那么这将不起作用。

如果您还没有,您可以使用编码的折线 ( https://developers.google.com/maps/documentation/utilities/polylinealgorithm )在浏览器中为现有系统加速多边形渲染。这是一个巨大的性能提升,也减少了电汇尺寸。

于 2013-11-04T07:36:37.380 回答