Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
Z
zh-baseversion-project
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
王浩
zh-baseversion-project
Commits
abe7e7ae
Commit
abe7e7ae
authored
Jul 08, 2024
by
wanghao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1 气量监管-停气区域 多区域功能实现中。
parent
55dd880b
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
132 additions
and
48 deletions
+132
-48
index.vue
...eversion-web/src/components/GasShutDownDrawArea/index.vue
+132
-48
No files found.
zh-baseversion-web/src/components/GasShutDownDrawArea/index.vue
View file @
abe7e7ae
...
...
@@ -36,10 +36,11 @@
return
{
gaoMap
:
null
,
mouseTool
:
null
,
drawLayers
:
[],
selectedLayerIndex
:
null
,
overlays
:
null
,
firstClick
:
0
,
nowMouseTarget
:
null
,
polygons
:
[],
currentPolygonId
:
0
,
isClickPolygonFlag
:
false
,
opts
:{
...
...
@@ -71,65 +72,148 @@
initMapEvent
(){
let
that
=
this
;
this
.
gaoMap
.
map
.
on
(
"click"
,
()
=>
{
// if(that.nowMouseTarget && !that.isClickPolygonFlag){
// that.$confirm("是否重新绘制区域", { type: "warning" })
// .then(() => {
// that.$emit("input", []);
// that.mouseTool && that.mouseTool.close();
// that.nowMouseTarget.polygonEditor && that.nowMouseTarget.polygonEditor.close();
// that.gaoMap.map.remove(that.nowMouseTarget);
// that.mouseTool && that.mouseTool.polygon(that.opts);
// if(!that.mouseTool){
// that.initMouseEvent();
// }
// that.isClickPolygonFlag = true;
// }).catch(() => {});
// }
if
(
that
.
nowMouseTarget
&&
!
that
.
isClickPolygonFlag
){
//that.$emit("input", []);
that
.
mouseTool
&&
that
.
mouseTool
.
close
();
that
.
nowMouseTarget
.
polygonEditor
&&
that
.
nowMouseTarget
.
polygonEditor
.
close
();
//that.gaoMap.map.remove(that.nowMouseTarget);
that
.
mouseTool
&&
that
.
mouseTool
.
polygon
(
that
.
opts
);
if
(
!
that
.
mouseTool
){
that
.
initMouseEvent
();
}
that
.
isClickPolygonFlag
=
true
;
this
.
drawLayers
.
push
(
'['
+
that
.
nowMouseTarget
+
']'
);
that
.
nowMouseTarget
.
setMap
(
this
.
gaoMap
.
map
);
this
.
selectedLayerIndex
=
this
.
drawLayers
.
length
-
1
;
// 设置当前选中的图层索引
console
.
log
(
"this.drawLayers = "
+
this
.
drawLayers
)
that
.
nowMouseTarget
=
null
;
}
});
},
//初始化鼠标事件
initMouseEvent
(){
let
that
=
this
;
this
.
gaoMap
.
map
.
plugin
([
"AMap.MouseTool"
],
()
=>
{
this
.
mouseTool
=
new
AMap
.
MouseTool
(
this
.
gaoMap
.
map
);
this
.
mouseTool
.
polygon
(
this
.
opts
);
this
.
mouseTool
.
on
(
'draw'
,
function
(
e
){
const
polygon
=
e
.
obj
;
polygon
.
on
(
'click'
,
function
()
{
this
.
gaoMap
.
map
.
plugin
([
"AMap.PolygonEditor"
],(
n
)
=>
{
const
polygonEditor
=
new
AMap
.
PolygonEditor
(
this
.
gaoMap
.
map
,
polygon
);
polygon
.
polygonEditor
=
polygonEditor
;
that
.
mouseTool
=
new
AMap
.
MouseTool
(
this
.
gaoMap
.
map
);
that
.
mouseTool
.
polygon
(
that
.
opts
);
that
.
mouseTool
.
on
(
'draw'
,
function
(
e
){
that
.
nowMouseTarget
=
e
.
obj
;
that
.
$emit
(
"input"
,
that
.
nowMouseTarget
.
_opts
.
path
);
that
.
isClickPolygonFlag
=
false
;
if
(
that
.
nowMouseTarget
.
_opts
.
path
.
length
>
2
){
that
.
mouseTool
.
close
();
that
.
isClickPolygonFlag
=
true
;
}
that
.
firstClick
=
0
;
e
.
obj
.
on
(
'click'
,
function
()
{
that
.
isClickPolygonFlag
=
true
;
that
.
firstClick
++
;
if
(
that
.
firstClick
<
2
){
that
.
gaoMap
.
map
.
plugin
([
"AMap.PolygonEditor"
],(
n
)
=>
{
const
polygonEditor
=
new
AMap
.
PolygonEditor
(
that
.
gaoMap
.
map
,
e
.
obj
);
that
.
nowMouseTarget
.
polygonEditor
=
polygonEditor
;
polygonEditor
.
on
(
"removenode"
,
(
e
)
=>
{
//
that.$emit("input", e.target._opts.path);
//
that.isClickPolygonFlag = true;
if
(
polygon
.
_opts
.
path
.
length
==
0
){
that
.
$emit
(
"input"
,
e
.
target
.
_opts
.
path
);
that
.
isClickPolygonFlag
=
true
;
if
(
that
.
nowMouseTarget
.
_opts
.
path
.
length
==
0
){
setTimeout
(()
=>
{
that
.
mouseTool
.
polygon
(
that
.
opts
);
},
230
);
}
});
polygonEditor
.
on
(
"adjust"
,(
e
)
=>
{
//
that.$emit("input", e.target._opts.path);
that
.
$emit
(
"input"
,
e
.
target
.
_opts
.
path
);
})
polygonEditor
.
on
(
"addnode"
,(
e
)
=>
{
//
that.$emit("input", e.target._opts.path);
that
.
$emit
(
"input"
,
e
.
target
.
_opts
.
path
);
})
polygonEditor
.
open
();
});
}
});
polygon
.
on
(
"mouseout"
,
(
e
)
=>
{
//
that.isClickPolygonFlag = false;
e
.
obj
.
on
(
"mouseout"
,
(
e
)
=>
{
that
.
isClickPolygonFlag
=
false
;
})
//右键关闭区域编辑
polygon
.
on
(
"rightclick"
,()
=>
{
//
that.firstClick = 0;
polygon
.
polygonEditor
.
close
();
e
.
obj
.
on
(
"rightclick"
,()
=>
{
that
.
firstClick
=
0
;
that
.
nowMouseTarget
.
polygonEditor
.
close
();
})
this
.
polygons
.
push
({
id
:
this
.
currentPolygonId
++
,
polygon
});
//双击删除
e
.
obj
.
on
(
'dblclick'
,(
e
)
=>
{
console
.
log
(
"this.e = "
+
e
)
that
.
$confirm
(
"是否删除此区域"
,
{
type
:
"warning"
})
.
then
(()
=>
{
console
.
log
(
"确实要删除了。"
)
debugger
;
let
point
=
new
AMap
.
LngLat
(
e
.
lngLat
.
lng
,
e
.
lngLat
.
lat
);
for
(
let
i
=
0
;
i
<
this
.
drawLayers
.
length
;
i
++
)
{
if
(
this
.
drawLayers
[
i
].
contains
(
point
)){
console
.
log
(
"第"
+
i
+
"个包含点击的坐标点,该删除"
);
}
}
}).
catch
(()
=>
{});
})
}),
that
.
mouseTool
.
on
(
'click'
,()
=>
{
if
(
!
this
.
selectedLayerIndex
)
return
;
let
layer
=
this
.
drawLayers
[
this
.
selectedLayerIndex
];
let
point
=
new
AMap
.
LngLat
(
e
.
lnglat
.
lng
,
e
.
lnglat
.
lat
);
if
(
layer
.
contains
(
point
))
{
// 点击点在区域内,则添加到区域中
layer
.
getPath
().
push
(
point
);
}
else
{
// 点击点不在区域内,则删除最近的一个点
let
path
=
layer
.
getPath
();
let
lastPoint
=
path
[
path
.
length
-
1
];
if
(
lastPoint
.
distance
(
point
)
>
50
)
{
path
.
pop
();
}
}
})
});
},
handleDrawEnd
(
e
){
let
layer
=
e
.
layer
;
this
.
drawLayers
.
push
(
layer
);
layer
.
setMap
(
this
.
gaoMap
.
map
);
// 设置当前选中的图层索引
this
.
selectedLayerIndex
=
this
.
drawLayers
.
length
-
1
;
},
handleClick
(
e
){
if
(
!
this
.
selectedLayerIndex
)
return
;
let
layer
=
this
.
drawLayers
[
this
.
selectedLayerIndex
];
let
point
=
new
Amap
.
lngLat
(
e
.
lnglat
.
lng
,
e
.
lnglat
.
lat
);
if
(
layer
.
contains
(
point
))
{
//点击点在区域内,则添加到区域内
layer
.
getPath
().
push
(
point
);
}
else
{
//点击点不在区域内,则删除最近的一个点
let
path
=
layer
.
getPath
();
let
lastPoint
=
path
[
path
.
length
-
1
];
if
(
lastPoint
.
distance
(
point
)
>
50
)
{
path
.
pop
();
}
}
},
selectLayer
(
index
)
{
this
.
selectedLayerIndex
=
index
;
},
deleteLayer
(
index
){
let
layer
=
this
.
drawLayers
[
index
];
layer
.
setMap
(
null
);
this
.
drawLayers
.
splice
(
index
,
1
);
if
(
this
.
selectedLayerIndex
>=
index
)
{
this
.
selectedLayerIndex
=
Math
.
max
(
0
,
this
.
selectedLayerIndex
-
1
);
}
},
//区域回显
loadArea
(){
const
polygon
=
new
AMap
.
Polygon
({
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment