我有一个带有 X Y 坐标的图像地图,并从 GeoJSON 源加载对象。 JSON 文件中的坐标需要使用 X 和 Y 偏移进行转换。 为此,获取并转换几何图形:
geometry.translate(162, 435)
,如下面的示例所示。但是,平移(添加偏移量)不是一次平移对象的坐标,而是无限循环,直到对象移出地图。
objectsLayer = new VectorLayer({
visible: true,
source: new VectorSource({
url: 'assets/objects.json',
format: new GeoJSON(),
}),
style: function (feature) {
console.log('style: function');
let geometry = feature.getGeometry();
if (geometry instanceof Geometry) {
geometry.translate(162, 435);
}
return new Style({
image: new CircleStyle({
radius: 5,
stroke: new Stroke({ color: 'cyan', width: 1 }),
fill: new Fill({ color: 'magenta' }),
}),
});
},
});
如何对每个对象仅应用一次翻译功能?
要么
objectsLayer = new VectorLayer({
visible: true,
source: new VectorSource({
url: 'assets/objects.json',
format: new GeoJSON(),
}),
style: function (feature) {
let geometry = feature.getGeometry();
if (geometry instanceof Geometry) {
geometry = geometry.clone();
geometry.translate(162, 435);
}
return new Style({
geometry: geometry,
image: new CircleStyle({
radius: 5,
stroke: new Stroke({ color: 'cyan', width: 1 }),
fill: new Fill({ color: 'magenta' }),
}),
});
},
});
或
objectsLayer = new VectorLayer({
visible: true,
source: new VectorSource({
url: 'assets/objects.json',
format: new GeoJSON(),
}),
style: new Style({
geometry: function (feature) {
let geometry = feature.getGeometry();
if (geometry instanceof Geometry) {
geometry = geometry.clone();
geometry.translate(162, 435);
}
return geometry;
},
image: new CircleStyle({
radius: 5,
stroke: new Stroke({ color: 'cyan', width: 1 }),
fill: new Fill({ color: 'magenta' }),
}),
}),
});
应该可以。