Openlayers 6 GeoJSON简化行字符串

Openlayers 6 GeoJSON简化行字符串,openlayers,geojson,simplify,Openlayers,Geojson,Simplify,我试图简化我的GeoJson数据,因为在我的linestring数据中,有许多轨迹点来自同一个地方,但具有GPS的公差。所以我想使用内置函数来简化数据 我基于GeoJSON示例的代码形成Openlayers 我可以提取特征的几何体,但我不能将新几何体放回特征并将其添加到图层中。矢量和原始日期的源层工作正常。对于测试,我想显示两个功能,原始轨迹和简化轨迹。如果我不想生成一个新层,是否有办法调整几何体 这是我的代码: import'ol/ol.css'; 从“ol/功能”导入功能; 从“ol/Ma

我试图简化我的GeoJson数据,因为在我的linestring数据中,有许多轨迹点来自同一个地方,但具有GPS的公差。所以我想使用内置函数来简化数据

我基于GeoJSON示例的代码形成Openlayers

我可以提取特征的几何体,但我不能将新几何体放回特征并将其添加到图层中。矢量和原始日期的源层工作正常。对于测试,我想显示两个功能,原始轨迹和简化轨迹。如果我不想生成一个新层,是否有办法调整几何体

这是我的代码:

import'ol/ol.css';
从“ol/功能”导入功能;
从“ol/Map”导入地图;
从“ol/View”导入视图;
从“ol/format/GeoJSON”导入GeoJSON;
从“ol/geom/Circle”导入圆;
从'ol/layer'导入{Tile as TileLayer,Vector as VectorLayer};
从'ol/source'导入{OSM,Vector as VectorSource};
从'ol/Style'导入{圆圈为圆圈样式、填充、笔划、样式};
从“ol/geom/Geometry”导入几何图形;
导入{默认值为defaultInteractions,修改,从'ol/interaction'中选择};
$(document).on('turbolinks:load',function(){
var image=新的圆圈样式({
半径:5,
填充:空,
笔划:新笔划({颜色:红色,宽度:1})
});
变量样式={
“点”:新风格({
图像:图像
}),
“LineString”:新样式({
笔划:新笔划({
颜色:“绿色”,
宽度:1
})
}),
“多重约束”:新样式({
笔划:新笔划({
颜色:“绿色”,
宽度:1,
})
}),
“多点”:新样式({
图像:图像
}),
“多多边形”:新样式({
笔划:新笔划({
颜色:'黄色',
宽度:1
}),
填充:新填充({
颜色:“rgba(255,255,0,0.1)”
})
}),
“多边形”:新样式({
笔划:新笔划({
颜色:“蓝色”,
划线:[4],
宽度:3
}),
填充:新填充({
颜色:“rgba(0,0,255,0.1)”
})
}),
“GeometryCollection”:新样式({
笔划:新笔划({
颜色:'洋红色',
宽度:2
}),
填充:新填充({
颜色:“洋红色”
}),
图片:新圆环样式({
半径:10,
填充:空,
笔划:新笔划({
颜色:“洋红色”
})
})
}),
“圆圈”:新风格({
笔划:新笔划({
颜色:“红色”,
宽度:2
}),
填充:新填充({
颜色:“rgba(255,0,0,0.2)”
})
})
};
var styleFunction=函数(特性){
返回样式[feature.getGeometry().getType()];
};
var vectorSource=新矢量源({
格式:new GeoJSON(),
url:'v1/track?旅程={“last”}'
})
var vectorLayer=新vectorLayer({
来源:矢量源,
style:styleFunction
})
变量选择=新选择({
wrapX:错误
});
var modify=新修改({
功能:select.getFeatures()
});
var映射=新映射({
交互:defaultInteractions().extend([select,modify]),
图层:[
新瓦工({
资料来源:新OSM()
})
],
目标:“地图”,
视图:新视图({
中间:[0,0],
缩放:2
})
});
console.log(矢量层);
//map.addLayer(矢量层);
$.getJSON('v1/track?旅程={“last”}',函数(数据){
var track=(新的GeoJSON()).readFeature(数据);
var simpleGeo=track.getGeometry().simplify(0.01);
track.setGeometry(simpleGeo);
//console.log(simpleGeo);
var simpleSource=new GeoJSON(simpleGeo);
var simpleLayer=新矢量层({
资料来源:simpleSource,
style:styleFunction
})
console.log(simpleLayer);
map.addLayer(simpleLayer);
map.render();
});
});

您可以在加载功能时更新这些功能

vectorSource.on('addfeature', function(event) {
  event.feature.setGeometry(event.feature.getGeometry().simplify(0.01));
});

代码示例正在运行。我的价值太小,无法在地图上产生影响。所以我使用100或更高


问候马可

你好,迈克,谢谢你的快速回答。我已将EventListener放入我的代码示例中,但没有任何更改。我可以看到on事件被触发,但几何体没有被简化。我把代码放在den vectorSource之后,矢量层之前。