OpenLayers 4在地图上画圆.圆半径在米和地图使用纬度和经度

  • 本文关键字:地图 纬度 经度 OpenLayers openlayers
  • 更新时间 :
  • 英文 :


我不知道为什么,但可用的资源似乎是非常具体的每个场景,不会帮助别人或不同的版本。

我想做的是:https://openlayers.org/en/latest/examples/custom-circle-render.html。但这个例子似乎并不奏效。更进一步,我想画一个圆,其中点以度(EPSG:4326)指定,半径以米为单位。我的地图投影也是EPSG:4326。我最终尝试简化为以下内容:

var vectorSource = new ol.source.Vector();
var map = new ol.Map({
target: document.getElementById('map'),
view: new ol.View({
projection: 'EPSG:4326',
center: [0, 0],
zoom: 5
}),
layers: [
new ol.layer.Tile({
projection: 'EPSG:4326',
source: new ol.source.OSM()
}),
new ol.layer.Vector({
projection: 'EPSG:4326',
source: vectorSource,
}),
],
});
function MapAddRadius() {
var circle = new ol.geom.Circle(
ol.proj.transform([0, 0], 'EPSG:4326', 'EPSG:3857'),
10
);
var circleFeature = new ol.Feature(circle);
vectorSource.addFeature(circleFeature);
}

这确实画了一个圆,但它的大小不正确。这让我相信我使用了错误的投影,因为尺寸确实与度相关,而不是米。或者有一些我不知道的函数可以让这更简单。我知道精度可能是一个问题,但我画的是小圆圈,比如小于1公里,所以我不太担心。

请指给我正确的方向。

ol.geom.Circle要求坐标和半径单位相同,且所有几何形状必须在视图投影中。示例中使用的自定义渲染器是特定于Circle几何形状的,由于早期版本的遗漏,它只适用于OpenLayers 6。如果你必须在EPSG:4326视图中有一个圆形几何形状,半径以米为单位,请尝试

var circle = new ol.geom.Circle(
ol.proj.transform([lon, lat], 'EPSG:4326', 'EPSG:3857'),
radius
).transform('EPSG:3857', 'EPSG:4326');

var circle = new ol.geom.Circle(
[lon, lat],
radius / ol.proj.getPointResolution('EPSG:4326', 1, [lon, lat], 'm')
)

第二种方法将半径缩放到接近南北纬度地面上的真实距离。

最新更新