如何在OpenLayers 3上添加标记给出坐标

时间:2015-08-19 18:05:48

标签: openlayers-3

当我调用方法addMarker(long,lat)时,我需要在地图上添加一个标记。 我在OpenLayers示例列表中找到的唯一示例是this,但它只在特定位置添加了一个标记。

我需要能够随时调用我的方法并传递坐标(一般的想法是有一个简单的菜单,用户可以在其中键入long和lat,然后单击一个提交按钮,标记就会在图)。

在示例中,如果我做对了,他们创建了一个功能及其样式,然后创建了一个图层来绘制图标并使用该图层初始化地图。

__device__ int2 getProjection(const float3 &xLocal, const float FX, const float FY, const float CX, const float CY){
    //Might be the case that it is unnecessary to send in FX.
    float x = fx*xLocal.x / xLocal.z + cx;
    float y = fy *xLocal.y / xLocal.z + cy;
    int2 tmp = { round(x), round(y) };
    return tmp;
}

我相信我可以创建一系列功能,就像那样(我看到here的例子):

var iconFeature = new ol.Feature({
  geometry: new ol.geom.Point(ol.proj.transform([-72.0704, 46.678], 'EPSG:4326', 'EPSG:3857')),
  name: 'Null Island',
  population: 4000,
  rainfall: 500
});

var iconStyle = new ol.style.Style({
  image: new ol.style.Icon(/** @type {olx.style.IconOptions} */ ({
    anchor: [0.5, 46],
    anchorXUnits: 'fraction',
    anchorYUnits: 'pixels',
    opacity: 0.75,
    src: 'data/icon.png'
  }))
});

iconFeature.setStyle(iconStyle);

var vectorSource = new ol.source.Vector({
  features: [iconFeature]
});

var vectorLayer = new ol.layer.Vector({
  source: vectorSource
});

var map = new ol.Map({
  layers: [new ol.layer.Tile({ source: new ol.source.OSM() }), vectorLayer],
  target: document.getElementById('map'),
  view: new ol.View2D({
    center: [0, 0],
    zoom: 3
  })
});

到目前为止,这是我的方法:

var iconFeatures=[];

var iconFeature = new ol.Feature({
  geometry: new ol.geom.Point(ol.proj.transform([-72.0704, 46.678], 'EPSG:4326',     
  'EPSG:3857')),
  name: 'Null Island',
  population: 4000,
  rainfall: 500
});

var iconFeature1 = new ol.Feature({
  geometry: new ol.geom.Point(ol.proj.transform([-73.1234, 45.678], 'EPSG:4326',     
  'EPSG:3857')),
  name: 'Null Island Two',
  population: 4001,
  rainfall: 501
});

iconFeatures.push(iconFeature);
iconFeatures.push(iconFeature1);

但是当我这样做时没有发生任何事情。

Obs:我创建了地图,图层并调用了方法。 我使用的是OL v3.7

1 个答案:

答案 0 :(得分:3)

假设您有一个包含矢量源的图层,您只需再向addMarkers函数添加一个步骤:

myVectorSource.addFeatures(markerFeatures);