Compare commits
2 Commits
d30553a054
...
d13af5806f
| Author | SHA1 | Date |
|---|---|---|
|
|
d13af5806f | |
|
|
7f0a238a48 |
|
|
@ -110,7 +110,7 @@
|
|||
"lodash": "^4.17.21",
|
||||
"lodash-es": "^4.17.21",
|
||||
"mapbox-extensions": "^1.3.38",
|
||||
"mapbox-gl": "^3.3.0",
|
||||
"mapbox-gl": "^2.0.0",
|
||||
"mapbox-gl-draw-snap-mode": "^0.2.0",
|
||||
"mapbox-gl-utils": "^0.44.0",
|
||||
"mars3d": "^3.7.0",
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ worldMapContainer1.style.width = "970px";
|
|||
worldMapContainer1.style.position = "relative";
|
||||
worldMapContainer1.style.left = "30px";
|
||||
|
||||
mapboxgl.accessToken = 'pk.eyJ1IjoieHVqaW5nbGlhbmciLCJhIjoiY2w3bzFzZnZqMjdieTN1cG92N2I1d2huOSJ9.aQqMz4S-cTziUYizIH_gNg';
|
||||
mapboxgl.accessToken = 'pk.eyJ1IjoiYWlvb2lvbyIsImEiOiJjbHdhNHhxbTIwNjBiMmlxdGVpeDdnZzM4In0.vHK5bpeCj4sSK2POMI4y4Q';
|
||||
let map = new mapboxgl.Map({
|
||||
container: 'distribution_map',
|
||||
style: {
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@
|
|||
let map: Map;
|
||||
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = "pk.eyJ1IjoieHVqaW5nbGlhbmciLCJhIjoiY2w3bzFzZnZqMjdieTN1cG92N2I1d2huOSJ9.aQqMz4S-cTziUYizIH_gNg"
|
||||
mapboxgl.accessToken = "pk.eyJ1IjoiYWlvb2lvbyIsImEiOiJjbHdhNHhxbTIwNjBiMmlxdGVpeDdnZzM4In0.vHK5bpeCj4sSK2POMI4y4Q"
|
||||
map = initMap();
|
||||
map.on('load', function () {
|
||||
refreshLocation();
|
||||
|
|
|
|||
|
|
@ -610,7 +610,7 @@
|
|||
// mapDiv?.onmouseover = function(e){
|
||||
// alert(e);
|
||||
// }
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
map = initMap();
|
||||
map.on('load', () => {
|
||||
|
||||
|
|
@ -959,10 +959,9 @@
|
|||
let splitLineString = turf.cleanCoords(turfSplitLine);
|
||||
|
||||
let splitPolygon = currentGeoJson.value;
|
||||
|
||||
try {
|
||||
// let features = polygonCut(splitPolygon,splitLineString,0.1,"meters");
|
||||
|
||||
|
||||
splitPolygon?.geometry.coordinates[0].forEach((item,index)=>{
|
||||
splitPolygon.geometry.coordinates[0][index] = [item[0],item[1]];
|
||||
})
|
||||
|
|
@ -1407,6 +1406,8 @@
|
|||
for (let i = 0; i < features.length; i++) {
|
||||
try {
|
||||
let featureTemp = WktToGeojson(features[i]?.mapgeom);
|
||||
|
||||
console.log("💩💩💩:传入wkt转为geojson",featureTemp);
|
||||
|
||||
let feature = {
|
||||
id: generateUUID(),
|
||||
|
|
@ -1414,6 +1415,7 @@
|
|||
properties: {},
|
||||
geometry: featureTemp,
|
||||
};
|
||||
|
||||
geo.features.push(feature);
|
||||
// 获取第一个图斑的中心点跳转定位
|
||||
if (i == 0) {
|
||||
|
|
@ -1446,6 +1448,9 @@
|
|||
};
|
||||
|
||||
const currentGeoJson = ref({});
|
||||
|
||||
const editGeoJson = ref({});
|
||||
|
||||
const handlerDetails = (
|
||||
geojson,
|
||||
source = 'detailsSource',
|
||||
|
|
@ -1455,13 +1460,18 @@
|
|||
fillStyle: { 'fill-color': '#fcf003', 'fill-opacity': 0.1 },
|
||||
},
|
||||
) => {
|
||||
|
||||
console.log("💩💩💩:WKT处理为GeoJson后的数据:",geojson);
|
||||
|
||||
editGeoJson.value = geojson;
|
||||
|
||||
let fillLayerName = layer + 'Fill';
|
||||
let lineLayerName = layer + 'Line';
|
||||
|
||||
if (source == 'detailsSource' || source == "splitPolygonSource") {
|
||||
// 判断是单面还是多面
|
||||
let coordinates = null;
|
||||
console.log("geojson123",geojson);
|
||||
|
||||
if (geojson.features.length>0 && geojson.features[0].geometry.type == 'MultiPolygon') { // 多面
|
||||
// 默认取了第一个面的数据
|
||||
coordinates = geojson.features[0].geometry.coordinates[0];
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@
|
|||
const emit = defineEmits(['mapOnLoad', 'mapDraw']);
|
||||
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
|
||||
map = initMap();
|
||||
map.on('load', () => {
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@
|
|||
// 地图加载完成回调
|
||||
const emit = defineEmits(['mapOnLoad', 'mapDraw']);
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
map = initMap();
|
||||
map.on('load', () => {
|
||||
//挂载mapbox-gl-utils
|
||||
|
|
|
|||
|
|
@ -164,53 +164,57 @@ export async function splitPolygonByMultiFill(drawPolygons,outerPolygon){
|
|||
return new Promise((resolve,reject)=>{
|
||||
try{
|
||||
let dealOptions = {
|
||||
precision: 7, // 小数点后保留位数
|
||||
precision: 8, // 小数点后保留位数
|
||||
coordinates: 3, // 小数点前保留位数
|
||||
}
|
||||
console.log("💩第1步:传入的绘制面数据",drawPolygons);
|
||||
console.log("💩第2步:传入的被切割面数据",outerPolygon);
|
||||
|
||||
console.log("第1步:传入的绘制面数据",drawPolygons);
|
||||
|
||||
console.log("第2步:传入的被切割面数据",outerPolygon)
|
||||
// 所有结果集合
|
||||
let resultArray = [];
|
||||
|
||||
// 绘制图斑和分割图斑集合数组
|
||||
// 绘制图斑和分割图斑数组集合
|
||||
let featuresArray = [];
|
||||
|
||||
let turfOuterPolygon = null;
|
||||
|
||||
if(outerPolygon.geometry.type == "Polygon"){
|
||||
|
||||
if(outerPolygon.geometry.type == "Polygon"){
|
||||
// 如果是单面
|
||||
turfOuterPolygon = turf.polygon(outerPolygon.geometry.coordinates)
|
||||
}else if(outerPolygon.geometry.type == "MultiPolygon"){
|
||||
// 如果是多面
|
||||
turfOuterPolygon = turf.multiPolygon(outerPolygon.geometry.coordinates)
|
||||
}
|
||||
|
||||
featuresArray.push(turf.truncate(turfOuterPolygon,dealOptions));
|
||||
console.log("💩第3步:处理精度后的被分割图斑",featuresArray);
|
||||
|
||||
// 绘制图斑数组
|
||||
let splitFeaturesArray = [];
|
||||
console.log("原始数据处理精度后坐标",featuresArray);
|
||||
|
||||
// 求交集图斑
|
||||
drawPolygons.forEach((item,index)=>{
|
||||
try{
|
||||
let splitPolygonItem = null;
|
||||
if(item.geometry.type == "Polygon"){
|
||||
// 如果分割图斑是单面
|
||||
splitPolygonItem = turf.polygon(item.geometry.coordinates);
|
||||
}else if(item.geometry.type == "MultiPolygon"){
|
||||
// 如果分割图斑是多面
|
||||
splitPolygonItem = turf.multiPolygon(item.geometry.coordinates);
|
||||
}
|
||||
|
||||
console.log("splitPolygonItem",splitPolygonItem)
|
||||
// 处理精度后绘制图斑
|
||||
let turfPolygon = turf.truncate(splitPolygonItem,dealOptions);
|
||||
// 取交集
|
||||
|
||||
// 打印处理的数据
|
||||
console.log("HelloWorld",featuresArray[0],turfPolygon)
|
||||
console.log("💩第4步:处理精度后绘制图斑",turfPolygon);
|
||||
|
||||
let intersection = turf.intersect(turf.featureCollection([featuresArray[0],turfPolygon]));
|
||||
// 取交集
|
||||
let intersection = turf.intersect(turf.featureCollection([featuresArray[0],turfPolygon]),dealOptions);
|
||||
|
||||
if(intersection){
|
||||
resultArray.push(intersection);
|
||||
}
|
||||
console.log("第3步:交集"+index+":",intersection)
|
||||
console.log("💩第5步:交集"+index+":",intersection)
|
||||
splitFeaturesArray.push(turfPolygon);
|
||||
}catch(e){
|
||||
console.log(e);
|
||||
|
|
@ -219,13 +223,13 @@ export async function splitPolygonByMultiFill(drawPolygons,outerPolygon){
|
|||
|
||||
// 取差集
|
||||
var difference = turf.difference(turf.featureCollection(featuresArray.concat(splitFeaturesArray)));
|
||||
console.log("第4步:差集",difference);
|
||||
console.log("💩第6步:差集",difference);
|
||||
if(difference){
|
||||
resultArray.push(difference);
|
||||
}
|
||||
|
||||
// 全部图斑
|
||||
console.log("第5步:分割后所有图斑",resultArray);
|
||||
console.log("💩第7步:分割后所有图斑",resultArray);
|
||||
|
||||
resolve(resultArray)
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
export enum MapboxConfig {
|
||||
ACCESS_TOKEN = 'pk.eyJ1IjoieHVqaW5nbGlhbmciLCJhIjoiY2w3bzFzZnZqMjdieTN1cG92N2I1d2huOSJ9.aQqMz4S-cTziUYizIH_gNg',
|
||||
ACCESS_TOKEN = 'pk.eyJ1IjoiYWlvb2lvbyIsImEiOiJjbHdhNHhxbTIwNjBiMmlxdGVpeDdnZzM4In0.vHK5bpeCj4sSK2POMI4y4Q',
|
||||
// ACCESS_TOKEN = "1234",
|
||||
TDT_TOKEN = 'b6585bc41ee16251dbe6b1af64f375d9',
|
||||
// add more config options here
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ const { width, height } = props
|
|||
const mapId = `map-${uuidv4()}`
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
map = initMap();
|
||||
})
|
||||
const initMap = () => {
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import SearchMenu from './SearchMenu/index.vue'
|
|||
import ResourceMenu from './ResourceMenu/index.vue'
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
map = initMap();
|
||||
})
|
||||
onUnmounted(() => {
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
});
|
||||
onUnmounted(() => {
|
||||
|
|
|
|||
|
|
@ -321,7 +321,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
});
|
||||
onUnmounted(() => {
|
||||
|
|
|
|||
|
|
@ -321,7 +321,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
});
|
||||
onUnmounted(() => {
|
||||
|
|
|
|||
|
|
@ -164,7 +164,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
getLoadDroneCaseInfoCount()
|
||||
.then((res) => {
|
||||
|
|
|
|||
|
|
@ -247,7 +247,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
getLoadDroneCaseInfoCount()
|
||||
.then((res) => {
|
||||
|
|
|
|||
|
|
@ -321,7 +321,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
getLoadDroneCaseInfoCount()
|
||||
.then((res) => {
|
||||
|
|
|
|||
|
|
@ -247,7 +247,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
getLoadDroneCaseInfoCount()
|
||||
.then((res) => {
|
||||
|
|
|
|||
|
|
@ -334,7 +334,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
getLoadDroneCaseInfoCount()
|
||||
.then((res) => {
|
||||
|
|
|
|||
|
|
@ -247,7 +247,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
getLoadDroneCaseInfoCount()
|
||||
.then((res) => {
|
||||
|
|
|
|||
|
|
@ -334,7 +334,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
getLoadDroneCaseInfoCount()
|
||||
.then((res) => {
|
||||
|
|
|
|||
|
|
@ -247,7 +247,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
getLoadDroneCaseInfoCount()
|
||||
.then((res) => {
|
||||
|
|
|
|||
|
|
@ -336,7 +336,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
getLoadDroneCaseInfoCount()
|
||||
.then((res) => {
|
||||
|
|
|
|||
|
|
@ -311,7 +311,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
});
|
||||
onUnmounted(() => {
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ export const servicesColumns: BasicColumn[] = [
|
|||
},
|
||||
];
|
||||
|
||||
export const MAPBOX_TOKEN = "pk.eyJ1IjoieHVqaW5nbGlhbmciLCJhIjoiY2w3bzFzZnZqMjdieTN1cG92N2I1d2huOSJ9.aQqMz4S-cTziUYizIH_gNg";
|
||||
export const MAPBOX_TOKEN = "pk.eyJ1IjoiYWlvb2lvbyIsImEiOiJjbHdhNHhxbTIwNjBiMmlxdGVpeDdnZzM4In0.vHK5bpeCj4sSK2POMI4y4Q";
|
||||
|
||||
export const TINADITU_TOKEN = "b6585bc41ee16251dbe6b1af64f375d9";
|
||||
|
||||
|
|
|
|||
|
|
@ -247,7 +247,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
getLoadDroneCaseInfoCount()
|
||||
.then((res) => {
|
||||
|
|
|
|||
|
|
@ -334,7 +334,7 @@
|
|||
);
|
||||
let map: Map;
|
||||
onMounted(() => {
|
||||
mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
//mapboxgl.accessToken = MapboxConfig.ACCESS_TOKEN;
|
||||
// map = initMap();
|
||||
getLoadDroneCaseInfoCount()
|
||||
.then((res) => {
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
export const MAPBOX_TOKEN = "pk.eyJ1IjoieHVqaW5nbGlhbmciLCJhIjoiY2w3bzFzZnZqMjdieTN1cG92N2I1d2huOSJ9.aQqMz4S-cTziUYizIH_gNg";
|
||||
export const MAPBOX_TOKEN = "pk.eyJ1IjoiYWlvb2lvbyIsImEiOiJjbHdhNHhxbTIwNjBiMmlxdGVpeDdnZzM4In0.vHK5bpeCj4sSK2POMI4y4Q";
|
||||
|
||||
export const TINADITU_TOKEN = "b6585bc41ee16251dbe6b1af64f375d9";
|
||||
|
||||
|
|
|
|||
|
|
@ -179,6 +179,7 @@
|
|||
networkType.value = "WAN";
|
||||
}finally{
|
||||
map = initMap();
|
||||
|
||||
map.on('load', () => {
|
||||
//挂载mapbox-gl-utils
|
||||
U.init(map);
|
||||
|
|
@ -192,7 +193,7 @@
|
|||
maxzoom: 13,
|
||||
minzoom: 10,
|
||||
});
|
||||
// map.setTerrain({ source: 'mapbox-dem', exaggeration: 1 });
|
||||
map.setTerrain({ source: 'mapbox-dem', exaggeration: 1 });
|
||||
|
||||
// 设置2D地图
|
||||
map.easeTo({ pitch: 0, bearing: 0, duration: 1000 });
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
export enum MapboxConfig {
|
||||
ACCESS_TOKEN = 'pk.eyJ1IjoieHVqaW5nbGlhbmciLCJhIjoiY2w3bzFzZnZqMjdieTN1cG92N2I1d2huOSJ9.aQqMz4S-cTziUYizIH_gNg',
|
||||
ACCESS_TOKEN = 'pk.eyJ1IjoiYWlvb2lvbyIsImEiOiJjbHdhNHhxbTIwNjBiMmlxdGVpeDdnZzM4In0.vHK5bpeCj4sSK2POMI4y4Q',
|
||||
// ACCESS_TOKEN = "1234",
|
||||
TDT_TOKEN = 'b6585bc41ee16251dbe6b1af64f375d9',
|
||||
// add more config options here
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
export const MAPBOX_TOKEN = "pk.eyJ1IjoieHVqaW5nbGlhbmciLCJhIjoiY2w3bzFzZnZqMjdieTN1cG92N2I1d2huOSJ9.aQqMz4S-cTziUYizIH_gNg";
|
||||
export const MAPBOX_TOKEN = "pk.eyJ1IjoiYWlvb2lvbyIsImEiOiJjbHdhNHhxbTIwNjBiMmlxdGVpeDdnZzM4In0.vHK5bpeCj4sSK2POMI4y4Q";
|
||||
|
||||
export const TINADITU_TOKEN = "b6585bc41ee16251dbe6b1af64f375d9";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
export const MAPBOX_TOKEN = "pk.eyJ1IjoieHVqaW5nbGlhbmciLCJhIjoiY2w3bzFzZnZqMjdieTN1cG92N2I1d2huOSJ9.aQqMz4S-cTziUYizIH_gNg";
|
||||
export const MAPBOX_TOKEN = "pk.eyJ1IjoiYWlvb2lvbyIsImEiOiJjbHdhNHhxbTIwNjBiMmlxdGVpeDdnZzM4In0.vHK5bpeCj4sSK2POMI4y4Q";
|
||||
|
||||
export const TINADITU_TOKEN = "b6585bc41ee16251dbe6b1af64f375d9";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
export enum MapboxConfig {
|
||||
ACCESS_TOKEN = 'pk.eyJ1IjoieHVqaW5nbGlhbmciLCJhIjoiY2w3bzFzZnZqMjdieTN1cG92N2I1d2huOSJ9.aQqMz4S-cTziUYizIH_gNg',
|
||||
ACCESS_TOKEN = 'pk.eyJ1IjoiYWlvb2lvbyIsImEiOiJjbHdhNHhxbTIwNjBiMmlxdGVpeDdnZzM4In0.vHK5bpeCj4sSK2POMI4y4Q',
|
||||
// ACCESS_TOKEN = "1234",
|
||||
TDT_TOKEN = 'b6585bc41ee16251dbe6b1af64f375d9',
|
||||
// add more config options here
|
||||
|
|
|
|||
Loading…
Reference in New Issue