题目:将下表中每一行的经纬度范围生成矩形,最后导出成shapefile文件
求解思路
import geopandas as gpd
import pandas as pd
import os
file_name = 'TK.xls'
df = pd.read_excel(file_name, encoding="utf-8")
df[["ID","纬度", "经度"]].head()
def DMS2decimal(DMS):
D_index = DMS.find("°")
M_index = DMS.find("′")
S_index = DMS.find("″")
D = int(DMS[: D_index])
M = int(DMS[D_index+1: M_index])
S = int(DMS[M_index+1: S_index])
return D + M / 60.0 + S / 3600.0
def split_x(x, method):
return method([DMS2decimal(_) for _ in x.split("—")])
df["L_Lat"] = df.apply(lambda x: split_x(x["纬度"], min), axis=1)
df["T_Lat"] = df.apply(lambda x: split_x(x["纬度"], max), axis=1)
df["L_Lon"] = df.apply(lambda x: split_x(x["经度"], min), axis=1)
df["R_Lon"] = df.apply(lambda x: split_x(x["经度"], max), axis=1)
df
from shapely.geometry import Polygon
def produce_rect_by_conner(values):
"""左下角逆时针开始"""
L_lon_value,R_lon_value,L_Lat_value,T_lat_value = values
LL = (L_lon_value, L_Lat_value) #左下角
RL = (R_lon_value, L_Lat_value)
RT = (R_lon_value,T_lat_value)
LT = (L_lon_value, T_lat_value)
return Polygon([LL, RL,RT, LT])
col_name = ["L_Lon", "R_Lon","L_Lat","T_Lat"]
df["geometry"] = df.apply(lambda x: produce_rect_by_conner(x[col_name]), axis=1)
shape_data = gpd.GeoDataFrame(df)
shape_data
save_data.crs = {'init' :'epsg:4326'} #指定坐标系
save_data.to_file("ZJK_TK.shp", encoding="utf-8") #导出shapefile文件