首页 文章

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

提问于
浏览
1

我能找到的最接近我的问题的帖子是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 回答

  • 1

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

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

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

  • 0

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

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

相关问题