我正在用角度的openlayers构建地图,但有一个问题是控件(用鼠标和鼠标双击缩放,放置标记(不起作用,代码在这里,我想放置单个标记并获取标记标记的纬度和经度我试过ngx openlayers,它也解决了我提到的控件问题我想知道是否有一个好的地图api,除了谷歌和openlayers告诉我,还有一个资源,请
如果您在styles.css
中导入OL样式,那么您将解决问题。
style.css
@import '~ol/ol.css';
实现这一点的另一种方法是@Mike在评论中建议的,将OL样式添加到angular.json
中的styles
数组中。
更新
基本上,你需要两件事来实现你想要的:
- 禁用地图的默认
dblclick
缩放交互 - 侦听映射
dblclick
事件
看看我为你做的这个例子,
<!doctype html>
<html lang="en">
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.1.1/css/ol.css" type="text/css">
<style>
.map {
height: 400px;
width: 100%;
}
</style>
<script src="https://cdn.jsdelivr.net/gh/openlayers/openlayers.github.io@master/en/v6.1.1/build/ol.js"></script>
<title>Add Markers</title>
</head>
<body>
<h2>Add Markers</h2>
<div class="map" id="map"></div>
<p id="log"></p>
<script type="text/javascript">
const vectorSource = new ol.source.Vector();
const vectorLayer = new ol.layer.Vector({
source: vectorSource,
style: new ol.style.Style({
image: new ol.style.Circle({
radius: 7,
fill: new ol.style.Fill({color: 'black'}),
stroke: new ol.style.Stroke({
color: 'white', width: 2
})
})
})
})
const map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
}),
vectorLayer
],
view: new ol.View({
center: ol.proj.fromLonLat([-80, 35]),
zoom: 12
}),
interactions: ol.interaction.defaults({ doubleClickZoom: false })
});
map.on('dblclick', function(evt) {
const coord = map.getCoordinateFromPixel(evt.pixel);
vectorSource.addFeature(new ol.Feature({
geometry: new ol.geom.Point(coord)
}));
const coordll = ol.proj.toLonLat(coord);
document.getElementById('log').innerHTML +=
`Coord:${coordll[0].toFixed(2)} ${coordll[1].toFixed(2)}<br>`
console.log(`Coord:${coordll[0].toFixed(2)} ${coordll[1].toFixed(2)}`);
});
</script>
</body>
</html>