在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Vue+Openlayer使用modify修改要素,具体内容如下所示:
直接修改要素
核心代码: // 修改要素核心代码 modifyFeature() { this.modify = new Modify({ source: this.lineStringLayer.getSource(), }); this.map.addInteraction(this.modify); }, 完整代码: <template> <div id="map" style="height: 100vh; width: 100vw"></div> </template> <script> import "ol/ol.css"; import { Map, View, Feature } from "ol"; import { OSM, Vector as VectorSource } from "ol/source"; import { Vector as VectorLayer, Tile as TileLayer } from "ol/layer"; import { Point, LineString, Polygon } from "ol/geom"; import { Modify } from "ol/interaction"; export default { data() { return { map: {}, lineStringLayer: {}, modify: {}, }; }, created() {}, mounted() { this.initMap(); this.addLayer(); this.modifyFeature(); }, computed: {}, methods: { initMap() { this.map = new Map({ target: "map", layers: [ new TileLayer({ source: new OSM(), }), ], view: new View({ projection: "EPSG:4326", center: [104.2979180563, 30.528298024], zoom: 18, }), }); }, addLayer() { this.lineStringLayer = new VectorLayer({ source: new VectorSource(), }); this.lineStringLayer.getSource().addFeature( new Feature({ geometry: new LineString([ [104.2979180563, 30.528298024], [104.2987389704, 30.527798338], ]), }) ); this.map.addLayer(this.lineStringLayer); }, // 修改要素核心代码 modifyFeature() { this.modify = new Modify({ source: this.lineStringLayer.getSource(), //这里要用source }); this.map.addInteraction(this.modify); }, }, }; </script> 此外,可通过this.modify.setActive(false)来禁用modify对象,this.modify.getActive()获取激活状态 先选中要素,再修改要素核心代码:
modifyFeature() { this.modify = new Modify({ //注意:这里一定要用features属性,不要用source!!!! features: this.select.getFeatures(), }); this.map.addInteraction(this.modify); }, 完整代码: <template> <div id="map" style="height: 100vh; width: 100vw"></div> </template> <script> import "ol/ol.css"; import { Map, View, Feature } from "ol"; import { OSM, Vector as VectorSource, XYZ } from "ol/source"; import { Vector as VectorLayer, Tile as TileLayer } from "ol/layer"; import Select from "ol/interaction/Select"; import { Point, LineString, Polygon } from "ol/geom"; import { Modify } from "ol/interaction"; export default { data() { return { map: {}, lineStringLayer: {}, draw: {}, modify: {}, select: {}, }; }, created() {}, mounted() { this.initMap(); this.pointerMove(); this.addLayer(); this.selectFeature(); this.modifyFeature(); }, computed: {}, methods: { initMap() { this.map = new Map({ target: "map", layers: [ new TileLayer({ source: new OSM(), }), ], view: new View({ projection: "EPSG:4326", center: [104.2979180563, 30.528298024], zoom: 18, }), }); }, pointerMove() { this.map.on("pointermove", (e) => { const isHover = this.map.hasFeatureAtPixel(e.pixel); this.map.getTargetElement().style.cursor = isHover ? "pointer" : ""; }); }, addLayer() { this.lineStringLayer = new VectorLayer({ source: new VectorSource(), }); this.lineStringLayer.getSource().addFeature( new Feature({ geometry: new LineString([ [104.2979180563, 30.528298024], [104.2987389704, 30.527798338], ]), }) ); this.map.addLayer(this.lineStringLayer); }, selectFeature() { this.select = new Select(); this.map.addInteraction(this.select); }, modifyFeature() { this.modify = new Modify({ //注意:这里一定要用features属性,不要用source!!!! features: this.select.getFeatures(), }); this.map.addInteraction(this.modify); }, }, }; </script> ps:Openlayers修改矢量要素 将以下代码放到demo下examples中即可运行 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0"> <meta name="apple-mobile-web-app-capable" content="yes"> <title>Modify Feature</title> <link rel="stylesheet" href="../theme/default/style.css" rel="external nofollow" rel="external nofollow" type="text/css"> <link rel="stylesheet" href="style.css" rel="external nofollow" rel="external nofollow" type="text/css"> <style type="text/css"> </style> <script src="../lib/OpenLayers.js"></script> <script type="text/javascript"> var map, vectors, controls; function init(){ map = new OpenLayers.Map('map'); var wms = new OpenLayers.Layer.WMS( "OpenLayers WMS", "http://vmap0.tiles.osgeo.org/wms/vmap0?", {layers: 'basic'}); OpenLayers.Feature.Vector.style['default']['strokeWidth'] = '2'; vectors = new OpenLayers.Layer.Vector("Vector Layer"); var geometry = OpenLayers.Geometry.fromWKT( 'POLYGON((110 20,120 20,120 10,110 10,110 20),(112 17,118 18,118 16,112 15,112 17))' ); vectors.addFeatures([new OpenLayers.Feature.Vector(geometry)]); map.addLayers([wms, vectors]); //画图形 controls = new OpenLayers.Control.DrawFeature(vectors, OpenLayers.Handler.Polygon); map.addControl(controls); controls.activate(); map.setCenter(new OpenLayers.LonLat(110, 20), 3); } function update() { // 修改 controls.deactivate(); controls = new OpenLayers.Control.ModifyFeature(vectors); map.addControl(controls); controls.activate(); } function deactivate(){ controls.deactivate(); } </script> </head> <body onload="init()"> <div id="map" class="smallmap"></div> <div><input type = "button" value = "修改" onclick = "update()"/> <input type = "button" value = "取消" onclick = "deactivate()"/> </div> </body> </html> 到此这篇关于Vue+Openlayer使用modify修改要素的文章就介绍到这了,更多相关Vue Openlayer修改要素内容请搜索极客世界以前的文章或继续浏览下面的相关文章希望大家以后多多支持极客世界! |
请发表评论