Skip to content
Toggle navigation
Toggle navigation
This project
Loading...
Sign in
刘远
/
3d_dc
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
1
Wiki
Network
Create a new issue
Builds
Commits
Issue Boards
Files
Commits
Network
Compare
Branches
Tags
f7563079
authored
2020-07-30 09:24:29 +0800
by
jikai
Browse Files
Options
Browse Files
Tag
Download
Email Patches
Plain Diff
111111
1 parent
33dfa599
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
314 additions
and
0 deletions
src/assets/js/map/tool.js
src/assets/js/map/tool.js
0 → 100644
View file @
f756307
export
default
{
attributes
:
{
drawPolt
:
class
DrawPolt
{
constructor
(
arg
)
{
this
.
viewer
=
arg
.
viewer
;
this
.
type
=
{};
this
.
_billboardArr
=
[];
this
.
_lineArr
=
[];
this
.
_gonArr
=
[];
this
.
handler
=
null
;
}
get
billboardArr
()
{
return
this
.
_billboardArr
;
}
get
polylineArr
()
{
return
this
.
_lineArr
;
}
get
polygonArr
()
{
return
this
.
_gonArr
;
}
create
(
e
)
{
this
.
type
[
e
].
startCreate
();
return
this
.
type
[
e
];
}
clearAll
()
{
for
(
var
i
=
0
;
i
<
this
.
_lineArr
.
length
;
i
++
)
{
var
line
=
this
.
_lineArr
[
i
];
line
.
destroy
();
}
this
.
_lineArr
=
[];
for
(
var
j
=
0
;
j
<
this
.
_gonArr
.
length
;
j
++
)
{
var
gon
=
this
.
_gonArr
[
j
];
gon
.
destroy
();
}
this
.
_gonArr
=
[];
for
(
var
k
=
0
;
k
<
this
.
_billboardArr
.
length
;
k
++
)
{
var
billboard
=
this
.
_billboardArr
[
k
];
billboard
.
destroy
();
}
this
.
_billboardArr
=
[];
}
clearOne
()
{
if
(
!
this
.
handler
)
{
this
.
handler
=
new
Cesium
.
ScreenSpaceEventHandler
(
this
.
viewer
.
scene
.
canvas
);
}
var
that
=
this
;
this
.
handler
.
setInputAction
(
function
(
evt
)
{
var
pick
=
that
.
viewer
.
scene
.
pick
(
evt
.
position
);
if
(
Cesium
.
defined
(
pick
)
&&
pick
.
id
)
{
that
.
viewer
.
entities
.
remove
(
pick
.
id
);
that
.
handler
.
destroy
();
that
.
handler
=
null
;
}
},
Cesium
.
ScreenSpaceEventType
.
LEFT_CLICK
);
}
},
polygon
:
class
DrawPolygon
{
constructor
(
arg
)
{
this
.
objId
=
Number
((
new
Date
()).
getTime
()
+
""
+
Number
(
Math
.
random
()
*
1000
).
toFixed
(
0
));
this
.
viewer
=
arg
.
viewer
;
this
.
handler
=
new
Cesium
.
ScreenSpaceEventHandler
(
this
.
viewer
.
scene
.
canvas
);
this
.
_polygon
=
null
;
this
.
_polyline
=
null
;
this
.
_positions
=
[];
}
get
polygon
()
{
return
this
.
_polygon
;
}
get
positions
()
{
return
this
.
_positions
;
}
startCreate
()
{
var
$this
=
this
;
this
.
handler
.
setInputAction
(
function
(
evt
)
{
//单机开始绘制
var
cartesian
=
$this
.
getCatesian3FromPX
(
evt
.
position
);
if
(
$this
.
_positions
.
length
==
0
)
{
$this
.
_positions
.
push
(
cartesian
.
clone
());
}
$this
.
_positions
.
push
(
cartesian
);
},
Cesium
.
ScreenSpaceEventType
.
LEFT_CLICK
);
this
.
handler
.
setInputAction
(
function
(
evt
)
{
//移动时绘制面
if
(
$this
.
_positions
.
length
<
1
)
return
;
var
cartesian
=
$this
.
getCatesian3FromPX
(
evt
.
endPosition
);
if
(
$this
.
_positions
.
length
==
2
)
{
if
(
!
Cesium
.
defined
(
$this
.
_polyline
))
{
$this
.
_polyline
=
$this
.
createPolyline
();
}
}
if
(
$this
.
_positions
.
length
==
3
)
{
if
(
$this
.
_polyline
){
$this
.
viewer
.
entities
.
remove
(
$this
.
_polyline
);
$this
.
_polyline
=
null
;
}
if
(
!
Cesium
.
defined
(
$this
.
_polygon
))
{
$this
.
_polygon
=
$this
.
createPolygon
();
$this
.
_polygon
.
objId
=
$this
.
objId
;
}
}
$this
.
_positions
.
pop
();
$this
.
_positions
.
push
(
cartesian
);
},
Cesium
.
ScreenSpaceEventType
.
MOUSE_MOVE
);
this
.
handler
.
setInputAction
(
function
(
evt
)
{
if
(
!
$this
.
_polygon
)
return
;
var
cartesian
=
$this
.
getCatesian3FromPX
(
evt
.
position
);
$this
.
handler
.
destroy
();
$this
.
_positions
.
pop
();
$this
.
_positions
.
push
(
cartesian
);
},
Cesium
.
ScreenSpaceEventType
.
RIGHT_CLICK
);
}
createPolygon
(
obj
)
{
var
$this
=
this
;
return
this
.
viewer
.
entities
.
add
({
polygon
:
{
hierarchy
:
new
Cesium
.
CallbackProperty
(
function
()
{
return
new
Cesium
.
PolygonHierarchy
(
$this
.
_positions
);
},
false
),
clampToGround
:
true
,
show
:
true
,
fill
:
true
,
material
:
Cesium
.
Color
.
RED
,
width
:
3
,
outlineColor
:
Cesium
.
Color
.
BLACK
,
outlineWidth
:
1
,
outline
:
false
}
});
}
createPolyline
()
{
var
$this
=
this
;
return
this
.
viewer
.
entities
.
add
({
polyline
:
{
positions
:
new
Cesium
.
CallbackProperty
(
function
()
{
return
$this
.
_positions
},
false
),
clampToGround
:
true
,
material
:
Cesium
.
Color
.
YELLOW
,
width
:
3
}
});
}
getCatesian3FromPX
(
px
)
{
var
cartesian
;
var
ray
=
this
.
viewer
.
camera
.
getPickRay
(
px
);
if
(
!
ray
)
return
null
;
cartesian
=
this
.
viewer
.
scene
.
globe
.
pick
(
ray
,
this
.
viewer
.
scene
);
return
cartesian
;
}
destroy
()
{
if
(
this
.
handler
)
{
this
.
handler
.
destroy
();
this
.
handler
=
null
;
}
if
(
this
.
_polygon
)
{
this
.
viewer
.
entities
.
remove
(
this
.
_polygon
);
this
.
_polygon
=
null
;
}
if
(
this
.
_polyline
)
{
this
.
viewer
.
entities
.
remove
(
this
.
_polyline
);
this
.
_polyline
=
null
;
}
this
.
_positions
=
[];
}
},
point
:
class
DrawBillboard
{
constructor
(
arg
)
{
this
.
objId
=
Number
((
new
Date
()).
getTime
()
+
""
+
Number
(
Math
.
random
()
*
1000
).
toFixed
(
0
));
this
.
viewer
=
arg
.
viewer
;
this
.
handler
=
new
Cesium
.
ScreenSpaceEventHandler
(
this
.
viewer
.
scene
.
canvas
);
this
.
_position
=
null
;
this
.
_billboard
=
null
;
}
get
billboard
()
{
return
this
.
_billboard
;
}
get
position
()
{
return
this
.
_position
;
}
startCreate
()
{
var
$this
=
this
;
this
.
handler
.
setInputAction
(
function
(
evt
)
{
//单机开始绘制
var
cartesian
=
$this
.
getCatesian3FromPX
(
evt
.
position
);
if
(
!
cartesian
)
return
;
if
(
!
Cesium
.
defined
(
$this
.
_billboard
)){
$this
.
_billboard
=
$this
.
createBillboard
(
cartesian
);
$this
.
handler
.
destroy
();
}
},
Cesium
.
ScreenSpaceEventType
.
LEFT_CLICK
);
}
createBillboard
(
cartesian
)
{
var
billboard
=
this
.
viewer
.
entities
.
add
({
position
:
cartesian
,
billboard
:
{
image
:
'img/mark4.png'
,
scale
:
1
,
horizontalOrigin
:
Cesium
.
HorizontalOrigin
.
CENTER
,
verticalOrigin
:
Cesium
.
VerticalOrigin
.
BOTTOM
,
heightReference
:
Cesium
.
HeightReference
.
CLAMP_TO_GROUND
,
disableDepthTestDistance
:
Number
.
MAX_VALUE
}
});
billboard
.
objId
=
this
.
objId
;
return
billboard
;
}
destroy
()
{
if
(
this
.
handler
)
{
this
.
handler
.
destroy
();
this
.
handler
=
null
;
}
if
(
this
.
_billboard
)
{
this
.
viewer
.
entities
.
remove
(
this
.
_billboard
);
this
.
_billboard
=
null
;
}
this
.
_position
=
null
;
}
getCatesian3FromPX
(
px
)
{
var
cartesian
;
var
ray
=
this
.
viewer
.
camera
.
getPickRay
(
px
);
if
(
!
ray
)
return
null
;
cartesian
=
this
.
viewer
.
scene
.
globe
.
pick
(
ray
,
this
.
viewer
.
scene
);
return
cartesian
;
}
},
polyline
:
class
DrawPolyline
{
constructor
(
arg
)
{
//设置唯一id 备用
this
.
objId
=
Number
((
new
Date
()).
getTime
()
+
""
+
Number
(
Math
.
random
()
*
1000
).
toFixed
(
0
));
this
.
viewer
=
arg
.
viewer
;
//事件
this
.
handler
=
new
Cesium
.
ScreenSpaceEventHandler
(
this
.
viewer
.
scene
.
canvas
);
this
.
_polyline
=
null
;
this
.
_positions
=
[];
}
//获取线
get
line
(){
return
this
.
_polyline
;
}
//获取线的坐标数组
get
positions
(){
return
this
.
_positions
;
}
//开始创建
startCreate
()
{
var
$this
=
this
;
this
.
handler
.
setInputAction
(
function
(
evt
)
{
//单机开始绘制
//屏幕坐标转地形上坐标
var
cartesian
=
$this
.
getCatesian3FromPX
(
evt
.
position
);
if
(
$this
.
_positions
.
length
==
0
)
{
$this
.
_positions
.
push
(
cartesian
.
clone
());
}
$this
.
_positions
.
push
(
cartesian
);
},
Cesium
.
ScreenSpaceEventType
.
LEFT_CLICK
);
this
.
handler
.
setInputAction
(
function
(
evt
)
{
//移动时绘制线
if
(
$this
.
_positions
.
length
<
1
)
return
;
var
cartesian
=
$this
.
getCatesian3FromPX
(
evt
.
endPosition
);
if
(
$this
.
_positions
.
length
==
2
)
{
if
(
!
Cesium
.
defined
(
$this
.
_polyline
))
{
$this
.
_polyline
=
$this
.
createPolyline
();
}
}
if
(
$this
.
_polyline
)
{
$this
.
_positions
.
pop
();
$this
.
_positions
.
push
(
cartesian
);
}
},
Cesium
.
ScreenSpaceEventType
.
MOUSE_MOVE
);
this
.
handler
.
setInputAction
(
function
(
evt
)
{
//单机开始绘制
if
(
!
$this
.
_polyline
)
return
;
var
cartesian
=
$this
.
getCatesian3FromPX
(
evt
.
position
);
$this
.
handler
.
destroy
();
$this
.
_positions
.
pop
();
$this
.
_positions
.
push
(
cartesian
);
},
Cesium
.
ScreenSpaceEventType
.
RIGHT_CLICK
);
}
createPolyline
(
obj
)
{
if
(
!
obj
)
obj
=
{};
var
$this
=
this
;
var
polyline
=
this
.
viewer
.
entities
.
add
({
polyline
:
{
//使用cesium的peoperty
positions
:
new
Cesium
.
CallbackProperty
(
function
()
{
return
$this
.
_positions
},
false
),
show
:
true
,
material
:
Cesium
.
Color
.
YELLOW
,
width
:
3
,
clampToGround
:
true
}
});
polyline
.
objId
=
this
.
objId
;
return
polyline
;
}
destroy
()
{
this
.
linePointArr
=
[];
if
(
this
.
handler
)
{
this
.
handler
.
destroy
();
this
.
handler
=
null
;
}
if
(
this
.
_polyline
)
{
this
.
viewer
.
entities
.
remove
(
this
.
_polyline
);
this
.
_polyline
=
null
;
}
this
.
_positions
=
[];
}
getCatesian3FromPX
(
px
)
{
var
cartesian
;
var
ray
=
this
.
viewer
.
camera
.
getPickRay
(
px
);
if
(
!
ray
)
return
null
;
cartesian
=
this
.
viewer
.
scene
.
globe
.
pick
(
ray
,
this
.
viewer
.
scene
);
return
cartesian
;
}
}
}
}
Please
register
or
sign in
to post a comment