几何对象

  • 点:object表示空间中的单个点。点可以是二维(x,y)或三维(x,y,z)。
  • 线:表示连接在一起形成一条线的一系列点。因此,一行包含至少两个坐标元组的列表
  • 面:表示填充区域,该区域由至少三个形成外环的坐标元组列表和一个(可能的)多边形列表组成。
  • 多点:表示一组点,由一系列坐标元组组成
  • 多线:表示一组行,由一系列行序列组成
  • 多面:表示多边形的集合,该多边形由一系列多边形序列组成,这些序列由外环和(可能的)孔列表元组构成

  点

    创建一个点:

from shapely.geometry import Point, LineString, Polygon # 首先导入第三方包shapely
point1 = Point(2.2, 4.2)
point2 = Point(7.2, -25.1)
point3 = Point(9.26, -2.456)
      point3D = Point(9.26, -2.456, 0.57)      # 创建了四个点,前三个是二维点,第四个为三维点
我们可以使用print()开查看一下点
print(point1)      # POINT(2.2 4.2)
      print(point3D)     # POINT Z(9.26 -2.456 0.57)
      print(type(point1))  # <class 'shapely.geometry.point.Point'>
    提取坐标点的X,Y坐标
      x = point1.x    #将point1的x坐标赋给x
      y = point1.y    #将point1的y坐标赋给y
      xy = point_coordinates.xy    #  输出的结果为 (array('d',[2.2]),array('d',[4.2]))
    我们还可以直接计算已经定义好的两个点的距离
      distance = point1.disatance(point2) 
      print('Distance between the points is {0:.2f} decimal degrees'.format(distance))  # 将point1点和point2点的距离算出赋给distance,并且输出  线

  线

    创建线的两种方法

      line = LineString(piont1,point2,point3)   # 将已知的三个点作为线

      line2 = LineString([(2.2,4.2),(7.2,-25.1),(9.26,-2.456)])   #根据已知的线点坐标作为线

我们也可以提取线上点的坐标
      line.xy      # 输出的结果为 (array('d',[2.2,7.2,9.26]),array('d',[4.2,-25.1,-2.456]))
      line.xy[0]   # 输出线上点的x坐标
      line,xy[1]   # 输出线上点的y坐标
    我们可以查询线的长度,中心点
      line.lenght   # 长度
      line.centroid # 中心点

   面

    创建面的两种方法

     

poly = Polygon([(2.2, 4.2), (7.2, -25.1), (9.26, -2.456)])    #将已知的三个点作为面
      poly2 = Polygon([[p.x, p.y] for p in [point1, point2, point3]])

    创建一个内部有孔的面

world_exterior = [(-180, 90), (-180, -90), (180, -90), (180, 90)]
      hole = [[(-170, 80), (-170, -80), (170, -80), (170, 80)]]
world = Polygon(shell=world_exterior)
      world_has_a_hole = Polygon(shell=world_exterior, holes=hole)

    可以提取面的中心点,面积,边界,外观 和外观长度

    

world.centroid   # 中心点
      world.area        #面积
      world.bounds   #边界
      world.exterior  #外观
      world.lenght    #外观长度

   多点,多线,多面

    创建多点,多线,多面

from shapely.geometry import MultiPoint, MultiLineString, MultiPolygon, box          # 导入第三方包
     multi_point = MultiPoint([point1, point2, point3])
     multi_point2 = MultiPoint([(2.2, 4.2), (7.2, -25.1), (9.26, -2.456)])     #创建多点的两种形式
     line1 = LineString([point1, point2])
line2 = LineString([point2, point3])
     multi_line = MultiLineString([line1, line2])                      #创建多线
= [(-180, 90), (-180, -90), (0, -90), (0, 90)]
     west_hole = [[(-170, 80), (-170, -80), (-10, -80), (-10, 80)]]
     west_poly = Polygon(shell=west_exterior, holes=west_hole)   #创建面
     min_x,mix_y = 0,-90 
     max_x,max_y = 180,90
     east_poly_box = box(minx=min_x, miny=min_y, maxx=max_x, maxy=max_y)   #创建面
     multi_poly = MultiPolygon([west_poly, east_poly_box])     #创建多面

    多点,多线,多面的一些属性

     

convex = multi_point.convex_hull     #  以多点创建多边形
      lines_count = len(multi_line)             #  计算多线的条数
      multi_poly_area = multi_poly.area    #  计算多面的面积
      west_area = multi_poly[0].area         #  计算多面中第一个面的面积