当前位置: 首页 > news >正文

矢量数据创建

这里写目录标题

  • 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不支持坐标系转换。对两个或多个特征的所有操作都假定这些特征存在于同一笛卡尔平面中。
常用矢量操作:矢栅转换、擦除、叠加、缓冲区分析


http://www.mrgr.cn/news/9581.html

相关文章:

  • 前端性能优化:构建快速且流畅的Web体验
  • 基于pygame的雷电战机小游戏
  • 【初阶数据结构】顺序表和链表算法题(上)
  • SpringCloud Gateway及 Springboot 服务 跨域配置
  • 【Tesla FSD V12的前世今生】从模块化设计到端到端自动驾驶技术的跃迁
  • 使用 Vue I18n 进行 Vue.js 应用的国际化
  • Java超市收银系统(十、爬虫)
  • vue 精选评论词云 集成echarts-wordcloud TF-IDF算法
  • PDF文件切割,无大小限制
  • Linux文件目录系统
  • ES6 中的 Set 对象
  • 【Linux入门】shell基础篇——shell的构成及基础调试
  • Excel VBA 编程学习指南,1.1 什么是VBA及其应用场景
  • 【ORACLE】listagg() 函数
  • 鸿蒙HarmonyOS开发:如何灵活运用动画效果提升用户体验
  • 深入解析浏览器与Web服务器的通信机制:从URL输入到页面渲染的全过程
  • Spring Boot OAuth2.0应用
  • HCIA云计算实验-1-存储实验
  • Linux云计算 |【第二阶段】SECURITY-DAY4
  • 学习记录:js算法(十):每日温度