老样子,shp点数据转换geojson就不提了,上一篇有(23条消息) 12.3 总结(功能记录:智慧成都地铁网络)_628砍柴人的博客-CSDN博客

挖洞是数据问题,放最后说

1、画出各个县组成一个面、打上县(区)名marker标签

① :拿到县界数据、使用polygon3d(或polygon)画出每个县的面

注:shp数据是面数据,在三维中需要给z轴设置高度

(1)数据处理:

 getAdministrativeDivisionCounty().then(async ({ data }: any) => {data.features.forEach((item: any, index: number) => {const placeObj: any = placeNameArr.find((i: any) => i.code == item.properties.code)item.geometry.coordinates.forEach((coordinate: any) => {coordinate.forEach((c: any) => {c[2] = 350})})

(2)拿到各区(县)code:网页 市辖区行政区划代码 - 310100000000是哪里的行政区划代码

每个区数据有个code:

根据code就可以确定每个区的名字了

提前准备好对应code的区名字以及打marker点的区坐标就可以画面和标上marker标签了:下面是代码:

const addTop = () => {const polygon3dArr: any = []const markerArr: any = []getAdministrativeDivisionCounty().then(async ({ data }: any) => {data.features.forEach((item: any, index: number) => {const placeObj: any = placeNameArr.find((i: any) => i.code == item.properties.code)item.geometry.coordinates.forEach((coordinate: any) => {coordinate.forEach((c: any) => {c[2] = 350})})if (placeObj) {// 通过每块区域的code值来判断需要对应的颜色const top = {id: 'administrative_top_polygon3d_' + index,coordinates: item.geometry.coordinates,color: placeObj.color,height: 50, //3D多边形的高度intensity: 0.2, //亮度style: 1, //3DPolygon的样式 请参照API开发文档选取枚举generateTop: true, //是否生成顶面generateSide: true, //是否生成侧面generateBottom: true //是否生成底面}_shPolygon3dArr.push('administrative_top_polygon3d_' + index)polygon3dArr.push(top)// 添加markermarkerArr.push({id: 'marker-earth-admin-1' + index,coordinate: [placeObj.coordinate[0], placeObj.coordinate[1], placeObj.coordinate[2] + 1000], //坐标位置coordinateType: 0, //默认0是投影坐标系,也可以设置为经纬度空间坐标系值为1anchors: [-25, 50], //锚点,设置Marker的整体偏移,取值规则和imageSize设置的宽高有关,图片的左上角会对准标注点的坐标位置。示例设置规则:x=-imageSize.width/2,y=imageSize.heightimagePath: '@path:智慧武汉/map_poi_area_blue.png',imageSize: [100, 80],range: [1, 1000000], //可视范围fixedSize: false, //图片固定尺寸,取值范围:false 自适应,近大远小,true 固定尺寸,默认值:falsetext: placeObj.name, //显示的文字useTextAnimation: true, //打开文字展开动画效果textRange: [1, 10000000], //文本可视范围[近裁距离, 远裁距离]textOffset: [-85, -22], // 文本偏移textBackgroundColor: [0, 0, 0, 0], //文本背景颜色fontSize: 15, //字体大小fontOutlineSize: 2, //字体轮廓线大小fontColor: Color.Black, //字体颜色fontOutlineColor: Color.White, //字体轮廓线颜色popupSize: [600, 400], //弹窗大小popupOffset: [0, 0], //弹窗偏移showLine: false, //标注点下方是否显示垂直牵引线lineSize: [2, 3], //垂直牵引线宽度和高度[width, height]lineColor: placeObj.color, //垂直牵引线颜色lineOffset: [0, 0], //垂直牵引线偏移autoHidePopupWindow: true, //失去焦点后是否自动关闭弹出窗口autoHeight: false, // 自动判断下方是否有物体displayMode: 2, //显示模式clusterByImage: true, // 聚合时是否根据图片路径分类,即当多个marker的imagePath路径参数相同时按路径对marker分类聚合priority: 0, //避让优先级occlusionCull: false //是否参与遮挡剔除})}})//批量添加polygonconsole.log(polygon3dArr, '=============================')__g.polygon3d.add(polygon3dArr)// __g.marker3d.add(centerArr)__g.marker.add(markerArr)})
}

②: 边界线(polyline)、底部装饰(polygon+polygon3d)让区划快更有立体感

此处选择的底部装饰没有做太明显的

/*** 添加顶部装饰图层*/
const addTopLayer = () => {const polygon3dArr: Array<any> = []const polygonArr: Array<any> = []const polylineArr: Array<any> = []getAdministrativeDivisionCity().then(async ({ data }: any) => {data.features.forEach((item: any, index: number) => {item.geometry.coordinates.forEach((coors: any, index: number) => {const coordinate1 = JSON.parse(JSON.stringify(coors))const coordinate3 = JSON.parse(JSON.stringify(coors))coordinate3.forEach((item: Array<number>) => {item.forEach((i: any) => {i[2] = 650})})//底层装饰const bottom = {id: 'adminPlanning_bottom_' + coordinate1[0][0][0],coordinates: coordinate3[0],color: '#0e1684',height: 2000, //3D多边形的高度intensity: 5, //亮度style: 3, //3DPolygon的样式 请参照API开发文档选取枚举generateTop: false, //是否生成顶面generateSide: true, //是否生成侧面generateBottom: true //是否生成底面}polygon3dArr.push(bottom)const coordinate4 = JSON.parse(JSON.stringify(coors))coordinate4.forEach((item: Array<number>) => {item.forEach((i: any) => {i[2] = 350})})// 顶层线const topLine = {id: 'adminPlanning_line_' + coordinate1[0][0][0], //折线唯一标识idcoordinates: coordinate4[0], //构成折线的坐标点数组range: [1, 1000000], //可视范围:[近裁距离, 远裁距离],取值范围: [任意负值, 任意正值]color: '#fff', //折线颜色style: 4, //折线样式 参考样式枚举:PolylineStylethickness: 400, //折线宽度intensity: 0.2, //亮度flowRate: 0.5, //流速tiling: 0, //材质贴图平铺比例shape: 0, //折线类型 0:直线, 1:曲线depthTest: true //是否做深度检测}polylineArr.push(topLine)})})//批量添加polygonawait __g.polygon3d.add(polygon3dArr)await __g.polyline.add(polylineArr)await __g.polygon.add(polygonArr)})
}

③:画上区线,使用 polygon3d让每个区之间的边界流动起来,形成每个区之间的立体感

/*** 添加区线*/
const _shPolygon3dArrZone: any = []
const addingZoneLines = () => {const polygon3DArr: any = []getAdministrativeDivisionCounty().then(async ({ data }: any) => {data.features.forEach((item: any, index: number) => {const placeObj: any = placeNameArr.find((i: any) => i.code == item.properties.code)if (placeObj) {const borderCoord = JSON.parse(JSON.stringify(item.geometry.coordinates))borderCoord.forEach((item: any) => {item.forEach((i: any) => {i[2] = 350})})const border = {id: 'administrative_top_border_' + index, //polygon唯一标识idcoordinates: borderCoord[0], //构成polygon的坐标点数组height: 2000, //3D多边形的高度intensity: 1.0, //亮度color: '#000',style: 8, //3DPolygon的样式 请参照API开发文档选取枚举generateTop: false, //是否生成顶面generateSide: true, //是否生成侧面generateBottom: false //是否生成底面}_shPolygon3dArrZone.push('administrative_top_border_' + index)polygon3DArr.push(border)}})//批量添加polygonconst res = await __g.polygon3d.add(polygon3DArr)if (res) {await __g.polygon3d.show(_shPolygon3dArrZone)}// console.log(res, 'dwaaaaaaaaaaa');})
}

效果:

bug 数据结构问题造成的挖洞:

可以看到上面的效果图上缺了一块,分析一下原因:

无非两种可能:1、数据缺失   2、在画polygon3d时给的坐标点时三维数组不止一个点数组的二维数组 且其中某个二维数组坐标被另一个二维数组的坐标形成的面包括故造成挖洞(亦或是四维数组中包含的三维数组里不止一个二维数组,且其中某个二维数组坐标被另一个二维数组的坐标形成的面包括)

官方api 坐标点的格式

效果图中我们看到,缺洞那一块的行政区划范围面是可以画出来的,所以我们可以确定是第2种可能

解决方法:我们只需要将打洞的那一块数据给去掉或者是 在给polygon3d赋值坐标时忽略那一块数据

这里有个技巧能精准获取到是那一组数据的结构出了问题(杰哥牛皮)

首先我们先把底部装饰的polygon3d对象给注释掉 让我们鼠标左键点击是能获取到的是构成面的polygon3d 鼠标点击挖洞块的区polygon3d之后,控制台可以打印出来我们创建面polygon3d的对象,根据我们赋值的id可以精准的看到是哪一条数据结构出了问题,这里的数据除了这一个有挖洞的不同之外,其他的三维数组都是只有一项二维数组的点数据,所以,我们在给polygon3d赋值时可以 二维数组提出来再赋值即可

处理前:

coordinates: item.geometry.coordinates, 

处理后:

coordinates: item.geometry.coordinates[0], 

效果:

最后上全部代码:

import { getAdministrativeDivisionCity, getAdministrativeDivisionCounty } from '@/api/home'
import { useAirCityStore } from '@/stores/aircity'const airCityStore = useAirCityStore()// 格子边长 单位米
const cell = 1500
// 格子大小
const cellSize = cell / 1000
// 盒子四个角与中心点的偏移量
const sideLength = cell / 2/*** 颜色转换 从 eg[255,255,255]转为平台颜色[1,1,1]* @param colorArr 颜色数组* @param opacity 透明度*/
const getColorConversion = (colorArr: number[], opacity: number) => {return [colorArr[0] / 255, colorArr[1] / 255, colorArr[2] / 255, 1]
}/*** 初始化*/
const initAdministrativeDivision = async () => {await __g.camera.stopAnimation()await __g.weather.setDarkMode(true)// 隐藏成都DX裁核心区await __g.tileLayer.hide(airCityStore.layerTreeObject['武汉地形影像4547_1201'])// 设置相机视角await __g.camera.set(549309.719453, 3323496.992656, 100367.03, -61.709293, -108.284378, 2)await __g.polygon3d.delete(_shPolygon3dArrZone)await showOrAdd()
}/*** 添加或者显示*/
const showOrAdd = async () => {// 添加顶部await addTop()await addTopLayer()await addingZoneLines()
}
const showPillar = async () => {// 添加柱子及markerawait __g.camera.set(578108.903125, 3350549.919375, 56539.57, -44.668999, -144.609802, 1)await __g.marker.clear(null)await addPillar()
}
const cleanPillar = async () => {// 清除柱子及markerawait __g.polygon3d.delete(PillarId)await __g.customTag.clear(null)
}/*** 还原*/
const cleanAdministrativePlanning = async () => {// __g.weather.setDarkMode(false)await __g.polygon.clear(null)await __g.polygon3d.clear(null)await __g.polyline.clear(null)await __g.marker.clear(null)await __g.marker3d.clear(null)// await __g.tileLayer.hide(airCityStore.layerTreeObject['武汉地形影像4547_1201'])await __g.customTag.clear(null)
}const _shPolygon3dArr: any = []
/*** 加顶层面*/
const addTop = () => {const polygon3dArr: any = []const markerArr: any = []getAdministrativeDivisionCounty().then(async ({ data }: any) => {data.features.forEach((item: any, index: number) => {const placeObj: any = placeNameArr.find((i: any) => i.code == item.properties.code)item.geometry.coordinates.forEach((coordinate: any) => {coordinate.forEach((c: any) => {c[2] = 350})})if (placeObj) {// 通过每块区域的code值来判断需要对应的颜色const top = {id: 'administrative_top_polygon3d_' + index,coordinates: item.geometry.coordinates[0],color: placeObj.color,height: 50, //3D多边形的高度intensity: 0.2, //亮度style: 1, //3DPolygon的样式 请参照API开发文档选取枚举generateTop: true, //是否生成顶面generateSide: true, //是否生成侧面generateBottom: true //是否生成底面}_shPolygon3dArr.push('administrative_top_polygon3d_' + index)polygon3dArr.push(top)// 添加markermarkerArr.push({id: 'marker-earth-admin-1' + index,coordinate: [placeObj.coordinate[0], placeObj.coordinate[1], placeObj.coordinate[2] + 1000], //坐标位置coordinateType: 0, //默认0是投影坐标系,也可以设置为经纬度空间坐标系值为1anchors: [-25, 50], //锚点,设置Marker的整体偏移,取值规则和imageSize设置的宽高有关,图片的左上角会对准标注点的坐标位置。示例设置规则:x=-imageSize.width/2,y=imageSize.heightimagePath: '@path:智慧武汉/map_poi_area_blue.png',imageSize: [100, 80],range: [1, 1000000], //可视范围fixedSize: false, //图片固定尺寸,取值范围:false 自适应,近大远小,true 固定尺寸,默认值:falsetext: placeObj.name, //显示的文字useTextAnimation: true, //打开文字展开动画效果textRange: [1, 10000000], //文本可视范围[近裁距离, 远裁距离]textOffset: [-85, -22], // 文本偏移textBackgroundColor: [0, 0, 0, 0], //文本背景颜色fontSize: 15, //字体大小fontOutlineSize: 2, //字体轮廓线大小fontColor: Color.Black, //字体颜色fontOutlineColor: Color.White, //字体轮廓线颜色popupSize: [600, 400], //弹窗大小popupOffset: [0, 0], //弹窗偏移showLine: false, //标注点下方是否显示垂直牵引线lineSize: [2, 3], //垂直牵引线宽度和高度[width, height]lineColor: placeObj.color, //垂直牵引线颜色lineOffset: [0, 0], //垂直牵引线偏移autoHidePopupWindow: true, //失去焦点后是否自动关闭弹出窗口autoHeight: false, // 自动判断下方是否有物体displayMode: 2, //显示模式clusterByImage: true, // 聚合时是否根据图片路径分类,即当多个marker的imagePath路径参数相同时按路径对marker分类聚合priority: 0, //避让优先级occlusionCull: false //是否参与遮挡剔除})}})//批量添加polygonconsole.log(polygon3dArr, '=============================')__g.polygon3d.add(polygon3dArr)// __g.marker3d.add(centerArr)__g.marker.add(markerArr)})
}//添加柱子(polygon3d)
const PillarId: any = []
const addPillar = () => {const polygon3dArr: any = []const customTag: any = []getAdministrativeDivisionCounty().then(async ({ data }: any) => {data.features.forEach((item: any, index: number) => {const placeObj: any = placeNameArr.find((i: any) => i.code == item.properties.code)item.geometry.coordinates.forEach((coordinate: any) => {coordinate.forEach((c: any) => {c[2] = 350})})if (placeObj) {let x = placeObj.coordinate[0] + 3 * cellconst y = placeObj.coordinate[1]const z = placeObj.coordinate[2]const topLeft = [x - sideLength, y + sideLength, z]const topRight = [x - sideLength, y - sideLength, z]const bottomLeft = [x + sideLength, y - sideLength, z]const bottomRight = [x + sideLength, y + sideLength, z]//面积let pillarArea = {id: 'pillarArea_top_polygon3d_' + index,coordinates: [topLeft, topRight, bottomLeft, bottomRight],color: '#529b2e', //颜色值height: placeObj.value.pillarArea * 4, //3D多边形的高度intensity: 1.0, //亮度style: 10, //3DPolygon的样式 请参照API开发文档选取枚举generateTop: true, //是否生成顶面generateSide: true, //是否生成侧面generateBottom: true //是否生成底面}x = placeObj.coordinate[0] + celllet topLeft2 = [x - sideLength, y + sideLength, z]let topRight2 = [x - sideLength, y - sideLength, z]let bottomLeft2 = [x + sideLength, y - sideLength, z]let bottomRight2 = [x + sideLength, y + sideLength, z]//经济let pillarEconomics = {id: 'pillarEconomics_top_polygon3d_' + index,coordinates: [topLeft2, topRight2, bottomLeft2, bottomRight2],color: [0, 0, 1, 1], //颜色值height: placeObj.value.pillarEconomics * 4.99, //3D多边形的高度intensity: 1.0, //亮度style: 10, //3DPolygon的样式 请参照API开发文档选取枚举generateTop: true, //是否生成顶面generateSide: true, //是否生成侧面generateBottom: true //是否生成底面}x = placeObj.coordinate[0] + 2 * celllet topLeft3 = [x - sideLength, y + sideLength, z]let topRight3 = [x - sideLength, y - sideLength, z]let bottomLeft3 = [x + sideLength, y - sideLength, z]let bottomRight3 = [x + sideLength, y + sideLength, z]//人口let pillarPopulation = {id: 'pillarPopulation_top_polygon3d_' + index,coordinates: [topLeft3, topRight3, bottomLeft3, bottomRight3],color: [1, 0, 0, 1], //颜色值height: placeObj.value.pillarPopulation * 57.8, //3D多边形的高度intensity: 1.0, //亮度style: 10, //3DPolygon的样式 请参照API开发文档选取枚举generateTop: true, //是否生成顶面generateSide: true, //是否生成侧面generateBottom: true //是否生成底面}customTag.push({id: 'customTag-' + index,coordinate: [placeObj.coordinate[0] + 2 * cell, placeObj.coordinate[1], placeObj.coordinate[2] + 11000],contentURL: '@path:智慧武汉/customTag/administrativeDivisionImg.html', // 网页URLcontentSize: [80, 80], //网页窗口宽高 [width, height]pivot: [0.5, 0.4], // 中心点range: [0, 1000000], //显示范围:[min, max]popupURL: `@path:智慧武汉/customTag/administrativeDivisionTag.html?index=${placeObj.name}-${placeObj.value.pillarArea}-${placeObj.value.pillarEconomics}-${placeObj.value.pillarPopulation}`, //弹窗地址urlpopupSize: [250, 370], //弹窗尺寸popupPos: [-35, -18], //弹窗位置: [x, y]autoHidePopupWindow: true //失去焦点后是否自动关闭弹出窗口})polygon3dArr.push(pillarArea)polygon3dArr.push(pillarEconomics)polygon3dArr.push(pillarPopulation)PillarId.push('pillarArea_top_polygon3d_' + index)PillarId.push('pillarEconomics_top_polygon3d_' + index)PillarId.push('pillarPopulation_top_polygon3d_' + index)}})//批量添加polygonawait __g.polygon3d.add(polygon3dArr)// await __g.marker.add(markerArr)await __g.customTag.add(customTag)})
}
/*** 添加顶部装饰图层*/
const addTopLayer = () => {const polygon3dArr: Array<any> = []const polygonArr: Array<any> = []const polylineArr: Array<any> = []getAdministrativeDivisionCity().then(async ({ data }: any) => {data.features.forEach((item: any, index: number) => {item.geometry.coordinates.forEach((coors: any, index: number) => {const coordinate1 = JSON.parse(JSON.stringify(coors))const coordinate3 = JSON.parse(JSON.stringify(coors))coordinate3.forEach((item: Array<number>) => {item.forEach((i: any) => {i[2] = 650})})//底层装饰const bottom = {id: 'adminPlanning_bottom_' + coordinate1[0][0][0],coordinates: coordinate3[0],color: '#0e1684',height: 2000, //3D多边形的高度intensity: 5, //亮度style: 3, //3DPolygon的样式 请参照API开发文档选取枚举generateTop: false, //是否生成顶面generateSide: true, //是否生成侧面generateBottom: true //是否生成底面}polygon3dArr.push(bottom)const coordinate4 = JSON.parse(JSON.stringify(coors))coordinate4.forEach((item: Array<number>) => {item.forEach((i: any) => {i[2] = 350})})// 顶层线const topLine = {id: 'adminPlanning_line_' + coordinate1[0][0][0], //折线唯一标识idcoordinates: coordinate4[0], //构成折线的坐标点数组range: [1, 1000000], //可视范围:[近裁距离, 远裁距离],取值范围: [任意负值, 任意正值]color: '#fff', //折线颜色style: 4, //折线样式 参考样式枚举:PolylineStylethickness: 400, //折线宽度intensity: 0.2, //亮度flowRate: 0.5, //流速tiling: 0, //材质贴图平铺比例shape: 0, //折线类型 0:直线, 1:曲线depthTest: true //是否做深度检测}polylineArr.push(topLine)})})//批量添加polygonawait __g.polygon3d.add(polygon3dArr)await __g.polyline.add(polylineArr)await __g.polygon.add(polygonArr)})
}/*** 添加区线*/
const _shPolygon3dArrZone: any = []
const addingZoneLines = () => {const polygon3DArr: any = []getAdministrativeDivisionCounty().then(async ({ data }: any) => {data.features.forEach((item: any, index: number) => {const placeObj: any = placeNameArr.find((i: any) => i.code == item.properties.code)if (placeObj) {const borderCoord = JSON.parse(JSON.stringify(item.geometry.coordinates))borderCoord.forEach((item: any) => {item.forEach((i: any) => {i[2] = 350})})const border = {id: 'administrative_top_border_' + index, //polygon唯一标识idcoordinates: borderCoord[0], //构成polygon的坐标点数组height: 2000, //3D多边形的高度intensity: 1.0, //亮度color: '#000',style: 8, //3DPolygon的样式 请参照API开发文档选取枚举generateTop: false, //是否生成顶面generateSide: true, //是否生成侧面generateBottom: false //是否生成底面}_shPolygon3dArrZone.push('administrative_top_border_' + index)polygon3DArr.push(border)}})//批量添加polygonconst res = await __g.polygon3d.add(polygon3DArr)if (res) {await __g.polygon3d.show(_shPolygon3dArrZone)}})
}const placeNameArr: any = [{name: '江岸区',color: getColorConversion([199, 129, 0], 1),coordinate: [526303.625, 3391442, 350.99749755859375],code: '420102000000',value: {pillarArea: 70.2,pillarEconomics: 1247.04,pillarPopulation: 96.53}},{name: '江汉区',color: getColorConversion([68, 255, 0], 1),coordinate: [522634.78125, 3386256.75, 350],code: '420103000000',value: {pillarArea: 27.2,pillarEconomics: 1319.06,pillarPopulation: 64.79}},{name: '硚口区',color: getColorConversion([255, 123, 0], 1),coordinate: [517492.46875, 3387962.5, 350],code: '420104000000',value: {pillarArea: 36.7,pillarEconomics: 801.16,pillarPopulation: 66.67}},{name: '汉阳区',color: getColorConversion([47, 203, 255], 1),coordinate: [518931.5625, 3377453, 350.00250244140625],code: '420105000000',value: {pillarArea: 111.543,pillarEconomics: 699.01,pillarPopulation: 83.73}},{name: '武昌区',color: getColorConversion([255, 114, 243], 1),coordinate: [530936.25, 3382207, 350.02001953125],code: '420106000000',value: {pillarArea: 107.76,pillarEconomics: 1492.93,pillarPopulation: 109.28}},{name: '青山区',color: getColorConversion([0, 255, 234], 1),coordinate: [542623.1875, 3387964.5, 350.99874877929688],code: '420107000000',value: {pillarArea: 66.09,pillarEconomics: 761.47,pillarPopulation: 46.33}},{name: '洪山区',color: getColorConversion([255, 255, 0], 1),coordinate: [522634.78125, 3386256.75, 350],code: '420111000000',value: {pillarArea: 220.5,pillarEconomics: 1036.16,pillarPopulation: 172.8}},{name: '东西湖区',color: getColorConversion([134, 134, 255], 1),coordinate: [505176.25, 3397951.25, 350.989990234375],code: '420112000000',value: {pillarArea: 495,pillarEconomics: 1370.17,pillarPopulation: 84.58}},{name: '汉南区',color: getColorConversion([251, 0, 255], 1),coordinate: [500627.125, 3354134.75, 350.010009765625],code: '420113000000',value: {pillarArea: 287,pillarEconomics: 1650.31,pillarPopulation: 48.13}},{name: '蔡甸区',color: getColorConversion([204, 205, 51], 1),coordinate: [497882.875, 3372406.5, 350.0048828125],code: '420114000000',value: {pillarArea: 1093.57,pillarEconomics: 371.34,pillarPopulation: 55.44}},{name: '江夏区',color: getColorConversion([0, 132, 255], 1),coordinate: [521575.125, 3347752.75, 350.010009765625],code: '420115000000',value: {pillarArea: 2018.3,pillarEconomics: 842.04,pillarPopulation: 97.47}},{name: '黄陂区',color: getColorConversion([230, 255, 129], 1),coordinate: [533852.8125, 3408715.5, 350.010009765625],code: '420116000000',value: {pillarArea: 2261,pillarEconomics: 1013.28,pillarPopulation: 115.16}},{name: '新洲区',color: getColorConversion([255, 191, 0], 1),coordinate: [564884.8125, 3402051, 350.010009765625],code: '420117000000',value: {pillarArea: 1463.43,pillarEconomics: 888.57,pillarPopulation: 86.04}}
]export { initAdministrativeDivision, cleanAdministrativePlanning, showPillar, cleanPillar }

功能记录-行政区划(bug【挖洞】:数据结构问题)相关推荐

  1. 从业余挖洞到微软漏洞研究员,我的遗憾、惊喜和建议

     聚焦源代码安全,网罗国内外最新资讯! 作者:Abdulrahman Alqabandi 编译:代码卫士 本文作者目前是微软的一名漏洞研究员,他讲述了将挖洞当作爱好和当作职业的笑与泪,以及一些建议忠告 ...

  2. 面包牛奶的挖洞记录(一)漏洞扫描方面的法律须知和等级保护2.0简介

    面包牛奶的挖洞记录(一)漏洞扫描方面的法律须知和等级保护2.0简介 你好哇!我是你们的面包牛奶啊,在大二学习完信息安全基础后,我就忍不住想证明自己的实战能力,于是我开始了我痛苦并着快乐的漏洞前期准备工 ...

  3. 【安全漏洞】挖洞小记

    前言:上个月月初开始,在那些项目结束之后进入了挖洞时期,每天的日常工作就是挖洞,除非有临时的项目才会停下,最近在整理报告,发现了这个站,还是挺有意思的. 信息收集 从fofa上找到了这个站点,叫做fa ...

  4. 详述 Discord Desktop app RCE 挖洞经过,最后得$5000 + $300 (含 PoC 视频)

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 几个月前,我在 Discord 桌面应用中发现了一个远程代码执行漏洞,并把漏洞报告提交给 Discord 公司的漏洞奖励计划.这个 R ...

  5. 沙场白帽老兵聊未来的挖洞方向及其它

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 可以说,Ziot(真名 Brett Buerhaus)和网络安全同呼吸共命运.目前他在 Blizzard Entertainment ...

  6. SRC众测挖洞之支付逻辑漏洞的奇淫技巧

    文章目录 前言 巧用支付页面 低价签约漏洞 低价会员升级 循环利用优惠券 并发请求测试 并发领取奖品 并发多次签到 并发转账提现 其他支付漏洞 异常支付金额 金额数量溢出 更多支付漏洞 总结 前言 最 ...

  7. SRC挖洞之文件上传/下载漏洞的实战案例

    文章目录 前言 任意文件下载 案例1 某OA系统任意文件下载 案例2 某登录页面任意文件下载 案例3 某金融网站任意文件下载 案例4 服务端过滤 ../ 绕过下载 案例5 %00截断后下载任意文件 文 ...

  8. php挖洞提权,挖洞经验 | 看我如何发现GitHub提权漏洞获得$10000赏金

    之前,我从没参加过GitHub官方的一些漏洞众测项目,在HackerOne发起的HackTheWorld比赛中,主办方宣传除了赏金以外,还有机会获得Github提供的终身无限制私有库(unlimite ...

  9. 白天做安全,晚上去挖洞

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 今天带来的是Kaung Htete Aung (@ris) 和 Samuel Eng (@samengmg) 的故事.他们来自新加坡, ...

最新文章

  1. TensorFow的基本使用
  2. unity调用普通java类_Unity中C#和Java的相互调用实例代码
  3. 微型计算机硬件的最小配置包括,职中计算机应用基础第一章测试题及答案
  4. 不要和Java“结婚”
  5. python第三周测试_python第三周小测
  6. sql server累计求和函数_SQL基础--SQL高级功能
  7. Python装饰器(一)
  8. 十年架构师详解JVM运行原理
  9. 为jquery.AutoComplete添加触发事件
  10. 苹果mac视频音频格式转换软件:Permute
  11. 《数据科学:R语言实现》—— 第1章 R中的函数 1.1 引言
  12. IIS安装与部署,站点的部署与配置
  13. 关于DTC诊断故障码的获取与清除(ISO14229系列之14、19服务)
  14. M3U8视频流下载神器CocoCut
  15. Flink大声说,丢数据这个锅,我们不背!
  16. 撤销 git rebase
  17. 中国玉米面筋行业市场供需与战略研究报告
  18. 汽车之家APP车型口碑--参数分析
  19. 用友安装时显示加密服务器,用友云主机指向加密服务器
  20. pycharm编写的py文件如何在linux下通过 ./ 运行,初识shebang

热门文章

  1. bugku source
  2. 利用CSS设置背景图片不显示的问题
  3. 微信小程序组件不显示
  4. Eclipse WTP使用经验--禁用自动发布到服务器
  5. lite version是什么
  6. 海龟画图 python太阳花_python画图之“小海龟”turtle
  7. 判断浏览器是否是微信,判断手机是安卓还是ios
  8. 多维数组降一维——自码土法递归降维人都难理清的复杂多维数组。
  9. Python—序列化模块
  10. 《万岁,高三2班》剧照及剧组采访文章