问题标签 [openlayers-6]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
221 浏览

openlayers - OpenLayers 6:示例框选择错误

完全按照以下 openlayers 站点的示例:

https://openlayers.org/en/latest/examples/box-selection.html?q=feature

在本地我有以下错误:

我相信错误来自尝试在本地加载 geojson 文件。

country.geojson: https://r68tk.csb.app/data/geojson/countries.geojson

在此处输入图像描述

怎么解决?

0 投票
1 回答
853 浏览

javascript - OpenLayers 6 + Angular 8:LineString(s) 未显示在矢量图层上(JS 没有错误)

我遇到了一个问题,我的 LineString(s) 没有显示在地图上,并且控制台没有给出任何错误。

我相信我的代码是正确的,但在 OpenLayers 方面我并不那么聪明,我可能是错的。

这就是我将矢量图层添加到地图的方式

这就是我添加新 LineString 的方法

如果我尝试使用source.GetFeatures()它会正确显示我的所有功能,但我在地图上看不到它们。

我错过了什么吗?

PS 每个变量都被正确分配,没有什么奇怪的,也没有未定义的错误...

0 投票
1 回答
171 浏览

javascript - 在 OpenLayers 6 的飞行动画示例中添加箭头或叠加动画

我想在 OpenLayers 6的航班动画示例中添加移动箭头或叠加动画。

我尝试使用 JavaScript setInterval() 进行叠加移动动画,但到目前为止,我只成功地为单个 LineString 设置了动画,这也是在线条完成绘制之后。我想在绘制线条时添加移动动画,有点像追踪 LineString 的路径。

有人可以帮我吗?

以下是我尝试添加移动动画的代码片段:

这是我的应用程序现在外观的快照的链接

0 投票
1 回答
2521 浏览

javascript - 如何从openlayers 6中地图的postcompose事件获取画布

我们正在使用 openlayers,在 5.3 版本中我们使用了这种结构:

但是在 openLayers 6.0 中,事件的参数上下文是未定义的(这当然破坏了我们的应用程序)。

我在这里读到:

图层不再由单个 Canvas 元素组成。相反,它们作为单独的元素添加到地图视口中。

那么如何获得单层的画布呢?

我还在这里读到:

画布上下文。当事件由地图分派时不可用。仅在使用 Canvas 渲染器时可用,否则为 null。

是否可以将画布渲染器设置为所有图层,以便 CanvasRenderingContext2D 不会为“postcompose”事件未定义?

0 投票
1 回答
2115 浏览

angular - Angular8 和 OpenLayers 6:错误类型错误:无法读取未定义的属性“forEachFeatureAtPixel”

每当我单击某个功能时,我都会尝试打开弹出窗口。我已经设法在地图上获得 onclick 事件,但是当我尝试点击该功能时,我得到了以下内容。我会给予任何帮助,谢谢。

app.component.html

app.component.ts

这是我单击地图时遇到的错误;

正如我在标题中提到的,我正在使用 Angular 8 和 Openlayers 6.1.1。由于项目规则,我无法更改它们,但我被困在这里。我尝试了许多不同的解决方案,但我总是遇到同样的问题。

0 投票
1 回答
485 浏览

gis - 如何缓存样式但仍设置单个文本?

我迷失了以下情况。

我在 Android 应用程序中使用 OpenLayers 6。我有大约 4000 个 geoJson 功能要显示。它只是一个具有 4000 个特征的矢量图层。

对于其中的 3000 个,我必须设置一个单独的文本(它们都在属性中具有唯一的 ID)

当我为每个功能创建样式而不缓存它们时,我的应用程序会崩溃,因为内存使用量增加到超过 2GB。当我创建样式并按功能 ID 缓存它们时,我仍然需要创建 3000 个样式,并且我的应用程序也确实崩溃了。

现在,当我按颜色缓存样式时,我得到 2 个样式。该应用程序运行良好,但现在我无法设置单个文本,因为文本位于样式对象中,而我只有 2 个。

如果每个功能都有一个单独的样式(不通过 ID 缓存或缓存),这将是我的解决方案。

有没有设置没有样式对象的文本的解决方案?

编辑:

一开始我只设置颜色,没有文字:

这就是我改变风格和添加文本的方式:

0 投票
0 回答
225 浏览

rotation - 如何在 OpenLayers 6 上添加旋转和缩放监听器?

我试图处理旋转和缩放交互。是否可以为创建的所有交互创建一个侦听器DragRotateAndZoom

https://openlayers.org/en/latest/apidoc/module-ol_interaction_DragRotateAndZoom-DragRotateAndZoom.html

有没有办法使用类似的东西

或者

找到了旧版本(7 岁!)的解决方案-> Javascript OpenLayers before zoom event listener

0 投票
0 回答
302 浏览

javascript - Openlayers V6 背景填充文本仅适用于最后一个文本元素

几周前,我们用最新的 openlayers 版本 (6.1.1) 更新了我们的软件。之前的版本是 5.3.0,我们没有遇到这个问题。

我们有一个矢量图层,对于每个特征,我们在地图上绘制名称。我们对这些文本应用样式,并添加背景,因此文本始终是可读的。

不知何故,在最新版本(6.1)的 openlayers 中,backgroundFill 仅应用于最后一个文本元素。

如果我随机选择每个功能不同的 fontColor,这将正确应用于每个功能。

backgroundFill 属性的功能是否改变了?或者是否有另一种方法可以使用最新版本的 Openlayers 应用 backgroundFill,以便将其应用于所有元素?

0 投票
1 回答
1008 浏览

openlayers - 如何在 openlayers 中放置图表

我正在寻找一种将饼图(基于某些字段)放置在我的多边形中心的地图内的方法。有什么方法可以在 sld 样式(wms)或 ol.style.Style(wfs)上创建图表?或者也许完全是另一种解决方案?

饼图没有任何力量,任何图表都可以解决这个问题。此外,我可以从多边形质心创建一个点图层,因此点上的图表也可以解决我的问题。

目前,我正在使用 ol 6.1.1,并且不能将其降级低于 6(我正在使用新的比例尺)。

我检查了 StackOverflow 是否有类似问题,但它们太旧了(ol 2/3)。另外,我检查了 ol-ext 但找不到有关此功能/扩展的任何文档。

如果您给我任何建议或解决方案,我将不胜感激。谢谢

0 投票
1 回答
665 浏览

typescript - OpenLayers 6:强制选择多边形

我已经使用 Select 交互和 Draw 交互实现了 OpenLayers 6,我在它们之间切换。

我们可以假设用户只绘制多边形(三点或更多的几何图形)。

我希望绘制的多边形在完成后被选中。

因此,我在 Draw 交互上监听“drawend”,将绘制交互设置为非活动,将选择交互设置为活动,但是我需要将选定的特征设置为仅绘制的特征。

到目前为止,我所拥有的只是我想出的这个笨重的 hack:

不幸的是,这并不总是有效。我在我的 Select 交互中监听“点击”,它在强行触发点击后触发。但是,有时,该事件具有 Point、LineString 和 Polygon 的多个几何形状。很多时候,它甚至在selected数组中都没有 Polygon 几何图形。其他时候,它在数组中有一个附近的 Polygon 几何体selected,而不是我们上次绘制的那个。

是否有强制触发选择特定特征的 OpenLayers 原生方法?

另外,这是我的_getCenterOfExtent方法:

更新 对窗口对象使用我的点击事件的屏幕坐标似乎比在地图上尝试客户端坐标更准确。此外,我发现以编程方式切换multiSelect Interaction 并没有实际工作,至少不是我尝试的方式。我切换到始终使用单选,这应该可以满足我们的需求。