进阶社工

进阶社工

近日无聊,看了一道社工题,如下:寻找拍照者所在的位置 xx省xx市xx县xx路口/与xx路口交汇处

你猜猜这是哪?

传统社工的思路

  1. 先根据车牌号 大致定位到 湖南省郴州市。
  2. 接下来通过抖音/大众点评/美团 搜索郴州市所有的银行/酒店,根据银行/酒店的外观进行一步步筛选,最后定位到具体位置。

传统社工显然纯纯体力活,非常浪费时间和精力,这里我无意中看到一篇进阶社工的文章,来介绍一下。

进阶社工

进阶社工使用到了一款叫做 《EasyPoi百度地图版》的工具,这款工具可以导出这个城市所有银行的地理位置信息,包括经纬度等信息

https://github.com/soaringsoul/easypoi

image-20250126175429092

如下:

image-20250126175548344

那我们就可以先检索这个城市的所有酒店的经纬度,再检索这个城市的所有酒店的经纬度,最后根据银行与酒店的距离进行筛选。

脚本如下:

import xlrd import math # 计算两个经纬度之间的距离 def calc_distance(lat1, lon1, lat2, lon2): # 计算两个经纬度之间的距离 # 公式参考:https://blog.csdn.net/jia20003/article/details/85214755 EARTH_RADIUS = 6378.137 # 地球半径 rad_lat1 = math.radians(lat1) rad_lat2 = math.radians(lat2) delta_lat = math.radians(lat2 - lat1) delta_lon = math.radians(lon2 - lon1) a = math.sin(delta_lat / 2) * math.sin(delta_lat / 2) + math.cos(rad_lat1) * math.cos(rad_lat2) * math.sin( delta_lon / 2) * math.sin(delta_lon / 2) c = 2 * math.atan2(math.sqrt(a), math.sqrt(1 - a)) distance = EARTH_RADIUS * c return distance # 读取excel中的经纬度信息 def read_excel(file_name): # 打开Excel文件 workbook = xlrd.open_workbook(file_name) # 获取所有sheet #sheet_name = workbook.sheet_names() # 根据sheet索引或者名称获取sheet内容 sheet = workbook.sheet_by_name('poi数据') # 获取行数和列数 rows = sheet.nrows cols = sheet.ncols # 读取经纬度信息 data = [] for i in range(rows): row_data = sheet.row_values(i) data.append(row_data) return data # 计算excel中所有经纬度之间的距离 # def calc_all_distance(data,data2): # #计算excel中所有经纬度之间的距离 # min_distance=999999 # min_list=[] # for i in range(1,len(data2)): # for j in range(1,len(data)): # # 获取两个经纬度 # lat1 = float(data2[i][17]) # lon1 = float(data2[i][16]) # lat2 = float(data[j][17]) # lon2 = float(data[j][16]) # # 计算距离 # distance = calc_distance(lat1, lon1, lat2, lon2) # if distance < min_distance: # min_distance=distance # min_name1=data[j][0] # min_name2=data2[i][0] # list_data = [min_name2, min_name1, min_distance] # min_distance=999999 # min_list.append(list_data) # sorted_list = sorted(min_list, key=lambda x: x[2]) # fp = open("./filter.log","w",encoding="utf8") # for k in range(len(sorted_list)): # print('['+str(k)+']'+sorted_list[k][0]+'和'+sorted_list[k][1]+'两点之间的距离:'+str(sorted_list[k][2]*1000)+' m') # x = '['+str(k)+']'+sorted_list[k][0]+'和'+sorted_list[k][1]+'两点之间的距离:'+str(sorted_list[k][2]*1000)+' m' # fp.write(x+"\n") # fp.close() def calc_all_distance(data,data2): #计算excel中所有经纬度之间的距离 min_list=[] for i in range(1,len(data2)): for j in range(1,len(data)): # 获取两个经纬度 lat1 = float(data2[i][17]) lon1 = float(data2[i][16]) lat2 = float(data[j][17]) lon2 = float(data[j][16]) # 计算距离 distance = calc_distance(lat1, lon1, lat2, lon2) dis_m = distance * 1000 if dis_m >= 100 and dis_m <= 200: min_name1=data[j][0] min_name2=data2[i][0] list_data = [min_name2, min_name1, distance] min_list.append(list_data) sorted_list = sorted(min_list, key=lambda x: x[2]) fp = open("./filter.log","w",encoding="utf8") for k in range(len(sorted_list)): print('['+str(k)+']'+sorted_list[k][0]+'和'+sorted_list[k][1]+'两点之间的距离:'+str(sorted_list[k][2]*1000)+' m') x = '['+str(k)+']'+sorted_list[k][0]+'和'+sorted_list[k][1]+'两点之间的距离:'+str(sorted_list[k][2]*1000)+' m' fp.write(x+"\n") fp.close() if __name__ == '__main__': # 读取excel中的经纬度信息 data = read_excel('./酒店.xlsx') data2 = read_excel('./银行.xlsx') # 计算excel中所有经纬度之间的距离 calc_all_distance(data,data2)

可以检索得到:

image-20250126175837895

事实上,如果可以的话,我们还可以引入第三个地理位置的经纬度,来再次进行筛选,或者我们也可以根据银行/酒店的名字、建筑规模来进行过滤。

一些不可忽视的问题

  • easypoi的神秘码需要充值才能使用。而且并不便宜。
  • 需要准确判断银行与酒店的距离才行,比如,我一开始以为这个银行与酒店最多50米远,没想到有124米的距离,这样的话,就会浪费了很多人力。
  • 再次使用easypoi的时候需要先删除 .rwb_soft\easypoi_baidu\tempdata\目录下的.csv文件才行
    image-20250126180435742

参考: https://fushuling.com/index.php/2023/04/23/das4-secret-of-bkfish出题笔记/


__EOF__

本文作者_TLSN
本文链接https://www.cnblogs.com/lordtianqiyi/p/18692049.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   TLSN  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示