当我调用方法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
答案 0 :(得分:3)
假设您有一个包含矢量源的图层,您只需再向addMarkers
函数添加一个步骤:
myVectorSource.addFeatures(markerFeatures);