Openlayers - LayerRedraw() / 特征旋转 / 线串坐标

Sph*_*hvn 5 javascript jquery json extjs openlayers

TLDR:我有一个 Openlayers 地图,其中有一个名为“轨道”的图层,我想删除轨道并重新添加轨道。或者弄清楚如何根据一组坐标和标题绘制三角形(见下文)。


我在一个图层上有一个图像“imageFeature”,它在加载时旋转到设置的方向。我希望它更新在名为'tracking'的图层上的'styleMap' 中设置的旋转。

  1. 我设置了 var 'stylemap'来应用外部图像和旋转。
  2. “imageFeature”被添加到在指定的坐标中的层。
  3. 'imageFeature'被删除。
  4. 'imageFeature'再次添加到其新位置。不适用旋转..

由于“styleMap”适用于图层,我认为我必须删除图层并再次添加它而不仅仅是“imageFeature”

var tracking = new OpenLayers.Layer.GML("Tracking", "coordinates.json", {
  format: OpenLayers.Format.GeoJSON,
  styleMap: styleMap
});
Run Code Online (Sandbox Code Playgroud)

样式映射

var styleMap = new OpenLayers.StyleMap({
  fillOpacity: 1,
  pointRadius: 10,
  rotation: heading,
});
Run Code Online (Sandbox Code Playgroud)

现在包含在一个定时函数 imageFeature 中

map.layers[3].addFeatures(new OpenLayers.Feature.Vector(
  new OpenLayers.Geometry.Point(longitude, latitude), {
    rotation: heading,
    type: parseInt(Math.random() * 3)
  }
));
Run Code Online (Sandbox Code Playgroud)

类型是指查找 3 个图像中的 1 个。

styleMap.addUniqueValueRules("default", "type", lookup);

var lookup = {
  0: {
    externalGraphic: "Image1.png",
    rotation: heading
  },
  1: {
    externalGraphic: "Image2.png",
    rotation: heading
  },
  2: {
    externalGraphic: "Image3.png",
    rotation: heading
  }
}
Run Code Online (Sandbox Code Playgroud)

我尝试过“redraw()”函数:但它返回“跟踪未定义”或“map.layers[2]”未定义。

tracking.redraw(true);
map.layers[2].redraw(true);
Run Code Online (Sandbox Code Playgroud)

标题是一个变量:来自 JSON 提要。

var heading = 13.542;
Run Code Online (Sandbox Code Playgroud)

但到目前为止还不能做任何事情,它只会在加载时旋转图像。图像将按其应有的坐标移动。

那么我在重绘功能上做错了什么,或者如何让这个图像实时旋转?

提前致谢

-尾崎

添加:我设法得到

 map.layers[2].redraw(true);
Run Code Online (Sandbox Code Playgroud)

成功重绘第2层。但它仍然没有更新旋转。我在想是因为样式图正在更新。但是它每 n 秒运行一次样式映射,但是如果我在萤火虫中对其进行监视,则不会更新旋转,并且标题的变量正在正确更新。


如果我要绘制一个带有点和线串数组的三角形。我将如何面对三角形朝向标题。我有一点的经纬度和航向。

var points = new Array(
  new OpenLayers.Geometry.Point(lon1, lat1),
  new OpenLayers.Geometry.Point(lon2, lat2),
  new OpenLayers.Geometry.Point(lon3, lat3)
);

var line = new OpenLayers.Geometry.LineString(points);
Run Code Online (Sandbox Code Playgroud)

寻找任何方法来解决这个问题 Image 或 Line 任何人都知道该怎么做,要么添加了100rep赏金,我真的很坚持这个。


//From getJSON request//
var heading = data.RawHeading;
Run Code Online (Sandbox Code Playgroud)

添加和删​​除 imageFeature

Sph*_*hvn 3

问题解决如下:

            var styleMap = new OpenLayers.StyleMap({
                fillOpacity: 1,
                pointRadius: 10,
                rotation: "${angle}",
            });

           var lookup = {
                0: { externalGraphic: "Image1.png", rotation: "${angle}" },
                1: { externalGraphic: "Image2.png", rotation: "${angle}" },
                2: { externalGraphic: "Image3.png", rotation: "${angle}" }
            }
 styleMap.addUniqueValueRules("default", "type", lookup);

 map.layers[3].addFeatures(new OpenLayers.Feature.Vector(
        new OpenLayers.Geometry.Point(lon, lat), {"angle": dir, type: parseInt(Math.random() * 3)}
        ), {"angle": dir});
Run Code Online (Sandbox Code Playgroud)

然后请求:

var dir = (function () {
                $.ajax({
                    'async': false,
                    'global': true,
                    'url': urldefault,
                    'dataType': "json",
                    'success': function (data) {
                        dir = data.Heading
                    }
                });
                return dir;
            })();
Run Code Online (Sandbox Code Playgroud)

问题解决了。工作完美。