根据矩形角点生成矩形shapefile文件

题目:将下表中每一行的经纬度范围生成矩形,最后导出成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文件

猜你喜欢

转载自blog.csdn.net/weixin_44346222/article/details/87898047