import { TUVector3 } from 'tumap'; //TUVector3, TUVector2, TURotator
|
import setting from './setting';
|
import { post, getUrl, gcj02ToWgs84 } from './api';
|
|
let arr = [];
|
|
let map = null;
|
|
let timer = null;
|
|
let lastOUt = null;
|
|
let lastIndex = null;
|
|
let isLoaded = false;
|
|
// 初始化
|
export function init (Map) {
|
map = Map;
|
}
|
|
// 查询楼宇点
|
export async function queryLY (industry_name, build_id) {
|
cls();
|
|
let rs = await post(setting.lyUrl, { industry_name: industry_name });
|
console.log('queryLY => ', rs);
|
|
if (!rs || rs.status !== 200 || !rs.data || !rs.data.length) return;
|
|
pretreat(rs.data);
|
loadLY(rs.data);
|
isLoaded = true;
|
locateLY(build_id);
|
}
|
|
function pretreat (data) {
|
let i = 0;
|
while (i < data.length) {
|
var d = data[i];
|
if (!d.lng || isNaN(d.lng) || !d.lat || isNaN(d.lat)) {
|
data.splice(i, 1);
|
continue;
|
};
|
|
d.lng = parseFloat(d.lng);
|
d.lat = parseFloat(d.lat);
|
i++;
|
}
|
}
|
|
// 清空
|
export function cls () {
|
map.clearAllCovering();
|
lastIndex = null;
|
lastOUt = null;
|
arr.length = 0;
|
}
|
|
// 加载楼宇
|
export function loadLY (data) {
|
for (let i = 0, c = data.length; i < c; i++) {
|
let d = data[i];
|
let p = getLocalCoord(d.lng, d.lat);
|
|
let params = createPosition(p.x, p.y, d, false);
|
map.execute('grapi', 'Creat3DPOI', params, function (e) {
|
locateLY(e.args.id);
|
});
|
arr.push(params);
|
}
|
}
|
|
function getLocalCoord (x, y) {
|
let arr = gcj02ToWgs84(x, y);
|
//console.log([x, y], arr);
|
|
//return map.transformWGS84ToLocal(x + setting.xOffset, y + setting.yOffset);
|
return map.transformWGS84ToLocal((arr[0] - 26.897633220927) * 1.3, (arr[1] - 9.16663529527973) * 1.3);
|
}
|
|
// 创建点位方法
|
export function createPosition (ue4x, ue4y, d, flag) {
|
let url = getUrl() + (flag ? 'UE/img/dot.png' : 'UE/img/dot1.png');
|
let win = getAlertWin(d);
|
let pp = setting.popups[6];
|
|
return {
|
id: d.id, // poi点的id
|
name: "LY",
|
URL: win.url,//弹窗地址
|
location: new TUVector3(ue4x, ue4y, 15000), // poi点位置
|
icon: url, // icon图标
|
size: pp.size, // icon的大小,1是正常大小
|
labeltext: d.name, // 标签文字
|
color: { r: 255, g: 255, b: 255, a: 1 }, // label文字颜色
|
labelsize: 20, // label大小,默认为1
|
labelHigh: 1000, // label高度
|
wide: pp.height, // 弹窗宽度
|
high: pp.width, // 弹窗高度
|
horizontal: pp.xOffset, // 水平偏移
|
vertical: pp.yOffset, // 垂直偏移
|
data: d
|
}
|
}
|
|
// 获取弹出窗口
|
export function getAlertWin (d) {
|
//let width = 374, height = 256, imgWidth = 68; //, imgHeight = 60;
|
return {
|
//size: new TUVector2(width, height), // 弹窗大小
|
//offset: new TUVector2(-imgWidth + 5, 5 + 12 - height / 2.3), // 弹窗位置,右:x正,下:y正
|
url: getUrl() +
|
'popupThree.html?name=' + getVal(d.name) +
|
'&mode=' + getVal(d.mode_of_operation) +
|
'&unit=' + getVal(d.development_unit) +
|
'&output=' + getVal(d.industrial_output) +
|
'&usage=' + getVal(d.land_usage) +
|
'&rate=' + getVal(d.vacancy_rate) +
|
'&num=' + getVal(d.enterprise_num) // 弹窗地址
|
};
|
}
|
|
function getVal (val) {
|
return val == null ? "" : val;
|
}
|
|
// 定位楼宇
|
export function locateLY (id) {
|
let idx = findPOI(id);
|
if (idx === -1 || lastIndex === idx) return;
|
|
//map.focusOn(new TUVector3(arr[idx].ue4x + setting.winXOffset, arr[idx].ue4y, setting.poiHeight), new TURotator(0, -53, 0));
|
map.flyTo(arr[idx].location.x + setting.winXOffset, arr[idx].location.y, 0, 0, -42, 0, 75000, null, 3);
|
|
changeImg(id);
|
}
|
|
// 切换图片
|
export function changeImg (id) {
|
let idx = findPOI(id);
|
|
if (lastIndex != null) {
|
changePOI(lastIndex, false);
|
lastIndex = null;
|
}
|
|
lastIndex = idx;
|
changePOI(idx, true);
|
|
// map.execute('grapi', 'Show2dPOI', { visibility: true, id: id }, function (e) { });
|
map.execute('grapi', 'ShowLabel', { id: id, visibility: false }, null); // 隐藏Label
|
map.execute('grapi', 'ShowPopup', { id: id, visibility: true }, null); // 显示Popup
|
}
|
|
// 查找POI
|
export function findPOI (id) {
|
for (let i = 0, c = arr.length; i < c; i++) {
|
if (arr[i].data.id === id) return i;
|
}
|
|
return -1;
|
}
|
|
// 切换POI
|
export function changePOI (index, flag) {
|
let poi = arr[index];
|
console.log("changePOI =>", poi);
|
|
let bb = createPosition(poi.location.x, poi.location.y, poi.data, flag);
|
map.execute('grapi', 'Remove3DPOI', { id: poi.id }, null);
|
map.execute('grapi', 'Creat3DPOI', bb, function (e) {
|
locateLY(e.args.id);
|
sendOut(e);
|
});
|
|
arr.splice(index, 1, bb);
|
}
|
|
// 发送数据
|
function sendOut (e) {
|
let data = { type: "build.out", name: e.args.data.industry_name, id: e.args.id };
|
let json = JSON.stringify(data);
|
if (lastOUt === json) return;
|
|
console.log('发送消息 =>', e);
|
window.dataPool.dataPool.UE_OUT = data;
|
}
|
|
// 是/否加载
|
export function IsLoaded () {
|
if (isLoaded) {
|
isLoaded = false;
|
return true;
|
}
|
|
return isLoaded;
|
}
|
|
// 打印信息
|
export function print () {
|
console.log("building.js", arr, timer, lastIndex, getUrl());
|
}
|
|
// dataPool.dataPool.UE_IN={type:'build',name:'新一代信息技术产业',id:284}
|
// 测试楼宇:UE.testLY(),UE.locateLY(287),UE.queryLY("新一代信息技术产业", 284)
|
export function testLY () {
|
cls();
|
loadLY(setting.lvJson);
|
isLoaded = true;
|
locateLY(264);
|
}
|
|
export default {
|
arr, map, timer, lastIndex, isLoaded,
|
init, queryLY, cls, loadLY, getAlertWin,
|
locateLY, changeImg, findPOI, changePOI, IsLoaded, print, testLY
|
}
|