1

有什么方法可以自动设置从 GeoJSON 文件中读取的每个特征的样式,并以不同的方式用作矢量图层的源?我附上了一个屏幕截图:这种乱七八糟的绿线特征不仅令人困惑。每行随机分配不同的颜色会很好。谢谢你的帮助!

在此处输入图像描述

编辑:添加代码

在这里,您可以找到我用于此表示的相关代码。您可以看到我将green颜色定义为 LineStrings,但我想知道如何自动将不同颜色分配给 LineStrings。

// load GeoJSON with > 2000 Line Features
var fullGeoJSON = require("./data/datafile.json");
// Style function to be called in Layer definition, uses Styles defined in var styles
var styleFunction = function (feature) {
    return styles[feature.getGeometry().getType()];
};
// Define Style (one for all)
var styles = {
    "Point": new Style({
        image: image
    }),
    "LineString": new Style({
        stroke: new Stroke({
            color: "green",
            width: 3
        })
    }),
};
// Define Source
var geoSource = new VectorSource({
    features: new GeoJSON().readFeatures(fullGeoJSON, {
        featureProjection: "EPSG:3857"
    })
});
// Define Layer
var baseLayer = new VectorLayer({
    source: geoSource,
    style: styleFunction
});
// Define Map
const mainMap = new Map({
    target: "map-container",
    layers: [baseLayer],
    view: initialView
});
4

1 回答 1

0

感谢您评论的所有帮助,我想通了:

  1. 将 chroma.js 加载到您的项目中(我使用 npm 和 webpack,在使用 npm 安装后,我需要像这样的 chroma var chroma = require("chroma-js");:)
  2. 定义一个随机化函数:

    function randomize() {
        geoSource.forEachFeature(function (feature) {
            var scale = chroma.scale(["#731422", "#1CBD20", "#1CA1FF"]).mode("lch").colors(300); // Define color scale
            var randomColor = scale[Math.floor(Math.random() * scale.length)]; // select a random color from color scale
            var randomStyle = new Style({
                stroke: new Stroke({
                    color: randomColor,
                    width: 5
                })
            }); // define a style variable
            feature.setStyle(randomStyle); // set feature Style
        });
    }
    
  3. 每当图层更改时调用该函数:randomize();

  4. “定义”层,这次没有样式:

    var baseLayer = new VectorLayer({
        source: geoSource
    });
    

在此处输入图像描述

于 2018-12-13T08:47:59.140 回答