bmh_cesium/public/widgets/addmarker/widget.js
2025-03-10 07:23:50 +08:00

372 lines
13 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//模块:
var addmarkerWidget = xjsdk.widget.bindClass(xjsdk.widget.BaseWidget.extend({
viewer: null, //框架会自动对map赋值
options: {
resources: ['map.css'],
//弹窗
view: {
type: "window",
url: "view.html",
windowOptions: {
width: 300,
height: 400
}
}
},
drawControl: null,
//初始化[仅执行1次]
create: function () {
this.drawControl = new xjsdk.Draw(this.viewer, {
hasEdit: false,
});
//事件监听
var that = this;
this.drawControl.on(xjsdk.draw.event.DrawCreated, function (e) {
var entity = e.entity;
that.bindMarkerEx(entity);
});
this.drawControl.on(xjsdk.draw.event.EditMovePoint, function (e) {//编辑修改了点
var entity = e.entity;
that.saveEntity(entity);
});
//添加到图层控制
if (window.bindToLayerControl) {
this.layerWork = bindToLayerControl({
pid: 0,
name: '我的标记',
visible: true,
onAdd: function () {//显示回调
that.drawControl.setVisible(true);
},
onRemove: function () {//隐藏回调
that.drawControl.setVisible(false);
},
onCenterAt: function (duration) {//定位回调
var arr = that.drawControl.getEntitys();
that.viewer.flyTo(arr, { duration: duration });
},
});
}
this.getList();
},
viewWindow: null,
//每个窗口创建完成后调用
winCreateOK: function (opt, result) {
this.viewWindow = result;
},
//激活插件
activate: function () {
this.hasEdit(true);
},
//释放插件
disable: function () {
this.viewWindow = null;
this.stopDraw();
this.hasEdit(false);
// //从图层控制中 移除
// if(this.layerWork){
// unbindLayerControl(this.layerWork);
// }
},
stopDraw: function () {
this.drawControl.stopDraw();
},
drawPoint: function () {
this.stopDraw();
this.drawControl.startDraw({
type: "billboard",
style: {
scale: 1,
image: this.path + "img/marker.png"
}
});
},
editable: false,
hasEdit: function (val) {
this.editable = val;
this.drawControl.hasEdit(val);
},
bindMarkerEx: function (entity) {
if (entity == null || entity.position == null) return;
entity.attribute.attr = entity.attribute.attr || {};
entity.attribute.attr.id = "0";//(new Date()).format("yyyyMMddHHmmss");
entity.attribute.attr.name = "我的标记";
entity.label = this.getLabelStyle(entity.attribute.attr.name);
entity.billboard.scaleByDistance = new Cesium.NearFarScalar(1.5e2, 1, 8.0e6, 0.2);
var that = this;
this.saveEntity(entity, function () {
entity.popup = {
html: function (entity) {
return that.getMarkerInhtml(entity.attribute.attr);
},
anchor: [0, -35]
};
that.viewer.xjsdk.popup.show(entity, entity.position._value);
});
},
//========================
saveEditFeature: function (id) {
var entity = this.drawControl.getEntityById(id);
entity.attribute.attr = entity.attribute.attr || {};
entity.attribute.attr.name = $.trim($("#addmarker_attr_name").val());
entity.attribute.attr.remark = $.trim($("#addmarker_attr_remark").val());
this.viewer.xjsdk.popup.close();
entity.label.text = entity.attribute.attr.name;
this.saveEntity(entity);
},
deleteEditFeature: function (id) {
var entity = this.drawControl.getEntityById(id);
this.drawControl.deleteEntity(entity);
this.viewer.xjsdk.popup.close();
this.viewWindow.refMarkerList();
//服务端存储
if (window.hasServer) {
sendAjax({
url: 'map/mark/' + id,
type: "delete",
success: function (data) {
}
});
}
else {//浏览器本地存储
var storagedata = this.getJsonData();
haoutil.storage.add(this.storageName, storagedata);
}
},
getMarkerDataList: function () {
var arr = [];
var arrEntity = this.drawControl.getEntitys();
for (var i = 0, len = arrEntity.length; i < len; i++) {
if (!arrEntity[i].attribute.attr.name) arrEntity[i].attribute.attr.name = "我的标记";
arr.push(arrEntity[i].attribute.attr);
}
return arr;
},
getMarkerInhtml: function (attr) {
var inhtml;
if (this.editable) {
if (!attr.name || attr.name == "我的标记")
attr.name = "";
if (!attr.remark)
attr.remark = "";
if (!attr.id)
attr.id = "0";
inhtml = '<div class="addmarker-popup-titile">添加标记</div><div class="addmarker-popup-content" ><form >' +
'<div class="form-group"> <label for="addmarker_attr_name">名称</label><input type="text" id="addmarker_attr_name" class="form-control" value="' + attr.name + '" placeholder="请输入标记名称" /> </div>' +
'<div class="form-group"> <label for="addmarker_attr_remark">备注</label><textarea id="addmarker_attr_remark" class="form-control" rows="3" style="resize: none;" placeholder="请输入备注(可选填)" >' + attr.remark + '</textarea></div>' +
'<div class="form-group" style="text-align: center;"><input type="button" class="btn btn-primary btn-sm" value="保存" onclick="addmarkerWidget.saveEditFeature(' + attr.id + ')" />' +
'&nbsp;&nbsp;<input type="button" class="btn btn-danger btn-sm" value="删除" onclick="addmarkerWidget.deleteEditFeature(' + attr.id + ')" /></div>' +
'</form></div>';
} else {
inhtml = '<div class="addmarker-popup-titile">我的标记</div><div class="addmarker-popup-content" ><form >' +
'<div class="form-group"><label>名称</label>' + attr.name + '</div>' +
'<div class="form-group"><label>备注</label>' + attr.remark + '</div>' +
'</form></div>';
}
return inhtml;
},
centerAt: function (id) {
var entity = this.drawControl.getEntityById(id);
if (entity) {
//参数解释点数据radius控制视距距离
this.viewer.xjsdk.flyTo(entity, { radius: 2500 });
}
},
deleteAll: function () {
this.drawControl.deleteAll();
if (this.viewWindow)
this.viewWindow.refMarkerList();
//服务端存储
if (window.hasServer && userId) {
sendAjax({
url: 'map/mark/del/' + userId,
type: "delete",
dataType: "json",
success: function (data) {
}
});
}
else {//浏览器本地存储
//本地存储
haoutil.storage.del(this.storageName);
}
},
label_font_style: "normal small-caps normal 19px 楷体",
getLabelStyle: function (name) {
return new Cesium.LabelGraphics({
text: name == "" ? "我的标记" : name,
font: this.label_font_style,
style: Cesium.LabelStyle.FILL_AND_OUTLINE,
outlineColor: Cesium.Color.BLACK,
outlineWidth: 3,
horizontalOrigin: Cesium.HorizontalOrigin.CENTER,
verticalOrigin: Cesium.VerticalOrigin.BOTTOM,
pixelOffset: new Cesium.Cartesian2(0, -50),
distanceDisplayCondition: new Cesium.DistanceDisplayCondition(0.0, 200000)
});
},
getJsonData: function () {
var arr = [];
var arrEntity = this.drawControl.getEntitys();
for (var i = 0, len = arrEntity.length; i < len; i++) {
var entity = arrEntity[i];
var attr = entity.attribute.attr;
var coord = xjsdk.draw.attr.billboard.getCoordinates(entity);
var item = {
id: attr.id,
name: attr.name,
remark: attr.remark,
x: coord[0][0],
y: coord[0][1],
z: coord[0][2]
};
arr.push(item);
}
return JSON.stringify(arr);
},
jsonToLayer: function (arr, isclear) {
if (arr == null || arr.length == 0) return;
if (isclear) {
this.drawControl.deleteAll();
}
var that = this;
var arrEntity = [];
for (var i = 0; i < arr.length; i++) {
var item = arr[i];
if (!item.x || !item.y) continue;
var attribute = {
type: "billboard",
attr: {
id: item.id || "",
name: item.name || "",
remark: item.remark || ""
},
style: {
scale: 1,
image: this.path + "img/marker.png"
}
};
if (!isclear) { //叠加时清除已有同id数据
var entity = this.drawControl.getEntityById(attribute.attr.id);
this.drawControl.deleteEntity(entity);
}
var position = Cesium.Cartesian3.fromDegrees(item.x, item.y, item.z || 0.0);
var entity = this.drawControl.attributeToEntity(attribute, position);
entity.popup = {
html: function (entity) {
return that.getMarkerInhtml(entity.attribute.attr);
},
anchor: [0, -35]
};
entity.billboard.scaleByDistance = new Cesium.NearFarScalar(1.5e2, 1, 8.0e6, 0.2);
entity.label = this.getLabelStyle(attribute.attr.name);
arrEntity.push(entity);
}
this.viewer.flyTo(arrEntity, { duration: 2.0 });
if (this.viewWindow)
this.viewWindow.refMarkerList();
},
storageName: "xjsdkgis_addmarker",
getList: function () {
var that = this;
//读取服务端存储
if (window.hasServer) {
var that = this;
sendAjax({
url: 'map/mark/list',
type: 'get',
success: function (arr) {
that.jsonToLayer(arr, true);
}
});
}
else {//读取本地存储
var laststorage = haoutil.storage.get(this.storageName); //读取localStorage值
if (laststorage != null && laststorage != 'null') {
var arr = JSON.parse(laststorage);
this.jsonToLayer(arr, true);
}
}
},
saveEntity: function (entity, endfun) {
//服务端存储
if (window.hasServer) {
var attr = entity.attribute.attr;
var coord = xjsdk.draw.attr.billboard.getCoordinates(entity);
var that = this;
if (attr.id == "0") {//新增
sendAjax({
url: 'map/mark/add',
data: JSON.stringify({
name: attr.name,
remark: attr.remark,
x: coord[0][0],
y: coord[0][1],
z: coord[0][2]
}),
type: 'post',
contentType: "application/json",
success: function (data) {
entity.attribute.attr.id = data.id;
if (endfun) endfun();
that.viewWindow.refMarkerList();
}
});
} else {//修改
sendAjax({
url: 'map/mark/update',
data: JSON.stringify({
id: attr.id,
name: attr.name,
remark: attr.remark,
x: coord[0][0],
y: coord[0][1],
z: coord[0][2],
}),
type: 'post',
contentType: "application/json",
success: function (data) {
if (endfun) endfun();
that.viewWindow.refMarkerList();
}
});
}
}
else {//浏览器本地存储
if (entity.attribute.attr.id == "0")
entity.attribute.attr.id = (new Date()).format("yyyyMMddHHmmss");
var storagedata = this.getJsonData();
haoutil.storage.add(this.storageName, storagedata);
if (endfun) endfun();
this.viewWindow.refMarkerList();
}
},
}));