Openlayers 4 矢量图

Posted

技术标签:

【中文标题】Openlayers 4 矢量图【英文标题】:Openlayers 4 vector map 【发布时间】:2018-06-01 15:29:54 【问题描述】:

我正在创建一个仪表板站点,我正在使用矢量图层来选择一个病房(在这个原型中,我使用的是 ESSEX UK,里面有所有病房,见图)

这是我正在使用的代码。

http://openlayers.org/en/latest/examples/select-features.html?q=selec

问题是,当我从地图文件创建 geojson 文件时(地图文件中唯一的字段是病房名称和代码,没有太多信息),这块的大小开始有点大地图并且加载地图非常慢,一旦我尝试加载更大的文件(几乎 6mb)并且 Openlayers 无法加载它,现在我需要创建另一个原型,但针对整个英国(仅区域,没有病房)。

从 OL4 到矢量支持哪些格式?我可以用另一种不是 GeoJson 的格式来实现这样的事情吗?

我需要能够单击并至少取回我单击的位置的名称,并使用它来启动需要该名称才能工作的其他功能。

【问题讨论】:

您可以尝试使用矢量图块。 mapbox.com/vector-tiles 我无法使用外部服务,我们有自己的专用服务器和地图服务器 如果您可以生成自己的矢量图块,则不必使用外部服务。我不熟悉地图服务器,但您可以查看这些链接。 mapserver.org/development/rfc/ms-rfc-119.htmlmedium.com/tantotanto/… 【参考方案1】:

有很多方法可以解决客户端渲染矢量数据的性能问题。

首先,你不能用 openlayers 渲染 6mb 的矢量数据有点奇怪。根据我的经验(主要是使用 OpenLayers 2),6mb 并不算多。但是,它在很大程度上取决于客户端的能力。 加载有什么问题?超时?冻结?无响应平移/缩放?

您可以使用 WMS 或图块呈现数据服务器端。例如,您可以使用地图服务器或地理服务器。然后,要选择对象,您可以使用 GetFeatureInfo 请求。

否则,按照 pavankguduru 的建议,您可以尝试使用矢量图块格式。

可能您的矢量数据对于您的目的来说过于“详细”。您可以简化它们以减少每个几何图形的点数。请参阅 GRASS 的 v.generalize 工具。

在用户放大之前,您还可以使用数据(区域)的聚合版本。

恕我直言,如果您的应用程序需要在旧的浏览器/PC 上运行,那么您需要渲染服务器端。

【讨论】:

可能是太详细了,我从地图上删除了所有信息,只留下了病房名称和区域代码,我从 12 Mb 减少到 6,但仍然需要大约 5 秒来绘制地图。我不能使用外部服务,因为我们有带地图服务器的专用服务器。我会看看我是否可以简化几何:)

以上是关于Openlayers 4 矢量图的主要内容,如果未能解决你的问题,请参考以下文章

Openlayers 4 矢量图

d3.js,openlayer,Leaflet或其他,哪些适合Web GIS的开发?

openlayer 的用法

OpenLayers加载天地图

OpenLayer3入门——[一]

OpenLayers 4获得西南坐标