Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript OpenLayers在地图上放置多边形_Javascript_Openlayers - Fatal编程技术网

Javascript OpenLayers在地图上放置多边形

Javascript OpenLayers在地图上放置多边形,javascript,openlayers,Javascript,Openlayers,我正在为割草机机器人防盗装置编写一个web应用程序 我做的第一件事是画一张地图,这很有效,结果如下: 图片-> 接下来我要做的是在地图上添加一个多边形,它代表机器人可能所在的区域,在该区域外会发出警报。 问题是多边形没有出现在我的屏幕上,根据OpenLayers,其面积为0:/ 这是我的密码: function draw\u poly(点、样式){ 常量多边形=新的ol.geom.Polygon([新ol.geom.LinearRing(points.map(p=>[p.long,p.lat])

我正在为割草机机器人防盗装置编写一个web应用程序

我做的第一件事是画一张地图,这很有效,结果如下:

图片->

接下来我要做的是在地图上添加一个多边形,它代表机器人可能所在的区域,在该区域外会发出警报。 问题是多边形没有出现在我的屏幕上,根据OpenLayers,其面积为0:/

这是我的密码:

function draw\u poly(点、样式){
常量多边形=新的ol.geom.Polygon([新ol.geom.LinearRing(points.map(p=>[p.long,p.lat])),样式)
console.log(poly.getArea())
log(points.map(p=>[p.long,p.lat]))
返回新的ol.特性({
几何体:多边形
});
}
[...]
常数割草机\u限值\u rect=draw\u poly([
{lat:44.059052,long:1.344245},
{lat:44.059022,long:1.344543},
{lat:44.058733,long:1.344482},
{lat:44.058773,long:1.344246}
], {
strokeColor:#00FF00“,
频闪不透明度:1,
冲程宽度:3,
fillColor:#00FF00“,
填充不透明度:0.8
});
[...]
const vectorSource=新ol.source.Vector({
特点:[割草机,割草机限制]
});
var vectorLayer=新ol.layer.Vector({
来源:矢量源
});
常量映射=新ol.map({
目标:“地图”,
图层:[
新ol.layer.Tile({
来源:new ol.source.OSM()
}),
矢量层
],
视图:新ol.view({
中心:Lonlat的其他项目([14,44]),
缩放:4
})
});

提前谢谢你

多边形应直接从坐标构建,且必须闭合(即最终坐标与第一个坐标相同)。它还必须从lon/lat转换为视图投影。Geometry构造函数不接受样式参数。您需要根据样式对象中的值构造OpenLayers样式,并将其设置为要素样式。单独的颜色和不透明度值需要组合为rgba颜色阵列

function draw_poly(points, style) {

  const closedPoints = points.concat([points[0]]);
  const poly = new ol.geom.Polygon([closedPoints.map(p=>[p.long, p.lat])]).transform('EPSG:4326', 'EPSG:3857');
  const feature = new ol.feature(poly);

  const fillColor = ol.color.asArray(style.fillColor).slice();
  fillColor[3] = style.fillOpacity;
  const strokeColor = ol.color.asArray(style.strokeColor).slice();
  strokeColor[3] = style.strokeOpacity;
  const olStyle = new ol.style.Style({
    fill: new ol.style.Fill({
      color: fillColor
    }),
    stroke: new ol.style.Stroke({
      color: strokeColor,
      width: style.strokeWidth
    })
  });
  feature.setStyle(olStyle);
  return feature;

}

非常感谢你!你真的帮了我的忙,这看起来确实很愚蠢,但是我在OpenLayers文档方面遇到了很多麻烦。