我正在使用最新版本的OpenLayers(6.3.1(和angular。
我的目标是从数组的坐标中绘制一条线
例:
let coordinates = [
[20.4511, 48.9109],
[20.4512, 48.9110],
[20.4514, 48.9110],
[20.4515, 48.9111]
];
我在项目中添加了一个开放图层地图,然后将切片和矢量图层设置为该地图,但是当我想使用以下代码在循环中绘制 LineString 时:
var lineGeometry = new LineString([olProj.fromLonLat(coordinates[i-1]), olProj.fromLonLat(coordinates[i])]);
var feature = new Feature({
geometry: lineGeometry
});
this.myVectorSource.addFeature(feature);
我收到一个错误:错误:未实现的抽象方法。
在"getExtent(("函数中来自"lineGeometry"变量。
我试图控制台日志"lineGeometry"变量,它有"范围"成员变量,但它的所有组件都是无穷大。(我假设"getExtent(("是"extent"成员变量的获取功能(
但是,如果我尝试在点之间绘制点而不是线,我会得到预期的结果(点在地图上呈现(
var pointGeometry = new Point(olProj.fromLonLat(coordinates[i]));
var feature = new Feature({
geometry: pointGeometry
});
this.myVectorSource.addFeature(feature);
有关代码的更多详细信息,请下载:
https://plnkr.co/edit/Ih6mCanmpqDmdg2q?open=lib%2Fscript.js&deferRun=1&preview
首先,你导入LineString
是错误的 改变
import LineString from 'ol/geom/Geometry';
自
import LineString from 'ol/geom/LineString';
线串由所有坐标组成,因此请将其从 for 循环中删除。您可以使用几何体的变换方法从 EPSG:4326 (LonLat( 转换为视图投影
drawLine(coordinates, drawDots)
{
if(drawDots)
{
for(var i = 0; i < coordinates.length; i++)
{
var pointGeometry = new Point(olProj.fromLonLat(coordinates[i]));
var feature = new Feature({
geometry: pointGeometry
});
this.myVectorSource.addFeature(feature);
}
}
else
{
var lineGeometry = new LineString(coordinates).transform('EPSG:4326', this.myMap.getView().getProjection());
console.log(lineGeometry)
var feature = new Feature({
geometry: lineGeometry
});
this.myVectorSource.addFeature(feature);
}
}