首页 > 编程语言 >【Python&GIS】基于Geopandas和Shapely计算矢量面最短路径

【Python&GIS】基于Geopandas和Shapely计算矢量面最短路径

时间:2024-07-03 10:55:37浏览次数:15  
标签:distance plt GIS Shapely point1 Python geometry point2 ax

        在GIS进行空间分析时经常会需要计算最短路径,我也是最近在计算DPC的时候有这方面的需求,刚开始直接是用面的中心点求得距离,但其对不规则或空洞面很不友好。所以今天跟大家分享一下基于Geopandas和Shapely计算矢量面最短路径,这里的最短即点/边的最短!

原创作者:RS迷途小书童

博客地址:https://blog.csdn.net/m0_56729804?type=blog

# -*- coding: utf-8 -*-
"""
@Time : 2024/7/3 9:52
@Auth : RS迷途小书童
@File :Vectors Data Short Distance.py
@IDE :PyCharm
@Purpose:检查两个要素的最短路径
@Web:博客地址:https://blog.csdn.net/m0_56729804
"""
from shapely.geometry import Polygon
from shapely.ops import nearest_points
import matplotlib.pyplot as plt
import geopandas as gpd


def check_short_distance_between_vector(shp_path=r"Y:\1.shp"):
    """
    :param shp_path: 输入面矢量文件,默认计算前两个要素的最短路径
    :return: 最近点1,最近点2,最短路径
    """
    gdf = gpd.read_file(shp_path)
    list_geometry = []
    for index, row in gdf.iterrows():  # 循环矢量属性表
        geometry = row['geometry']
        list_geometry.append(geometry)
    # polygon1 = Polygon([(0, 0), (1, 0), (1, 1), (0, 1)])
    # polygon2 = Polygon([(2, 2), (3, 2), (3, 3), (2, 3)])
    polygon1, polygon2 = list_geometry[0], list_geometry[1]
    point1, point2 = nearest_points(polygon1, polygon2)  # 使用 nearest_points 函数找到两个多边形之间的最近点
    distance = point1.distance(point2)  # 计算两点之间的距离
    print(f"The shortest path between the two polygons is {distance} units.")
    print(f"The points are {point1} and {point2}.")
    fig, ax = plt.subplots()  # 可视化两个多边形和最短路径
    x1, y1 = polygon1.exterior.xy
    x2, y2 = polygon2.exterior.xy
    ax.plot(x1, y1, color='blue', label='Polygon 1')  # 绘制多边形
    ax.plot(x2, y2, color='green', label='Polygon 2')
    ax.plot([point1.x, point2.x], [point1.y, point2.y], color='red', linestyle='--', label='Shortest Path')  # 绘制最短路径
    ax.scatter([point1.x, point2.x], [point1.y, point2.y], color='red')
    ax.legend()
    plt.xlabel('X')
    plt.ylabel('Y')
    plt.title('Shortest Path between Two Polygons')
    plt.grid(True)
    plt.show()
    return point1, point2, distance


if __name__ == "__main__":
    check_short_distance_between_vector()

标签:distance,plt,GIS,Shapely,point1,Python,geometry,point2,ax
From: https://www.cnblogs.com/RSran/p/18281161

相关文章

  • python+中医病案管理系统设计与实现-计算机毕业设计源码131320
    摘 要随着互联网时代的到来,同时计算机网络技术高速发展,网络管理运用也变得越来越广泛。因此,建立一个B/S结构的中医病案管理系统,会使;中医病案管理系统的管理工作系统化、规范化,也会提高平台形象,提高管理效率。本系统是针对目前中医病案管理系统的实际需求,从实际工作出发,对过......
  • Python面试题:Python 中的列表和元组有什么区别?
    Python中的列表和元组的主要区别如下:可变性:列表(List):可变,意味着可以改变列表的内容(添加、删除或修改元素)。元组(Tuple):不可变,一旦创建后,不能修改其内容。语法:列表使用方括号[]创建。例如:my_list=[1,2,3]元组使用圆括号()创建。例如:my_tuple=(1,2,3)性能:......
  • PyCharm2024 for mac Python编辑开发
    Mac分享吧文章目录效果一、下载软件二、开始安装1、双击运行软件(适合自己的M芯片版或Intel芯片版),将其从左侧拖入右侧文件夹中,等待安装完毕2、应用程序显示软件图标,表示安装成功3、打开访达,点击【文稿】。将安装包内的【ja-netfilter】文件夹拖到文稿中4、填写内容,修改用......
  • 人工智能为什么建议用python
    人工智能应用开发经常选择Python语言,原因包括但不限于以下几点:1.**简洁易学**:Python语言简洁清晰,易于学习,使得开发人员可以快速上手并进行开发。2.**丰富的库和框架**:Python拥有大量的科学计算和数据分析库,如NumPy、Pandas、Matplotlib等,以及专门为机器学习和深度学习设......
  • Python: slicing
     #pythonslicing和函数range差不多,起始值,最后值,步长值a='abcdefghijklmnopqrstuvwxyz'print(a[:],end='\n')#abcdefghijklmnopqrstuvwxyzprint(a[:5],end='\n')#abcdeprint(a[:-1],end='\n')#abcdefghijklmnopqrstuvwxy......
  • Python 引用不确定的函数
    在Python中,引用不确定的函数通常意味着我们可能在运行时才知道要调用哪个函数,或者我们可能想根据某些条件动态地选择不同的函数来执行。这种灵活性在处理多种不同逻辑或根据不同输入参数执行不同操作的场景中非常有用。以下是如何实现这一点的详细介绍和具体代码示例。1.Python......
  • 汽车之家论坛评论全面采集实战指南:Python爬虫篇
    聚焦汽车之家,解锁评论宝藏在这个数据为王的时代,每一个角落的信息都可能成为宝贵的洞察来源。汽车之家,作为汽车行业内的权威论坛,其海量的用户评论不仅是消费者购车的重要参考,也是汽车品牌与市场研究者不可忽视的数据金矿。本文将手把手教你如何利用Python爬虫技术,高效采集汽车......
  • Python大数据复习题
    Python大数据复习题第一章创建一个Python脚本,命名为test1.py,实现以下功能。定义一个元组t1=(1,2,‘py’,‘matlab’)和一个空列表list1。以while循环的方式,用append()函数依次向list1中添加t1中的元素。定义一个空字典,命名为dict1。定义一个嵌套列表Li=[‘k’,[3,4,5],(1,2,6),18......
  • python解析Linux top 系统信息并生成动态图表(pandas和matplotlib)
    文章目录0.引言1.功能2.使用步骤3.程序架构流程图结构图4.数据解析模块5.图表绘制模块6.主程序入口7.总结8.附录完整代码0.引言在性能调优和系统监控中,top命令是一种重要工具,提供了实时的系统状态信息,如CPU使用率、内存使用情况和进程状态。然而,仅凭......
  • Python学习笔记
    数据类型和变量字面量:在代码中,被写下来的固定的值。常见有6中,数字、字符串、列表、元组、集合、字典字符串:由任意数量的字符如中文、英文、各类符合、数字等组成。如“你好”,“hello”,在Python中被双引号引起来的就是字符串。注释:在程序代码中对程序代码进行解释说明的文字。......