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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • VUE学习笔记 2
  • ElasticSearch 8.15.0 与 Kibana 8.15.0 尝鲜体验
  • 2 种方式申请免费 SSL 证书,阿里云 Certbot
  • CSS\JS实现页面背景气泡logo上浮效果
  • 【Mybatis】介绍+搭建+参数传递+增删改查操作+事务与连接池
  • rufus制作启动U盘启动/刻盘
  • 一些近期用的Linux命令
  • 幂等方案分析
  • 【6.0】axios的高级用法
  • 开发团队如何应对突发的技术故障和危机?
  • docker容器安装图形界面
  • 指针(二)
  • 【Python机器学习】NLP概述——超空间简述
  • 如何在项目管理中完成项目立项?
  • 图论:描述有限离散集合中元素间关系
  • 时间复杂度分析经典问题——最大子序列和
  • 【Amaple教程】5. 插件
  • 【许晓笛】 EOS 智能合约案例解析(3)
  • 2017年终总结、随想
  • Android开发 - 掌握ConstraintLayout(四)创建基本约束
  • angular学习第一篇-----环境搭建
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • nodejs实现webservice问题总结
  • PHP面试之三:MySQL数据库
  • SOFAMosn配置模型
  • Spring Cloud中负载均衡器概览
  • Vue2.0 实现互斥
  • Zepto.js源码学习之二
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 使用Swoole加速Laravel(正式环境中)
  • 在electron中实现跨域请求,无需更改服务器端设置
  • PostgreSQL 快速给指定表每个字段创建索引 - 1
  • 说说我为什么看好Spring Cloud Alibaba
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • #### go map 底层结构 ####
  • #我与Java虚拟机的故事#连载14:挑战高薪面试必看
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (9)STL算法之逆转旋转
  • (PHP)设置修改 Apache 文件根目录 (Document Root)(转帖)
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (幽默漫画)有个程序员老公,是怎样的体验?
  • (转)程序员技术练级攻略
  • (转)人的集合论——移山之道
  • (转载)PyTorch代码规范最佳实践和样式指南
  • .【机器学习】隐马尔可夫模型(Hidden Markov Model,HMM)
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .net 生成二级域名
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .py文件应该怎样打开?
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成