欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > 矢量数据创建

矢量数据创建

2024/10/24 9:21:29 来源:https://blog.csdn.net/d8dongdong/article/details/141534013  浏览:    关键词:矢量数据创建

这里写目录标题

  • 1. 创建矢量
    • 1.1创建矢量
    • 1.2 创建多点
    • 1.3 创建线几何
    • 1.4 多线
    • 1.5 创建单个多边形
    • 1.6创建多个面
  • 总结

1. 创建矢量

点是线、面矢量的基本单元,

1.1创建矢量

	import osfrom osgeo import ogr# 创建点矢量几何,只包含一个点firepit = ogr.Geometry(ogr.wkbPoint)# 方式1:添加几何属性:(x,y)firepit.AddPoint(59.5, 11.5)# 访问几何属性x, y = firepit.GetX(), firepit.GetY()print('{}, {}'.format(x, y))# 方式2:添加几何属性(此操作实际是修改几何属性,因为点几何,只包含一个点)firepit.SetPoint(0, 59.5, 13)print(firepit)# 添加Z值,但在进行集合操作过程中Z值会被忽略firepit = ogr.Geometry(ogr.wkbPoint25D)firepit.AddPoint(59.5, 11.5, 2)print(firepit)

1.2 创建多点

# 点文件,多点文件
# 多点文件是点文件的集合,包含多个点,具有对应的索引
faucets = ogr.Geometry(ogr.wkbMultiPoint)
faucet = ogr.Geometry(ogr.wkbPoint)
faucet.AddPoint(67.5, 16)
faucets.AddGeometry(faucet)
faucet.AddPoint(73, 31)
faucets.AddGeometry(faucet)
faucet.AddPoint(91, 24.5)
faucets.AddGeometry(faucet)
# 修改第二个点的坐标
faucets.GetGeometryRef(1).AddPoint(75, 32)
# 基于原始坐标,创建一组偏移的坐标点
# 创建了一组新的点
for i in range(faucets.GetGeometryCount()):pt = faucets.GetGeometryRef(i)pt.AddPoint(pt.GetX() + 2, pt.GetY())

1.3 创建线几何

线几何要素是基于点列表创建

# 按顺序添加点坐标来创建线矢量
sidewalk = ogr.Geometry(ogr.wkbLineString)
sidewalk.AddPoint(54, 37)
sidewalk.AddPoint(62, 35.5)
sidewalk.AddPoint(70.5, 38)
sidewalk.AddPoint(74.5, 41.5)
# 更改第三个点
sidewalk.SetPoint(3, 76, 41.5)
# 移动线矢量一个单元
for i in range(sidewalk.GetPointCount()):sidewalk.SetPoint(i, sidewalk.GetX(i), sidewalk.GetY(i) + 1)# 获取线矢量的顶点数量
print(sidewalk.GetPointCount()) # vertices
# 几何数量
print(sidewalk.GetGeometryCount()) # sub-geometries# 修改原有的点坐标,移动线矢量回到原来的位置
for i in range(sidewalk.GetPointCount()):sidewalk.SetPoint(i, sidewalk.GetX(i), sidewalk.GetY(i) - 1)
# 访问线的点坐标列表
print(sidewalk.GetPoints())
# 插入一个点
vertices = sidewalk.GetPoints()
vertices[2:2] = [(66.5, 35)]
print(vertices)
# Create a new line geometry from the list of vertices.
new_sidewalk = ogr.Geometry(ogr.wkbLineString)
for vertex in vertices:new_sidewalk.AddPoint(*vertex)
'''*vertex,中的*的作用的是将列表或元祖拆分为单个元素'''

1.4 多线

path1 = ogr.Geometry(ogr.wkbLineString)
path1.AddPoint(61.5, 29)
path1.AddPoint(63, 20)
path1.AddPoint(62.5, 16)
path1.AddPoint(60, 13)path2 = ogr.Geometry(ogr.wkbLineString)
path2.AddPoint(60.5, 12)
path2.AddPoint(68.5, 13.5)path3 = ogr.Geometry(ogr.wkbLineString)
path3.AddPoint(69.5, 33)
path3.AddPoint(80, 33)
path3.AddPoint(86.5, 22.5)paths = ogr.Geometry(ogr.wkbMultiLineString)
paths.AddGeometry(path1)
paths.AddGeometry(path2)
paths.AddGeometry(path3)# 编辑第一条路径的第二个点
paths.GetGeometryRef(0).SetPoint(1, 63, 22)## 通过修改坐标点来移动线矢量
for i in range(paths.GetGeometryCount()):path = paths.GetGeometryRef(i)for j in range(path.GetPointCount()):path.SetPoint(j, path.GetX(j) + 2, path.GetY(j) - 3)

1.5 创建单个多边形

# 创建线矢量
ring = ogr.Geometry(ogr.wkbLinearRing)
ring.AddPoint(58, 38.5)
ring.AddPoint(53, 6)
ring.AddPoint(99.5, 19)
ring.AddPoint(73, 42)
# 创建面矢量
yard = ogr.Geometry(ogr.wkbPolygon)
yard.AddGeometry(ring)
# 闭合矢量
yard.CloseRings()

1.6创建多个面

box1 = ogr.Geometry(ogr.wkbLinearRing)
box1.AddPoint(87.5, 25.5)
box1.AddPoint(89, 25.5)
box1.AddPoint(89, 24)
box1.AddPoint(87.5, 24)
garden1 = ogr.Geometry(ogr.wkbPolygon)
garden1.AddGeometry(box1)box2 = ogr.Geometry(ogr.wkbLinearRing)
box2.AddPoint(89, 23)
box2.AddPoint(92, 23)
box2.AddPoint(92,22)
box2.AddPoint(89,22)
garden2 = ogr.Geometry(ogr.wkbPolygon)
garden2.AddGeometry(box2)gardens = ogr.Geometry(ogr.wkbMultiPolygon)
gardens.AddGeometry(garden1)
gardens.AddGeometry(garden2)
# 闭合多个面
gardens.CloseRings()
# 创建带空洞的面
# 带空洞的面是由两个线线矢量组合而成
lot = ogr.Geometry(ogr.wkbLinearRing)
lot.AddPoint(58, 38.5)
lot.AddPoint(53, 6)
lot.AddPoint(99.5, 19)
lot.AddPoint(73, 42)house = ogr.Geometry(ogr.wkbLinearRing)
house.AddPoint(67.5, 29)
house.AddPoint(69, 25.5)
house.AddPoint(64, 23)
house.AddPoint(69, 15)
house.AddPoint(82.5, 22)
house.AddPoint(76, 31.5)yard = ogr.Geometry(ogr.wkbPolygon)
yard.AddGeometry(lot)
yard.AddGeometry(house)
yard.CloseRings()

总结

点是操作矢量的基本元素,根据根据点列表可以创建线,线是基本单元,因此由面生成线与由线生成点,都是在现有矢量的基础上获取点列表,然后根据列表创建新的图层
Fiona:几何数据读写
shapely:几何数据分析
shapely不支持坐标系转换。对两个或多个特征的所有操作都假定这些特征存在于同一笛卡尔平面中。
常用矢量操作:矢栅转换、擦除、叠加、缓冲区分析

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com