在OpenLayers中创建复杂的特征/向量

时间:2012-09-11 17:42:36

标签: javascript openlayers

我能找到的最近的帖子是Compound complex feature in OpenLayers。唉,没有人回答。我非常精通JavaScript,但相对较新的OpenLayers及其复杂的API。我之前创建了复杂的控件。但是,这次我想创建一个复杂的Feature / Vector。它的一般想法是该功能有一个显示图标(例如一个引脚)作为主要组件。该组件是交互式的,并响应用户操作(选择,拖动等)。选择后,我希望渲染与该组件逻辑关联的其他矢量(圆形,矩形等)。这些向量也可以监听用户交互。

以前,在Controller的情况下,我能够使用其他控制器的源来理解开发方向并成功进行。它的功能/矢量有点难度,imho。

我首先使用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文档非常有用,因为它只是简单地说明了一般函数标题/简要描述。

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

2 个答案:

答案 0 :(得分:1)

过去我必须解决类似的问题。使用OpenLayers(或任何映射工具)的最佳方法通常是将图层分成要素类,每个要素类代表点,线或多边形的集合。创建所有图层后,您可以创建select control that listens for events on each of these layers并进行相应的响应。

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

答案 1 :(得分:0)

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

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

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