手机网站域名m打头,锦州网站建设多少钱,全球搜索引擎市场份额,东莞网站推广运营【ArcGIS】根据shp范围生成系列等距点 目标1#xff1a;生成边界外一定范围、并且等间距分布的点#x1f4c1; 所需数据#xff1a;操作步骤-ArcGIS代码处理-Python 目标2#xff1a;生成等距渔网点#x1f4c1; 所需数据#xff1a;代码处理-Python 参考 目标1#xff… 【ArcGIS】根据shp范围生成系列等距点 目标1生成边界外一定范围、并且等间距分布的点 所需数据操作步骤-ArcGIS代码处理-Python 目标2生成等距渔网点 所需数据代码处理-Python 参考 目标1生成边界外一定范围、并且等间距分布的点
目标生成位于 某地区边界外一定范围、并且等间距分布的点图层。 所需数据
研究区边界 .shp 文件Polygon 类型
操作步骤-ArcGIS
ArcGIS 中最简单的方式是
对边界生成缓冲区一定距离 例如 50 km将边界 缓冲区边界都转为线Polyline在缓冲区边界线外圈上以等间距生成点
代码处理-Python
以重庆市为例生成的外部等距点如下
Python完整代码如下
import arcpy
import os# 输入路径替换为你的路径
input_shp rD:\0 DataBase\0 Chongqin Database\1 Boundary\Chongqing.shp
workspace rD:\0 DataBase\0 Chongqin Database\1 Boundary\temp_boundary_points
csv_output rD:\0 DataBase\0 Chongqin Database\1 Boundary\Boundary_Chongqing.csv# 设置环境
arcpy.env.overwriteOutput True
if not os.path.exists(workspace):os.makedirs(workspace)
arcpy.env.workspace workspace# 坐标系
prj arcpy.SpatialReference(4548) # CGCS2000 / UTM Zone 48N
wgs84 arcpy.SpatialReference(4326) # WGS84 经纬度try:# 1. 投影为米制projected os.path.join(workspace, Chongqing_projected.shp)arcpy.Project_management(input_shp, projected, prj)# 2. 创建缓冲区50公里buffer os.path.join(workspace, Chongqing_buffer.shp)arcpy.Buffer_analysis(projected, buffer, 50000 Meters, dissolve_optionALL)# 3. 缓冲区转为边界线buffer_line os.path.join(workspace, buffer_line.shp)arcpy.PolygonToLine_management(buffer, buffer_line)# 4. 沿线生成等间距点20km 间距points_on_line os.path.join(workspace, control_points.shp)arcpy.GeneratePointsAlongLines_management(buffer_line,points_on_line,DISTANCE,20000 Meters,,NO_END_POINTS)# 5. 投影为 WGS84points_wgs84 os.path.join(workspace, control_points_wgs84.shp)arcpy.Project_management(points_on_line, points_wgs84, wgs84)# 6. 添加几何属性使用合法值 POINT_X_Y_Z_Marcpy.AddGeometryAttributes_management(points_wgs84,POINT_X_Y_Z_M)# 7. 导出为 CSVarcpy.TableToTable_conversion(points_wgs84,os.path.dirname(csv_output),os.path.basename(csv_output))print(✅ 成功生成控制点 CSV 文件Boundary_Chongqing.csv)except Exception as e:print(❌ 脚本运行出错, str(e))目标2生成等距渔网点
生成shp边界范围内的等距渔网点如下 所需数据
研究区边界 .shp 文件Polygon 类型
代码处理-Python
以重庆市为例生成的渔网如下仅保留边界内数据
Python完整代码如下
import geopandas as gpd
from shapely.geometry import Point
import pandas as pd
import numpy as np
import osdef generate_grid_points(shp_pathNone,output_csvpop_location_d01.csv,spacing0.1,filter_by_shpTrue
):生成等距网格点支持基于Shapefile筛选或仅参考其范围生成。参数shp_path (str): SHP文件路径若 filter_by_shpTrue 时必须提供output_csv (str): 输出CSV文件名spacing (float): 网格间隔单位度filter_by_shp (bool): 是否根据SHP边界筛选点返回pd.DataFrame: 包含经纬度的DataFrame# 检查shp文件路径无论 filter_by_shp 为True或False都需要范围if shp_path is None or not os.path.exists(shp_path):raise ValueError(必须提供有效的 shp_path。)# 读取边界gdf_boundary gpd.read_file(shp_path)gdf_boundary gdf_boundary.to_crs(epsg4326)minx, miny, maxx, maxy gdf_boundary.total_bounds# 向外扩展到最接近的整数minX np.floor(minx)maxXX np.ceil(maxx)minY np.floor(miny)maxY np.ceil(maxy)# 生成经纬度序列lon_vals np.arange(minx, maxx spacing, spacing)lat_vals np.arange(miny, maxy spacing, spacing)# 创建所有网格点grid_points [Point(lon, lat) for lon in lon_vals for lat in lat_vals]gdf_points gpd.GeoDataFrame(geometrygrid_points, crsEPSG:4326)# 如果需要进行边界筛选if filter_by_shp:gdf_points gdf_points[gdf_points.within(gdf_boundary.unary_union)]# 提取经纬度gdf_points[lon] gdf_points.geometry.xgdf_points[lat] gdf_points.geometry.y# 保存为CSVgdf_points[[lon, lat]].to_csv(output_csv, indexFalse, encodingutf-8)print(f✅ 成功生成 {len(gdf_points)} 个网格点已保存到{output_csv})return gdf_points[[lon, lat]]# 示例调用
generate_grid_points(shp_pathrD:\0 DataBase\0 Chongqin Database\1 Boundary\Chongqing.shp,output_csvpop_location_d01_CQ.csv,spacing0.1,filter_by_shpFalse # 不进行空间筛选但以shp边界范围扩展生成
)参考