1

我能找到的与我的问题最接近的帖子是OpenLayers 中的 Compound complex feature。唉,没有人回答。我非常精通 JavaScript,但对 OpenLayers 及其复杂的 API 相对较新。在此之前我已经创建了复杂的控件。但是,这一次我希望创建一个复杂的特征/向量。它的总体思路是该功能具有一个显示图标(例如,一个图钉)作为主要组件。该组件是交互式的并响应用户操作(选择、拖动等)。选择后,我希望渲染与该组件逻辑相关的其他向量(圆形、矩形等)。这些 Vectors 也会监听用户交互。

以前,在 Controller 的情况下,我能够使用其他控制器的源来了解开发方向并成功进行。恕我直言,使用特征/向量有点困难。

我首先使用OpenLayers.Feature.Vector.CustomClass = OpenLayers.Class( OpenLayers.Feature.Vector, {...});代码扩展 OpenLayers.Feature.Vector。构造函数将特定参数用于我的特征,创建几个几何对象(点、多边形、线),将它们添加到 OpenLayers.Geometry.Collection,并调用 OpenLayers.Feature.Vector 构造函数并将集合传递给它。

不幸的是,我意识到为了显示一个图标,我不能只使用 Geometry.Point 而是需要为它创建一个 Vector。那种让我失望的原因是我将在我的自定义 Vector 对象中创建 Vectors。一般来说,这并没有什么不寻常的,但我想知道这是否是 OpenLayers 中的工作方式。就像我提到的那样,我发现 API 文档不是很有用,因为它只是说明了一般函数头/简要说明。

如果有人能指出我正确的方向,我将不胜感激(除了基本的“使用自定义图像创建标记”类型之外,还没有在网上找到很多教程)。如果描述不清楚,请告诉我,我会尽力提供更多信息。

4

2 回答 2

1

过去我不得不解决类似的问题。使用 OpenLayers(或与此相关的任何映射工具)的最佳方法通常是将图层分成要素类,每个要素类代表点、线或多边形的集合。创建所有层后,您可以创建一个选择控件,用于侦听每个层上的事件并做出适当的响应。

如果您需要在逻辑上将这些特征的子集关联在一起,您可以在外部或在父特征的attributes对象中存储对这些特征的引用。

于 2013-01-07T16:40:44.147 回答
0

我的解决方案是提供 FeatureCollection geojson 作为复杂/复合类型数据。在我的例子中,FeatureCollection 由许多 Point 特征和一个 LineString 特征组成。Openlayers 可以使用这个 geojson:

var features = (new ol.format.GeoJSON()).readFeatures(geojson)

...并提供功能集合。然后,您可以遍历这些特征并为每个特征提供一些统一的属性/对象。然后,当您定义事件处理程序(悬停或选择/单击)时,访问统一属性以获取任何其他相关功能。

于 2018-04-11T14:14:52.200 回答