我不知道为什么,但可用的资源似乎对每个场景都非常具体,不会对其他人或不同版本的人有所帮助。
我想要做的是: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公里,所以我不太担心它。
请告诉我正确的方向。
发布于 2021-08-30 10:15:13
ol.geom.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')
)
第二种方法将半径缩放到接近于北纬和南纬地面上的真实距离。
https://stackoverflow.com/questions/68974324
复制相似问题