GEOJSON画线时需要的二维数组坐标怎么转换
使用的是思极地图 文档地址https://lbs.sgmap.cn/products...
其中创建线段用到GEOJSON,对这个不太熟
数据如下(无视坐标相同...事实是不同的)
tableData: [ {
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151A",
},
{
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151B",
},
{
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151C",
},
{
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151D",
}
]
创建地图后需要画线段和圆点,每两个圆点有一条线段相连
画线的代码
getLine(map, id, lineWidth, lineOpacity, lineOffset, coordinates, _this) { let currentLine = null;
map.on("load", function (e) {
//画线
let polyline = map.addLayer({
id: id,
type: "line",
source: {
type: "geojson",
data: {
type: "FeatureCollection",
features: [],
},
},
paint: {
"line-color": "#00896C",
"line-width": lineWidth,
"line-opacity": lineOpacity,
"line-offset": lineOffset,
//'line-dasharray':[4,4]
},
});
map.getSource(id).setData({
type: "FeatureCollection",
features: [
{
type: "Feature",
geometry: {
type: "LineString",
coordinates: coordinates, //二维数组[[0,0],[0,0]]
},
},
],
});
map.on("click", String(id), function (e) {
if (!currentLine) {
map.setPaintProperty(String(id), "line-color", "#6AD6C0");
currentLine = polyline;
} else {
map.setPaintProperty(String(id), "line-color", "#00896C");
currentLine = null
}
});
});
},
关键就在coordinates。
然后开始循环画线
data() { return {
linePath: []
}
}
computed: {
dataDeal() {
for (let [index, elem] of new Map(_this.tableData.map((item, i) => [i,item]))) {
this.drawMarker(elem, index);
}
}
}
mthods: {
drawMarker(elem, index) {
let _this = this
if (elem.markerX && elem.markerY) {
_this.linePath.push([elem.markerX, elem.markerY]);
_this.getLine(
map,
String(elem.sectionNumber), //线id
4, //线宽
0.8, //透明度
0, //偏移量
_this.linePath, //线坐标,一个二维数组
_this
);
}
}
}
这样是可以正常显示出线段的,问题就是,我想要点击线段,然后点击的会有个高亮效果,
理想效果是:点击两个圆点之间的线段,只有这个线段高亮,其他圆点的连线不变。
事实效果是:点击两个圆点之间的线段,整条线段都高亮了。。。
排查问题发现是传入的coordinates,用push的方式之后,把所有数据都push到一个数组了,就相当于只创建了一条线段。
有没有什么办法,用现有的数据,创建成三个不同的二维数组,比如:[Arr0, Arr1] [Arr1, Arr2] [Arr2, Arr3]
回答:
理想效果是:点击两个圆点之间的线段,只有这个线段高亮,其他圆点的连线不变。
事实效果是:点击两个圆点之间的线段,整条线段都高亮了。。。
我猜想是你生成一个layer图层,理论上你需要生成点数-1个图层。
理论上你需要把geojson分成一个数组,数组内每个元素都是两个点
比如:
tableData: [ {
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151A",
},
{
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151B",
},
{
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151C",
},
{
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151D",
}
]
变成
tableData: [ [
{
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151A",
},
{
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151B",
}
],
[
{
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151B",
},
{
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151C",
}
],
[
{
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151C",
},
{
markerX: 116.409197,
markerY: 39.912869,
lineId: "51515616151D",
}
]
]
这样一个geojson变成三个再去创建线图层,就会生成多个layer
大概的数据处理方法?
let a = [1,2,3,4,5,6,7,8,9,10]let b = []
for(var i=0;i<a.length;i++){
let c = a.shift()
b.push([c,a[0]])
}
以上是 GEOJSON画线时需要的二维数组坐标怎么转换 的全部内容, 来源链接: utcz.com/p/935730.html