У вас есть несоответствие между SRS векторного слоя (EPSG:4326
), центром и кругом (EPSG:3857
). Вам нужно одно из вышеперечисленного, а не оба.
Попробуйте создать слой без указания projection
, он будет использовать проекцию вида по умолчанию, в данном случае EPSG:3857
(из-за OSM).
ОБНОВЛЕНИЕ:
После построения фрагмента ниже, я понимаю, что предлагаемое изменение не влияет на результат, не знаю, почему именно сейчас, поэтому я предложил использовать Polygon.circular
в качестве альтернативы.
<!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>Circle features</title>
</head>
<body>
<div id="map" class="map"></div>
<script type="text/javascript">
// features
var radius = 1600;
var center = [-1.733014, 51.982989]
var fcircle = new ol.Feature({
geometry: new ol.geom.Circle(
ol.proj.fromLonLat(center),
radius
)
});
fcircle.setStyle(new ol.style.Style({
stroke: new ol.style.Stroke({
color: 'blue',
width: 2
})
}));
var fcircular = new ol.Feature({
geometry: ol.geom.Polygon.circular(center, radius, 64).transform('EPSG:4326', 'EPSG:3857')
});
fcircular.setStyle(new ol.style.Style({
stroke: new ol.style.Stroke({
color: 'red',
width: 1
})
}));
// map
var view = new ol.View({
center: ol.proj.fromLonLat(center),
zoom: 14
});
var map = new ol.Map({
target: 'map',
layers: [
new ol.layer.Tile({
source: new ol.source.OSM()
}),
new ol.layer.Vector({
source: new ol.source.Vector({
features: [fcircle, fcircular]
})
})
],
view
});
</script>
</body>
</html>