Openlayers 6 OpenLayers 6中的线串是测地线吗?

Openlayers 6 OpenLayers 6中的线串是测地线吗?,openlayers-6,Openlayers 6,我正在画一些400公里长的线(线串)。中间点似乎并不是它应该在的地方,但它很近(比如说3公里外)。看起来线串不是以测地线绘制的。在文档中找不到任何说明。所以问题是:线串是测地线绘制的吗?如果不是,我如何使它这样做?如相关问题所示: 在@Mike的注释中引用,您可以使用使用arcGenerator计算的几何体(从)设置绘制线的样式,使其为测地线: //来自https://stackoverflow.com/questions/56285745/draw-great-circle-line-o

我正在画一些400公里长的线(线串)。中间点似乎并不是它应该在的地方,但它很近(比如说3公里外)。看起来线串不是以测地线绘制的。在文档中找不到任何说明。所以问题是:线串是测地线绘制的吗?如果不是,我如何使它这样做?

如相关问题所示: 在@Mike的注释中引用,您可以使用使用arcGenerator计算的几何体(从)设置绘制线的样式,使其为测地线:

//来自https://stackoverflow.com/questions/56285745/draw-great-circle-line-on-the-map-directly-in-openlayers-5
var styleSimple2ptLine=新的ol.style.style({
几何:功能(特征){
var projection=map.getView().getProjection();
var coordinates=feature.getGeometry().clone().transform(投影,'EPSG:4326').getCoordinates();
var from=坐标[0];
var to=坐标[1];
var电弧发生器=新电弧大循环({
x:从[0],
y:从[1]
}, {
x:到[0],
y:到[1]
});
无功电弧线=电弧发生器电弧(100{
抵销:10
});
var-coords=[];
弧线.几何.forEach(函数(geom){
坐标推送(几何坐标);
});
var线=新的ol.geom.Multilinering(坐标);
线变换('EPSG:4326',投影);
回流线;
},
笔划:新的ol风格笔划({
宽度:2,
颜色:“蓝色”
})
});
var coordsSimple=[Lonlat的其他项目([121.749407483048463,31.3038498266498]),
Lonlat的其他项目([139.793414,35.599839])
];
const lineStr=新的ol.特征({
几何图形:新ol.geom.LineString(coordsSimple)
});
const vectorSource=新ol.source.Vector({
特征:[lineStr]
});
const vectorLayer=新ol.layer.Vector({
来源:矢量源,
样式:styleSimple2ptLine
});
var raster=新建ol.layer.Tile({
来源:new ol.source.OSM()
});
var map=新ol.map({
图层:[光栅、矢量图层],
目标:“地图”,
视图:新ol.view({
中间:[0,0],
缩放:2
})
});
map.getView().fit(vectorSource.getExtent(){
填充:[50,50,50,50]
});
html,
身体{
身高:100%;
宽度:100%;
填充:0px;
边际:0px;
}
.地图{
身高:100%;
宽度:100%;
}

如相关问题所示: 在@Mike的注释中引用,您可以使用使用arcGenerator计算的几何体(从)设置绘制线的样式,使其为测地线:

//来自https://stackoverflow.com/questions/56285745/draw-great-circle-line-on-the-map-directly-in-openlayers-5
var styleSimple2ptLine=新的ol.style.style({
几何:功能(特征){
var projection=map.getView().getProjection();
var coordinates=feature.getGeometry().clone().transform(投影,'EPSG:4326').getCoordinates();
var from=坐标[0];
var to=坐标[1];
var电弧发生器=新电弧大循环({
x:从[0],
y:从[1]
}, {
x:到[0],
y:到[1]
});
无功电弧线=电弧发生器电弧(100{
抵销:10
});
var-coords=[];
弧线.几何.forEach(函数(geom){
坐标推送(几何坐标);
});
var线=新的ol.geom.Multilinering(坐标);
线变换('EPSG:4326',投影);
回流线;
},
笔划:新的ol风格笔划({
宽度:2,
颜色:“蓝色”
})
});
var coordsSimple=[Lonlat的其他项目([121.749407483048463,31.3038498266498]),
Lonlat的其他项目([139.793414,35.599839])
];
const lineStr=新的ol.特征({
几何图形:新ol.geom.LineString(coordsSimple)
});
const vectorSource=新ol.source.Vector({
特征:[lineStr]
});
const vectorLayer=新ol.layer.Vector({
来源:矢量源,
样式:styleSimple2ptLine
});
var raster=新建ol.layer.Tile({
来源:new ol.source.OSM()
});
var map=新ol.map({
图层:[光栅、矢量图层],
目标:“地图”,
视图:新ol.view({
中间:[0,0],
缩放:2
})
});
map.getView().fit(vectorSource.getExtent(){
填充:[50,50,50,50]
});
html,
身体{
身高:100%;
宽度:100%;
填充:0px;
边际:0px;
}
.地图{
身高:100%;
宽度:100%;
}


No,如果您想要测地线,您需要一个实用程序,如if图形中使用的arcGenerator。您可以使用arcGenerator No计算的几何图形来设置绘制线的样式,如果需要测地线,则需要一个实用程序(如if图形中使用的arcGenerator),可以使用arcGenerator计算的几何图形设置绘制线的样式
new ol.style.Style({
  geometry: function(feature) {
    var projection = map.getView().getProjection();
    var coordinates = feature.getGeometry().clone().transform(projection, 'EPSG:4326').getCoordinates();
    var from = coordinates[0];
    var to = coordinates[1];
    var arcGenerator = new arc.GreatCircle({
      x: from[0],
      y: from[1]
    }, {
      x: to[0],
      y: to[1]
    });
    var arcLine = arcGenerator.Arc(100, {
      offset: 10
    });
    var coords = [];
    arcLine.geometries.forEach(function(geom) {
      coords.push(geom.coords);
    });
    var line = new ol.geom.MultiLineString(coords);
    line.transform('EPSG:4326', projection);
    return line;
  },
  stroke: new ol.style.Stroke({
    width: 2,
    color: 'blue'
  })
});