Browse Source

[完善]平面图开放gis地图标注

tangshan
邵佳豪 3 years ago
parent
commit
72518ce649
  1. 4
      src/app/ui/collection-tools-plan/addPlaneFigure.html
  2. 132
      src/app/ui/collection-tools-plan/collection-tools.component.ts
  3. 140
      src/app/ui/collection-tools-plan/leftFunctionalDomain.ts
  4. 2
      src/app/working-area/working-area.component.ts

4
src/app/ui/collection-tools-plan/addPlaneFigure.html

@ -12,9 +12,9 @@
</mat-form-field>
</div>
<!-- <div class="keyMargin">
<div class="keyMargin">
<a href="javascript:;" class="uploadBackGround" (click)='toGIS()' [ngClass]="{'uploadBackGroundSelected': selectedType == 'gis'}">导入GIS地图</a>
</div> -->
</div>
<div class="keyMargin">
<a href="javascript:;" class="uploadBackGround" [ngClass]="{'uploadBackGroundSelected': selectedType == 'image'}">

132
src/app/ui/collection-tools-plan/collection-tools.component.ts

@ -811,6 +811,7 @@ export class CollectionToolsPlanComponent implements OnInit {
//遍历 建筑数据 删除多余数据
let object = this.canvasData.originalcompanyBuildingData.data
let adjoinArr = [] //毗邻数组
console.log('平面图数据',this.sitePlanData)
Object.keys(object).forEach(key => {
let isExist = this.sitePlanData.find(item => { return item.id === object[key].FloorId })
if (isExist === undefined) {
@ -818,7 +819,7 @@ export class CollectionToolsPlanComponent implements OnInit {
delete object[key]
}
})
//遍历 建筑数据 删除多余数据
//遍历 楼层数据 删除多余数据
this.saveNum = []
let SitePlanData = JSON.parse(JSON.stringify(this.canvasData.originaleveryStoreyData));
for (const key in SitePlanData.data) {
@ -837,9 +838,9 @@ export class CollectionToolsPlanComponent implements OnInit {
CompanyData.data = JSON.stringify(CompanyData.data)
if (this.pattern) {//如果是基本信息编辑模式
console.log(1234, object)
for (const key in object) {
if (object[key].Name == "毗邻") {//如果是相同楼层,则筛选出毗邻
object[key].PropertyInfos.forEach(element => {
if (element.PropertyName == "方向") {
adjoinArr.push(element.PropertyValue)
@ -857,7 +858,7 @@ export class CollectionToolsPlanComponent implements OnInit {
} else {
//如果是单位 总平面图
if (this.checkedBuildingIndex == -1) {
//保存中心点和层级
if (this.isGis) {
let data = JSON.parse(JSON.stringify(this.selectingSitePlan))
data.zoomLevel = this.map.getZoom(),
@ -1014,129 +1015,6 @@ export class CollectionToolsPlanComponent implements OnInit {
})
} else { //如果是建筑
//建筑平面图数据
this.http.post("/api/BuildingAreaData", SitePlanData, {
params: {
companyId: this.params.companyId
}
}).subscribe(data => {
this.saveNum.push("1")
if (this.saveNum.length == 5) {
this.maskLayerService.sendMessage(false)
this.maskLayerService.sendMessage(false)
this.canvasData.isChange = false
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功', '确定', config);
this.tabbarService.sendMessage('changeScore');
}
}, err => {
this.maskLayerService.sendMessage(false)
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.canvasData.isChange = true
this.snackBar.open('平面图数据保存失败', '确定', config);
})
//建筑数据
this.http.post("/api/BuildingData", CompanyData, {
params: {
companyId: this.params.companyId
}
}).subscribe(data => {
this.saveNum.push("1")
if (this.saveNum.length == 5) {
this.maskLayerService.sendMessage(false)
this.canvasData.isChange = false
this.maskLayerService.sendMessage(false)
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功', '确定', config);
this.tabbarService.sendMessage('changeScore');
}
}, err => {
this.maskLayerService.sendMessage(false)
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.canvasData.isChange = true
this.snackBar.open('单位数据保存失败', '确定', config);
})
//批量保存建筑毗邻
let buildingAdjoins = this.canvasData.getBuildingAdjoinInfo()
this.http.post(`/api/BuildingAdjoins/Batch?companyId=${this.params.companyId}&buildingId=${this.canvasData.selectStorey.buildingId}`, buildingAdjoins).subscribe(data => {
this.saveNum.push("1")
if (this.saveNum.length == 5) {
this.maskLayerService.sendMessage(false)
this.canvasData.isChange = false
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功', '确定', config);
this.tabbarService.sendMessage('changeScore');
}
}, err => {
this.maskLayerService.sendMessage(false)
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.canvasData.isChange = true
if (err == 'infos 有重复方向!') {
this.snackBar.open('建筑毗邻同步失败,存在相同方向', '确定', config);
} else {
this.snackBar.open('建筑毗邻同步失败', '确定', config);
}
})
//批量保存建筑重点部位
let buildingImportantLocations = this.canvasData.getBuildingImportantLocations()
this.http.post(`/api/BuildingImportantLocations/Batch?companyId=${this.params.companyId}&buildingId=${this.canvasData.selectStorey.buildingId}`, buildingImportantLocations).subscribe(data => {
this.saveNum.push("1")
if (this.saveNum.length == 5) {
this.maskLayerService.sendMessage(false)
this.canvasData.isChange = false
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功', '确定', config);
this.tabbarService.sendMessage('changeScore');
}
}, err => {
this.maskLayerService.sendMessage(false)
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.canvasData.isChange = true
this.snackBar.open('建筑重点部位同步失败', '确定', config);
})
//批量保存建筑消防设施素材
let buildingFacilityAssets = this.canvasData.getAllBuildingFacilityAssetInfo()
this.http.post(`/api/BuildingFacilityAssets/Batch?companyId=${this.params.companyId}&buildingId=${this.canvasData.selectStorey.buildingId}`, buildingFacilityAssets).subscribe(data => {
this.saveNum.push("1")
if (this.saveNum.length == 5) {
this.maskLayerService.sendMessage(false)
this.canvasData.isChange = false
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('保存成功', '确定', config);
this.tabbarService.sendMessage('changeScore');
}
}, err => {
this.maskLayerService.sendMessage(false)
let config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.canvasData.isChange = true
this.snackBar.open('建筑消防设施素材同步失败', '确定', config);
})
}
}
}
@ -2344,7 +2222,9 @@ export class CollectionToolsPlanComponent implements OnInit {
//将图标数据添加
let itemData = JSON.parse(JSON.stringify(this.selectImage))
console.log(6666,this.selectingSitePlan)
itemData.id = id
itemData.FloorId = this.selectingSitePlan.id
itemData.point = { x: e.lnglat.lng, y: e.lnglat.lat }
itemData = this.canvasData.deserialize(JSON.stringify(itemData))//反序列化为大写
// 添加楼层数据

140
src/app/ui/collection-tools-plan/leftFunctionalDomain.ts

@ -14,24 +14,24 @@ import { MaskLayerService } from 'src/app/mask-layer.service';
export class leftFunctionalDomainComponentPlan implements OnInit {
constructor(
private http:HttpClient,
private http: HttpClient,
public dialog: MatDialog,
public snackBar: MatSnackBar,
public dialogRef: MatDialogRef<any>,
@Inject(MAT_DIALOG_DATA) public data,public canvasData: CanvasShareDataService,private maskLayerService:MaskLayerService,) { }
@Inject(MAT_DIALOG_DATA) public data, public canvasData: CanvasShareDataService, private maskLayerService: MaskLayerService,) { }
ngOnInit(): void {
}
params = {companyId: sessionStorage.getItem('companyId')}
checked:boolean = false;//是否为避难层
file:any = null; //上传的文件
params = { companyId: sessionStorage.getItem('companyId') }
checked: boolean = false;//是否为避难层
file: any = null; //上传的文件
//选择文件
selectFile (e) {
selectFile(e) {
if (e.target.files.length) {
let maxSize = 100*1024*1024 //100MB限制
let maxSize = 100 * 1024 * 1024 //100MB限制
if (e.target.files[0].size <= maxSize) {
this.file = e.target.files[0]
this.selectedType = 'image'
@ -39,15 +39,15 @@ export class leftFunctionalDomainComponentPlan implements OnInit {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('上传图片需小于100MB','确定',config);
this.snackBar.open('上传图片需小于100MB', '确定', config);
}
}
}
selectedType:String //新建平面图的底图类型 gis/image
selectedType: String //新建平面图的底图类型 gis/image
//导入GIS
toGIS () {
toGIS() {
this.selectedType = 'gis';
this.file = null;
(<HTMLInputElement>document.getElementById('uploadFile')).value = null; //清空input框缓存
@ -58,20 +58,20 @@ export class leftFunctionalDomainComponentPlan implements OnInit {
}
//提交表单创建平面图
onSubmit (e) {
onSubmit(e) {
if (this.file && this.selectedType == 'image') {
    if (this.file.name.toLowerCase().indexOf('png') == -1 && this.file.name.toLowerCase().indexOf('jpg') == -1 && this.file.name.toLowerCase().indexOf('jpeg') == -1) {
      const config = new MatSnackBarConfig();
      config.verticalPosition = 'top';
      config.duration = 3000
      this.snackBar.open('请上传图片后缀为png,jpg,jpeg的文件', '确定', config);
      return
  }
if (this.file.name.toLowerCase().indexOf('png') == -1 && this.file.name.toLowerCase().indexOf('jpg') == -1 && this.file.name.toLowerCase().indexOf('jpeg') == -1) {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请上传图片后缀为png,jpg,jpeg的文件', '确定', config);
return
}
this.maskLayerService.sendMessage(true)
if (this.file.size<=5*1024*1024) { //小于5MB
if (this.file.size <= 5 * 1024 * 1024) { //小于5MB
let formData = new FormData()
formData.append("file",this.file)
this.http.post(`/api/Objects/WebPlan2D/${sessionStorage.getItem('companyId')}`,formData).subscribe((data:any)=>{
formData.append("file", this.file)
this.http.post(`/api/Objects/WebPlan2D/${sessionStorage.getItem('companyId')}`, formData).subscribe((data: any) => {
let imgURL = '/api/Objects/WebPlan2D/' + data.objectName
let that = this
let img = new Image()
@ -82,15 +82,15 @@ export class leftFunctionalDomainComponentPlan implements OnInit {
companyId: sessionStorage.getItem('companyId'),
name: e.name,
order: that.data.order,
area:Number(e.area),
details:e.details,
area: Number(e.area),
details: e.details,
enabled: true,
modifiedTime: new Date(),
imageUrl: imgURL,
imageWidth: img.width,
imageHeight: img.height
}
that.http.post('/api/SitePlans',data).subscribe(data=>{
that.http.post('/api/SitePlans', data).subscribe(data => {
that.dialogRef.close('总平面图');
})
} else { //建筑 创建楼层/区域
@ -99,23 +99,23 @@ export class leftFunctionalDomainComponentPlan implements OnInit {
buildingId: that.data.Panel.id,
name: e.name,
order: that.data.order,
area:Number(e.area),
details:e.details,
area: Number(e.area),
details: e.details,
enabled: true,
modifiedTime: new Date(),
imageUrl: imgURL,
imageWidth: img.width,
imageHeight: img.height
}
that.http.post('/api/BuildingAreas',data,{params:that.params}).subscribe(data=>{
that.http.post('/api/BuildingAreas', data, { params: that.params }).subscribe(data => {
that.dialogRef.close('建筑');
})
}
}
}) //post
} else if (this.file.size>5*1024*1024 && this.file.size<=100*1024*1024) { //大于5MB
let upload = this.canvasData.sectionUpload(sessionStorage.getItem('companyId'),this.file)
upload.then(res=>{
} else if (this.file.size > 5 * 1024 * 1024 && this.file.size <= 100 * 1024 * 1024) { //大于5MB
let upload = this.canvasData.sectionUpload(sessionStorage.getItem('companyId'), this.file)
upload.then(res => {
let imgURL = '/api/Objects/PlanPlatform/' + res
let that = this
let img = new Image()
@ -126,15 +126,15 @@ export class leftFunctionalDomainComponentPlan implements OnInit {
companyId: sessionStorage.getItem('companyId'),
name: e.name,
order: that.data.order,
area:Number(e.area),
details:e.details,
area: Number(e.area),
details: e.details,
enabled: true,
modifiedTime: new Date(),
imageUrl: imgURL,
imageWidth: img.width,
imageHeight: img.height
}
that.http.post('/api/SitePlans',data).subscribe(data=>{
that.http.post('/api/SitePlans', data).subscribe(data => {
that.dialogRef.close('总平面图');
})
} else { //建筑 创建楼层/区域
@ -143,43 +143,43 @@ export class leftFunctionalDomainComponentPlan implements OnInit {
buildingId: that.data.Panel.id,
name: e.name,
order: that.data.order,
area:Number(e.area),
details:e.details,
area: Number(e.area),
details: e.details,
enabled: true,
modifiedTime: new Date(),
imageUrl: imgURL,
imageWidth: img.width,
imageHeight: img.height
}
that.http.post('/api/BuildingAreas',data,{params:that.params}).subscribe(data=>{
that.http.post('/api/BuildingAreas', data, { params: that.params }).subscribe(data => {
that.dialogRef.close('建筑');
})
}
}
})
}
} else if(this.selectedType == 'gis'){
} else if (this.selectedType == 'gis') {
let data = {
companyId: sessionStorage.getItem('companyId'),
name: e.name,
order: this.data.order,
area:Number(e.area),
details:e.details,
area: Number(e.area),
details: e.details,
enabled: true,
modifiedTime: new Date(),
imageUrl: 'null',
imageWidth: 0,
imageHeight: 0,
isGis:true
isGis: true
}
this.http.post('/api/SitePlans',data).subscribe(data=>{
this.http.post('/api/SitePlans', data).subscribe(data => {
this.dialogRef.close('总平面图');
})
} else {
const config = new MatSnackBarConfig();
config.verticalPosition = 'top';
config.duration = 3000
this.snackBar.open('请上传图片','确定',config);
this.snackBar.open('请上传图片', '确定', config);
}
}
@ -195,7 +195,7 @@ export class leftFunctionalDomainComponentPlan implements OnInit {
})
export class editPlaneFigureComponentPlan implements OnInit {
constructor(private http:HttpClient,public dialog: MatDialog,public snackBar: MatSnackBar,public dialogRef: MatDialogRef<any>,@Inject(MAT_DIALOG_DATA) public data,public canvasData: CanvasShareDataService,private eventManager: EventManager,) { }
constructor(private http: HttpClient, public dialog: MatDialog, public snackBar: MatSnackBar, public dialogRef: MatDialogRef<any>, @Inject(MAT_DIALOG_DATA) public data, public canvasData: CanvasShareDataService, private eventManager: EventManager,) { }
ngOnInit(): void {
console.log(this.data.isGis)
@ -207,17 +207,17 @@ export class editPlaneFigureComponentPlan implements OnInit {
this.imgHeight = this.data.buildingData.imageHeight || 0
this.oldWidth = JSON.parse(JSON.stringify(this.data.buildingData.imageWidth || 0))
this.oldHeight = JSON.parse(JSON.stringify(this.data.buildingData.imageHeight || 0))
if (this.imgWidth==0 && this.imgHeight==0 && this.data.buildingData.imageUrl) {
if (this.imgWidth == 0 && this.imgHeight == 0 && this.data.buildingData.imageUrl) {
let that = this
let img = new Image()
img.src = this.data.buildingData.imageUrl
img.onload = function () {
that.imgWidth = img.width
that.imgHeight = img.height
that.imgScale = Number((that.imgWidth/that.imgHeight))
that.imgScale = Number((that.imgWidth / that.imgHeight))
}
} else {
this.imgScale = Number((this.imgWidth/this.imgHeight))
this.imgScale = Number((this.imgWidth / this.imgHeight))
}
this.eventManager.addGlobalEventListener('window', 'keydown', (event: any) => {
@ -227,22 +227,22 @@ export class editPlaneFigureComponentPlan implements OnInit {
});
}
oldWidth:number; //原图片宽
oldHeight:number; //原图片高
oldWidth: number; //原图片宽
oldHeight: number; //原图片高
params = {companyId: sessionStorage.getItem('companyId')}
name:any; //name
checked:boolean = false;//是否为避难层
area:number; //面积
details:string; //详情
params = { companyId: sessionStorage.getItem('companyId') }
name: any; //name
checked: boolean = false;//是否为避难层
area: number; //面积
details: string; //详情
imgWidth:number; //图片宽度
imgHeight:number; //图片高度
isItEqual:boolean = true; //是否等比
imgScale:number; //图片 宽高比例
imgWidth: number; //图片宽度
imgHeight: number; //图片高度
isItEqual: boolean = true; //是否等比
imgScale: number; //图片 宽高比例
//图片 宽高变化时
inputChange (e) {
inputChange(e) {
if (this.isItEqual) {
if (e == 0) { //需要改高度
this.imgHeight = Math.round(this.imgWidth / this.imgScale)
@ -260,12 +260,12 @@ export class editPlaneFigureComponentPlan implements OnInit {
}
//重新计算 宽高比例
setImgScale (e) {
e.checked? this.imgScale = Number((this.imgWidth/this.imgHeight)) : null
setImgScale(e) {
e.checked ? this.imgScale = Number((this.imgWidth / this.imgHeight)) : null
}
//关闭
close () {
close() {
if (this.oldWidth === this.imgWidth && this.oldHeight === this.imgHeight) {
this.dialogRef.close()
} else {
@ -276,7 +276,7 @@ export class editPlaneFigureComponentPlan implements OnInit {
}
//提交表单修改平面图
onSubmit (e) {
onSubmit(e) {
if (!this.data.isBuilding) { //总平面图 修改平面图
let data = {
companyId: sessionStorage.getItem('companyId'),
@ -288,15 +288,15 @@ export class editPlaneFigureComponentPlan implements OnInit {
imageHeight: this.imgHeight,
imageAngle: this.data.buildingData.imageAngle,
order: this.data.buildingData.order,
area:e.area,
details:e.details,
area: e.area,
details: e.details,
enabled: this.data.buildingData.enabled,
modifiedTime: new Date(),
isGis: this.data.isGis,
zoomLevel:this.data.buildingData.zoomLevel,
defaultCenter:this.data.buildingData.defaultCenter
zoomLevel: this.data.buildingData.zoomLevel,
defaultCenter: this.data.buildingData.defaultCenter
}
this.http.put(`/api/SitePlans/${this.data.buildingData.id}`,data).subscribe(data=>{
this.http.put(`/api/SitePlans/${this.data.buildingData.id}`, data).subscribe(data => {
this.dialogRef.close('总平面图');
})
} else { //建筑 修改楼层/区域
@ -311,12 +311,12 @@ export class editPlaneFigureComponentPlan implements OnInit {
imageHeight: this.imgHeight,
imageAngle: this.data.buildingData.imageAngle,
order: this.data.buildingData.order,
area:e.area,
details:e.details,
area: e.area,
details: e.details,
enabled: this.data.buildingData.enabled,
modifiedTime: new Date(),
}
this.http.put(`/api/BuildingAreas/${this.data.buildingData.id}`,data,{params:this.params}).subscribe(data=>{
this.http.put(`/api/BuildingAreas/${this.data.buildingData.id}`, data, { params: this.params }).subscribe(data => {
this.dialogRef.close('建筑');
})
}

2
src/app/working-area/working-area.component.ts

@ -1102,7 +1102,7 @@ export class WorkingAreaComponent extends EventEmitter implements OnInit, AfterV
if (imageAngle === undefined || imageAngle === null) {
imageAngle = 0;
}
this.backgroundImage.scale.set(1);
this.backgroundImage.scale ? this.backgroundImage.scale.set(1) : null;
// this.backgroundImage.pivot.set(0);
if (imageUrl === undefined || imageUrl === null || imageUrl === '') {
this.backgroundImage.texture = this.backgroundTexture;

Loading…
Cancel
Save