单击即可将要素添加到地图
Add feature to map on single click
我想与地图进行交互,在其中添加我已经知道几何形状的多边形,它基于作为中心(单击位置)的单个坐标,因此使用 单个点击我要添加这个多边形(真的是一个圆)
我似乎无法通过单击来完成此操作。我必须双击才能完成该功能。
我还想在单击保存要素之前在我的鼠标位置上看到多边形。
value = "Circle";
geometryFunction = (coordinates, geometry) => {
var center = coordinates[0];
var radius = 50 * 1852;
/** radius = meters
** center = lonLat
*/
const steps = 128;
const polygonData = [];
for (let i = 0; i < steps; i++) {
polygonData.push(
fromLonLat(getDestination(toLonLat(center), radius, (i * -360) / steps))
);
}
polygonData.push(polygonData[0]);
geometry = new Polygon([polygonData]);
console.log("geom");
return geometry;
};
var draw = new Draw({
source: layer.getSource(),
type: value,
geometryFunction: geometryFunction,
style: new Style({
stroke: new Stroke({
color: '#F5F5F5',
width: 1.5
}),
fill: new Fill({
color: 'rgba(224, 230, 233, 0.1)'
})
})
});
map.addInteraction(draw);
圆形绘制类型需要单击两次,一次用于中心,另一次用于设置半径。只需单击一下,即可使用点绘制类型。然后,您可以在绘制该点后生成一个圆。 Openlayers 还有一个内置方法 https://openlayers.org/en/latest/apidoc/module-ol_geom_Polygon.html#.circular 来生成圆形多边形。
var draw = new Draw({
source: layer.getSource(),
type: 'Point',
style: new Style({
geometry: function(feature){
var geometry = feature.getGeometry();
var radius = 50 * 1852;
var polygon = circular(toLonLat(geometry.getCoordinates()), radius, 128);
return polygon.transform('EPSG:4326', 'EPSG:3857');
},
stroke: new Stroke({
color: '#F5F5F5',
width: 1.5
}),
fill: new Fill({
color: 'rgba(224, 230, 233, 0.1)'
})
})
});
draw.on('drawend', function(event){
var center = event.feature.getGeometry().getCoordinates();
var radius = 50 * 1852;
var polygon = circular(toLonLat(center), radius, 128);
event.feature.setGeometry(polygon.transform('EPSG:4326', 'EPSG:3857'));
}
map.addInteraction(draw);
我想与地图进行交互,在其中添加我已经知道几何形状的多边形,它基于作为中心(单击位置)的单个坐标,因此使用 单个点击我要添加这个多边形(真的是一个圆)
我似乎无法通过单击来完成此操作。我必须双击才能完成该功能。
我还想在单击保存要素之前在我的鼠标位置上看到多边形。
value = "Circle";
geometryFunction = (coordinates, geometry) => {
var center = coordinates[0];
var radius = 50 * 1852;
/** radius = meters
** center = lonLat
*/
const steps = 128;
const polygonData = [];
for (let i = 0; i < steps; i++) {
polygonData.push(
fromLonLat(getDestination(toLonLat(center), radius, (i * -360) / steps))
);
}
polygonData.push(polygonData[0]);
geometry = new Polygon([polygonData]);
console.log("geom");
return geometry;
};
var draw = new Draw({
source: layer.getSource(),
type: value,
geometryFunction: geometryFunction,
style: new Style({
stroke: new Stroke({
color: '#F5F5F5',
width: 1.5
}),
fill: new Fill({
color: 'rgba(224, 230, 233, 0.1)'
})
})
});
map.addInteraction(draw);
圆形绘制类型需要单击两次,一次用于中心,另一次用于设置半径。只需单击一下,即可使用点绘制类型。然后,您可以在绘制该点后生成一个圆。 Openlayers 还有一个内置方法 https://openlayers.org/en/latest/apidoc/module-ol_geom_Polygon.html#.circular 来生成圆形多边形。
var draw = new Draw({
source: layer.getSource(),
type: 'Point',
style: new Style({
geometry: function(feature){
var geometry = feature.getGeometry();
var radius = 50 * 1852;
var polygon = circular(toLonLat(geometry.getCoordinates()), radius, 128);
return polygon.transform('EPSG:4326', 'EPSG:3857');
},
stroke: new Stroke({
color: '#F5F5F5',
width: 1.5
}),
fill: new Fill({
color: 'rgba(224, 230, 233, 0.1)'
})
})
});
draw.on('drawend', function(event){
var center = event.feature.getGeometry().getCoordinates();
var radius = 50 * 1852;
var polygon = circular(toLonLat(center), radius, 128);
event.feature.setGeometry(polygon.transform('EPSG:4326', 'EPSG:3857'));
}
map.addInteraction(draw);