geopandas
def gcj02_to_wgs84(lng, lat):
"""
GCJ02(火星坐标系)转GPS84
:param lng:火星坐标系的经度
:param lat:火星坐标系纬度
:return:
"""
pi = 3.1415926535897932384626 # π
x_pi = 3.14159265358979324 * 3000.0 / 180.0
a = 6378245.0 # 长半轴
ee = 0.00669342162296594323
if out_of_china(lng, lat):
return [lng, lat]
dlat = _transformlat(lng - 105.0, lat - 35.0)
dlng = _transformlng(lng - 105.0, lat - 35.0)
radlat = lat / 180.0 * pi
magic = math.sin(radlat)
magic = 1 - ee * magic * magic
sqrtmagic = math.sqrt(magic)
dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi)
dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi)
mglat = lat + dlat
mglng = lng + dlng
return lng * 2 - mglng, lat * 2 - mglat
def project_circum_polygon(project_lng,project_lat,km):
'''
根据坐标和半径获得轮廓
'''
project_lng_wsg,project_lat_wsg=gcj02_to_wgs84(project_lng,project_lat)[0],ts.gcj02_to_wgs84(project_lng,project_lat)[1]
#定义投影转换器
transformer=Transformer.from_crs('epsg:4326','epsg:32650',always_xy=True)
projected_center=transformer.transform(project_lng_wsg,project_lat_wsg)
#创建polygon对象
center=Point(projected_center)
#计算轮廓
radius=km*1000
circle_projected=center.buffer(radius)
#转回WGS坐标系
circle=gpd.GeoSeries(circle_projected,crs='epsg:32650').to_crs('epsg:4326')
gdf=gpd.GeoDataFrame(geometry=circle)
#转回GCJ坐标,假的WGS
circle1=ts.create_polygon_gcj(calculate_wkt_clean(circle.iloc[0]))
gdf1=gpd.GeoDataFrame(geometry=gpd.GeoSeries(circle1),crs='EPSG:4326')
return gdf,gdf1
def dianping_data_sjoin(engine4,city_id,reachable):
'''
获得区域内点评数据
'''
print(f'读取该区域{city_id}城市的大众点评数据')
dianping_data_sql = "select a.*,b.ws_cityid,b.gcj_lat,b.gcj_lng from dianping_shop_2023_clean a left join dianping_shop_2023 b on a.shopuuid=b.shopuuid where b.ws_cityid = {} and b.closed=0".format(city_id)
dianping_data=pd.read_sql(dianping_data_sql,con=engine4)
dianping_data=dianping_data.rename(columns={'backCategoryName':'categoryName','final_ws_brandid':'brand_id'})
dianping_data_gpd=gpd.GeoDataFrame(dianping_data,geometry=[Point(xy) for xy in zip(dianping_data['gcj_lng'],dianping_data['gcj_lat'])])
dianping_in_circle = gpd.sjoin(dianping_data_gpd, reachable, op='within')
assert not dianping_in_circle.empty, "No data found within the reachable area"
return dianping_in_circle
读取远程共享地址
from smb.SMBConnection import SMBConnection
# 设置共享信息
server_ip = '192.168.2.123' # 替换为服务器 IP 地址
shared_folder = 'zhongtai-python-data' # 替换为共享文件夹名称
username = 'zhongtai' # 替换为有效的用户名
password = '[Ps)f(Nhc4bRo#8d%5J0Mw4bW0Anm5' # 替换为有效的密码
client_name = 'client_name' # 你的客户端名称,可以是任意字符串
domain_name = '' # 如果不需要域名,可以留空
# 创建 SMB 连接
conn = SMBConnection(username, password, client_name, server_ip, domain=domain_name, use_ntlm_v2=True)
try:
# 连接到服务器
conn.connect(server_ip, 445) # 445 是常用的 SMB 端口
print("连接成功!")
# 列出共享文件夹中的文件
files = conn.listPath(shared_folder, '') # 读取共享根目录
print("共享文件夹中的文件:")
for file in files:
print(f"- {file.filename}")
# 如果您想读取特定文件,可以使用如下方法
# file_name = 'example.txt' # 替换为您想读取的文件名
# with open('local_file.txt', 'wb') as local_file: # 在本地保存的文件名
# conn.retrieveFile(shared_folder, file_name, local_file)
except Exception as e:
print(f"连接或读取文件时出错: {e}")
或者直接用path读取
import os
path=r"\\192.168.2.123\zhongtai-python-data"
files = os.listdir(path)
for file in files:
print(file)