merge
parent
a41dd51128
commit
dd48f7bec9
|
|
@ -176,6 +176,11 @@
|
||||||
import Water from './source/water.vue';
|
import Water from './source/water.vue';
|
||||||
import Goods from './source/goods.vue';
|
import Goods from './source/goods.vue';
|
||||||
import Barrack from './source/barrack.vue';
|
import Barrack from './source/barrack.vue';
|
||||||
|
import axios from 'axios';
|
||||||
|
import * as turf from '@turf/turf';
|
||||||
|
import {getPointNearByPoints,arrayToPointGeoJSON,geojsonPointToArray} from './ts/GeoTools'
|
||||||
|
import { getAppEnvConfig } from '@/utils/env';
|
||||||
|
let { VITE_GLOB_API_URL } = getAppEnvConfig();
|
||||||
|
|
||||||
const props = defineProps({
|
const props = defineProps({
|
||||||
chartConfig: {
|
chartConfig: {
|
||||||
|
|
@ -758,10 +763,98 @@
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 线索信息
|
||||||
|
const clueInfo = ref({});
|
||||||
|
|
||||||
|
// 获取全部水源数据
|
||||||
|
const waterSources = ref()
|
||||||
|
const waterList = ref();
|
||||||
|
async function handlerLoadWaterData(){
|
||||||
|
axios.get("http://221.2.83.254:9007/geoserver/ksp/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=ksp%3Ananbeibushluiyuanhebing&maxFeatures=50000&outputFormat=application%2Fjson").then(res=>{
|
||||||
|
waterSources.value = res.data;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取全部物资数据
|
||||||
|
const Sources = ref();
|
||||||
|
const goodsList = ref();
|
||||||
|
async function handlerLoadGoodsData(){
|
||||||
|
|
||||||
|
let querys = {
|
||||||
|
name:null,
|
||||||
|
areaname:"feixian"
|
||||||
|
}
|
||||||
|
|
||||||
|
axios({
|
||||||
|
method: "get",
|
||||||
|
url: VITE_GLOB_API_URL + '/api/FireManagement/Loadwuzichubei',
|
||||||
|
data: querys,
|
||||||
|
headers: {
|
||||||
|
'X-Token': localStorage.getItem("X-Token")
|
||||||
|
}
|
||||||
|
}).then(res=>{
|
||||||
|
console.log(res);
|
||||||
|
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取全部营房数据
|
||||||
|
const barrackSources = ref();
|
||||||
|
const barrackList = ref();
|
||||||
|
async function handlerLoadbarrackData(){
|
||||||
|
let querys = {
|
||||||
|
name:null,
|
||||||
|
areaname:"feixian"
|
||||||
|
}
|
||||||
|
|
||||||
|
axios({
|
||||||
|
method: "get",
|
||||||
|
url: VITE_GLOB_API_URL + '/api/FireManagement/GetAllYingFang',
|
||||||
|
data: querys,
|
||||||
|
headers: {
|
||||||
|
'X-Token': localStorage.getItem("X-Token")
|
||||||
|
}
|
||||||
|
}).then(res=>{
|
||||||
|
console.log(res.data.result);
|
||||||
|
debugger;
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理周边数据
|
||||||
|
async function handlerGetNearByWater(){
|
||||||
|
let cluePoint = turf.point([Number(clueInfo.value?.lng),Number(clueInfo.value?.lat)]);
|
||||||
|
let radius = option.dataStyle.distanceradio*1000;
|
||||||
|
const clueBuffer = turf.buffer(cluePoint, radius, { units: "meters" });
|
||||||
|
let result = turf.pointsWithinPolygon(waterSources.value, clueBuffer);
|
||||||
|
waterList.value = result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
onMounted(() => {
|
onMounted(() => {
|
||||||
|
|
||||||
|
// 初始化组件获取数据
|
||||||
|
handlerLoadWaterData();
|
||||||
|
handlerLoadGoodsData();
|
||||||
|
handlerLoadbarrackData();
|
||||||
|
|
||||||
|
|
||||||
// 组件通信
|
// 组件通信
|
||||||
const sql = props.chartConfig.request?.requestSQLContent?.sql;
|
const sql = props.chartConfig.request?.requestSQLContent?.sql;
|
||||||
EventBus.on(props.chartConfig.id + 'dataupdate', (data) => {
|
EventBus.on(props.chartConfig.id + 'dataupdate', (data) => {
|
||||||
|
|
||||||
|
clueInfo.value = data;
|
||||||
|
|
||||||
|
// 处理周边水源
|
||||||
|
handlerGetNearByWater();
|
||||||
|
|
||||||
|
|
||||||
// 火情终点
|
// 火情终点
|
||||||
endCoor = [data.lng, data.lat];
|
endCoor = [data.lng, data.lat];
|
||||||
props.chartConfig.request.requestSQLContent.sql = replaceSqlParams(sql, { Id: data.id });
|
props.chartConfig.request.requestSQLContent.sql = replaceSqlParams(sql, { Id: data.id });
|
||||||
|
|
@ -769,6 +862,8 @@
|
||||||
useChartDataFetch(props.chartConfig, useChartEditStore, (resData: any[]) => {
|
useChartDataFetch(props.chartConfig, useChartEditStore, (resData: any[]) => {
|
||||||
option.dataset = resData;
|
option.dataset = resData;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,94 @@
|
||||||
|
import * as turf from "@turf/turf";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 获取周边数据指定范围内的数据
|
||||||
|
* @param targetPoint : 目标点 [118.4234,34.483083]
|
||||||
|
* @param sourcePoints : 全部数据geojson
|
||||||
|
* @param distance : 范围(米)1000
|
||||||
|
* @result 范围内geojson
|
||||||
|
**/
|
||||||
|
export const getPointNearByPoints = (targetPoint,sourcePoints,distance) => {
|
||||||
|
try{
|
||||||
|
// 处理目标点
|
||||||
|
let point = turf.point([Number(targetPoint[0]),Number(targetPoint[1])]);
|
||||||
|
// 生成缓冲区
|
||||||
|
let buffer = turf.buffer(point, distance, { units: "meters" });
|
||||||
|
// 获取缓冲区范围内的点
|
||||||
|
let result = turf.pointsWithinPolygon(sourcePoints, buffer);
|
||||||
|
return result;
|
||||||
|
}catch(e){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将任意数组转换为 GeoJSON FeatureCollection(Point)
|
||||||
|
* @param {Array} list 原始数据数组
|
||||||
|
* @param {Object} options 配置项
|
||||||
|
* @param {String} options.lngKey 经度字段名(默认 "lng")
|
||||||
|
* @param {String} options.latKey 纬度字段名(默认 "lat")
|
||||||
|
* @returns {Object} GeoJSON FeatureCollection
|
||||||
|
*/
|
||||||
|
export const arrayToPointGeoJSON = (list, options = {lngKey:"lng",latKey:"lat"}) => {
|
||||||
|
const { lngKey = "lng",latKey = "lat"} = options;
|
||||||
|
return {
|
||||||
|
type: "FeatureCollection",
|
||||||
|
features: list.filter(item => item[lngKey] != null && item[latKey] != null).map(item => ({
|
||||||
|
type: "Feature",
|
||||||
|
geometry: {
|
||||||
|
type: "Point",
|
||||||
|
coordinates: [
|
||||||
|
Number(item[lngKey]),
|
||||||
|
Number(item[latKey])
|
||||||
|
]
|
||||||
|
},
|
||||||
|
properties: {
|
||||||
|
...item
|
||||||
|
}
|
||||||
|
}))
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 将 GeoJSON Point FeatureCollection 转换为对象数组
|
||||||
|
* @param {Object} geojson GeoJSON FeatureCollection
|
||||||
|
* @param {Object} options 配置项
|
||||||
|
* @param {String} options.lngKey 输出经度字段名(默认 "lng")
|
||||||
|
* @param {String} options.latKey 输出纬度字段名(默认 "lat")
|
||||||
|
* @returns {Array} 对象数组
|
||||||
|
*/
|
||||||
|
export const geojsonPointToArray = (geojson, options = {lngKey:"lng",latKey:"lat"}) => {
|
||||||
|
const { lngKey = "lng", latKey = "lat" } = options;
|
||||||
|
|
||||||
|
if (!geojson || geojson.type !== "FeatureCollection") {
|
||||||
|
console.error("输入必须是 FeatureCollection");
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
return geojson.features.filter(f => f.geometry && f.geometry.type === "Point").map(f => {
|
||||||
|
const [lng, lat] = f.geometry.coordinates;
|
||||||
|
return {
|
||||||
|
...f.properties,
|
||||||
|
[lngKey]: lng,
|
||||||
|
[latKey]: lat
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
export const parsePointToArray = (pointStr) => {
|
||||||
|
if (!pointStr) return null;
|
||||||
|
|
||||||
|
// 去除前后空格、统一格式
|
||||||
|
pointStr = pointStr.trim();
|
||||||
|
|
||||||
|
// 匹配 POINT(...) 中的数字(支持用空格或逗号分隔)
|
||||||
|
const match = pointStr.match(/POINT\s*\(\s*([\d.-]+)[ ,]+([\d.-]+)\s*\)/i);
|
||||||
|
|
||||||
|
if (!match) return null;
|
||||||
|
|
||||||
|
const lng = parseFloat(match[1]);
|
||||||
|
const lat = parseFloat(match[2]);
|
||||||
|
|
||||||
|
return [lng, lat];
|
||||||
|
}
|
||||||
|
|
||||||
Loading…
Reference in New Issue