from osgeo import ogr
import pandas as pd
def extract_single_ring( point_list_str ):
ring_instance = ogr.Geometry(ogr.wkbLinearRing)
point_list = point_list_str.split(',')
count = 0
first_x = None
first_y = None
for item in point_list:
# 空格分割
str_list = item.split(' ')
if(len(str_list) == 2):
ring_instance.AddPoint_2D(float(str_list[0]), float(str_list[1]))
else:
print(str_list[0])
if(count == 0):
first_x = float(str_list[0])
first_y = float(str_list[1])
count = count+1
ring_instance.AddPoint_2D(first_x, first_y)
return ring_instance
"""
Now I have a list of ring objects. I want to group these rings by area.
In one area, one ring at least intersects with another. please use python.
finally, I want to get the grouped ring with one list that contains lists of rings.
"""
def group_rings(ogr_ring_list):
grouped_rings = []
while(ogr_ring_list):
current_ring = ogr_ring_list.pop(0)
group = [current_ring]
i = 0
while i < len(ogr_ring_list):
if current_ring.Intersect(ogr_ring_list[i]):
group.append(ogr_ring_list.pop(i))
else:
i +=1
grouped_rings.append(group)
return grouped_rings
if __name__ == '__main__':
# Create a GeoJSON driver
driver = ogr.GetDriverByName("GeoJSON")
# Create a new GeoJSON data source
data_source = driver.CreateDataSource("my_geojson_file.geojson")
# Create a new layer within the data source with a specific geometry type (e.g., Point)
layer = data_source.CreateLayer("my_layer", geom_type=ogr.wkbUnknown)
# Define the layer's fields (e.g., name)
layer.CreateField(ogr.FieldDefn("id", ogr.OFTString))
layer.CreateField(ogr.FieldDefn("ext_path", ogr.OFTString))
layer.CreateField(ogr.FieldDefn("pid", ogr.OFTString))
layer.CreateField(ogr.FieldDefn("deep", ogr.OFTString))
layer.CreateField(ogr.FieldDefn("name", ogr.OFTString))
layer.CreateField(ogr.FieldDefn("geo_wkt", ogr.OFTString))
map = {'id':0,'pid':1,'deep':2,'name':3,'ext_path':4,'geo':5,'polygon':6}
df = pd.read_csv('ok_geo.csv',encoding='utf-8')
#### LOOP ####
for index, row in df.iterrows():
if(index == 0):
continue
geo_wkt_str = None
feature = ogr.Feature(layer.GetLayerDefn())
id_str = str(row.loc['id'])
feature.SetField("id", id_str)
feature.SetField("ext_path", str(row.loc['ext_path']) )
feature.SetField("pid", str(row.iloc[map['pid']]) )
feature.SetField("deep", str(row.iloc[map['deep']]) )
feature.SetField("name", str(row.iloc[map['name']]) )
feature.SetField("geo_wkt", f"POINT ({row.iloc[map['geo']]})" )
poly_str = row.iloc[map['polygon']]
center_str = row.iloc[map['geo']]
# 關注POLY邏輯
poly_instance = None
ring_instance = None
area_type = None
ring_temp = None
multi_type = None
group = None
# 根据区域个数预先处理
if ';' not in poly_str:
poly_instance = ogr.Geometry(ogr.wkbPolygon)
ring_instance = ogr.Geometry(ogr.wkbLinearRing)
area_type = 'single'
elif poly_str == "EMPTY":
continue
else:
area_type = 'multiple'
# 获取所有的环
if( area_type == 'single'):
# 按照逗号分割字符串
poly_instance.AddGeometry(extract_single_ring(poly_str))
elif (area_type == 'multiple'):
multi_list = poly_str.split(";")
ogr_ring_list = []
for ring_list in multi_list:
ogr_ring_list.append(extract_single_ring(ring_list))
# SORT THE LIST BY AREA
sorted_ogr_ring_list = sorted(ogr_ring_list, key=lambda ring: ring.GetArea(), reverse= True)
group = group_rings(sorted_ogr_ring_list)
multi_type = 'hole_poly' if len(group) == 1 else 'multipolygon'
if(multi_type == 'hole_poly'):
# TODO deal
poly_instance = ogr.Geometry(ogr.wkbPolygon)
for item in group[0]:
poly_instance.AddGeometry(item)
elif(multi_type == 'multipolygon'):
# TODO deal
poly_instance = ogr.Geometry(ogr.wkbMultiPolygon)
single_poly_inst = ogr.Geometry(ogr.wkbPolygon)
for poly in group:
for item in poly:
single_poly_inst.AddGeometry(item)
poly_instance.AddGeometry(single_poly_inst)
feature.SetGeometry(poly_instance)
layer.CreateFeature(feature) # push back the feature item
feature = None # Clear the feature to reuse it
# Save the changes and close the data source
data_source = None
相关推荐
189:vue+openlayers 上传CSV文件,导出Geojson格式文件
第189个本示例的目的是介绍演示如何在vue+openlayers上传CSV文件,导出GeoJSON文件。
开源项目推荐:csv2geojson
开源项目推荐:csv2geojson csv2geojson 是一个由 Mapbox 开发的开源项目,该项目的主要编程语言是 JavaScript。csv2geojson 可以将 CSV 和 TSV 文件转换为适合地图使用的 GeoJSON 数据格式。 1. 项目基础介绍 csv2geojson 是一个实用的工具,它能够帮助开发者轻松地将表格数据(如 CSV 或 TSV 格式)转换为 GeoJSO...
098:vue+leaflet 转换geojson文件,导出CSV格式文件
第098个本示例的目的是介绍演示如何在vue+leaflet中将geojson格式的文件做出转换,导出CSV格式文件。
【亲测免费】 CSV转GeoJSON神器:Mapbox的csv2geojson完全指南
CSV转GeoJSON神器:Mapbox的csv2geojson完全指南 项目介绍 csv2geojson 是由 Mapbox 开发的一个开源工具,它能够将简单的 CSV 文件转换成地理空间数据格式——GeoJSON。这个项目对于处理地理相关的数据,尤其是当你需要从非地理格式的数据中提取地理位置信息时,显得尤为强大。通过定义经纬度字段,csv2geojson 能够轻松地将你的表格数据转化为可以在...
csv2geojson-api:csv2geojson API,令人垂涎的OpenData
csv2geojson-api csv2geojson API,令人垂涎的OpenData 这是什么? REST API,可将包含位置信息的CSV数据转换为getjson并将其提交到指定的GitHub存储库。开发它主要是为了促进将CSV转换为geojson的过程的自动化,该过程向公众开放。 在GitHub上托管geojson的原因是geojson在。 设置 $ npm install -g swagger-node $ git clone $ cd $ npm install $ swagger project edit 打开其他终端窗口 $ GITHUB_USERNAME=[your github username] GITHUB_PASSWORD=[your github password] swagger project start API规范 只需将CSV转换为geojs
geojson2csv:将GeoJSON转换为CSV的快速而肮脏的方法
geojson2csv 将GeoJSON从OpenStreetMap转换为CSV的快速而肮脏的方式,将由HERE Data Lens使用。 这是一个。
ArcGIS QGIS学习二:图层如何只显示需要的部分几何面数据(附最新坐标边界下载全国省市区县乡镇)
当我们用GIS软件打开一个SHP文件的时候,会显示出里面全部的几何图形,假如我只想要其中的一部分数据显示出来,其他的均不要显示,有那么几种操作方法。我们可以通过把需要显示的几何面复制到另外一个图层里面来单独显示,但如果需要显示的区域一变,又要重新搞,不是很方便。ArcGIS和QIGS都支持筛选一个图层中的数据,提供类似SQL一样的查询语句,只需编写查询条件图层就会只显示匹配到的面。
【Musescore 】开源打谱软件 快速入门笔记
前两天做了个西贝柳斯的打谱软件学习笔记,反正都是初学,今天再来学习一款同类软件,比较之后确定一款深入学习。 西贝柳斯的学习笔记在此:https://blog.youkuaiyun.com/yuetaope/article/details/120020342 西贝柳斯是商业收费软件,要么花钱,要么盗版,如果您觉得这两者都不大好,那么推荐您试试Musescore。 Musescore是一款非常优秀的开源的打谱软件,生态繁荣。“开源”和“生态”是码农业的术语,我用正常人类的语言简单解释一下。 开源就是开放程序源代码,对码农
推荐开源项目:csv2geojson——将CSV转换为GeoJSON的利器
推荐开源项目:csv2geojson——将CSV转换为GeoJSON的利器 在地理信息系统领域,数据的格式转换是常见的需求。特别是当你手握大量的CSV(逗号分隔值)或TSV(制表符分隔值)表格数据时,如何快速高效地将其转化为适用于地图展示的GeoJSON格式呢?这就是csv2geojson项目的意义所在。 项目介绍 csv2geojson 是一个强大的工具,它可以轻松地将CSV和TSV文件转换成G...
嵌入式开发新思路:用QP框架5步搞定状态机设计(附STM32移植指南)
本文介绍了在嵌入式开发中使用QP框架进行状态机设计的新思路。通过对比传统RTOS与事件驱动模型的差异,详细解析了QP框架的核心组件与优势,并提供了基于STM32的5步实战指南,包括环境搭建、状态机实现与性能优化技巧,帮助开发者从顺序阻塞思维转向高效的事件驱动架构。
Nestjs框架: 集成 Prisma
NestJS官方文档提供了两种数据库相关的内容:Techniques下的数据库板块和Recipes下的具体数据库集成方案。本文以Prisma为例,演示了如何集成Prisma到NestJS项目中。首先创建NestJS项目并安装Prisma,配置MySQL数据库连接。通过Prisma CLI初始化项目、定义数据模型并生成迁移文件。接着创建Prisma模块和服务,配置Prisma客户端连接数据库。最后在控制器中注入PrismaService实现数据查询。整个过程包含了Docker启动MySQL、Prisma模型定
Mapbox CSV2GeoJSON:将CSV文件转换为GeoJSON格式
Mapbox CSV2GeoJSON:将CSV文件转换为GeoJSON格式 Mapbox CSV2GeoJSON 是一款开源工具,可以将 CSV 文件转换为 GeoJSON 格式。GeoJSON 是一种用于描述地理空间数据结构的格式,它是一种轻量级的数据交换格式,易于阅读和编写。CSV 文件是一种常见的表格数据格式,其中包含逗号分隔的值。 技术分析 Mapbox CSV2GeoJSON 是使用 J...
导出库的版本_Windows下PaddleOCR在C++中的推理部署(CPU版本)CMake + VS2017
PaddleOCR是一个与OCR相关的开源项目,不仅支持超轻量级中文OCR预测模型,总模型仅8.6M(单模型支持中英文数字组合识别、竖排文本识别、长文本识别,其中检测模型DB(4.1M)+识别模型CRNN(4.5M)),而且提供多种文本检测训练算法(EAST、DB)和多种文本识别训练算法(Rosetta、CRNN、STAR-Net、RARE)。本文将教大家通过PaddleOCR(CPU版...
终极GeoJSON工具大全:让地理数据处理变得简单高效的完整指南
GeoJSON作为基于JSON的地理数据交换格式,已经成为现代地理信息系统和地图应用的标准。无论你是开发人员、数据分析师还是地理爱好者,掌握合适的GeoJSON工具都能让你的地理数据处理工作事半功倍。本文将为你提供一份完整的GeoJSON工具清单,涵盖数据处理、可视化、转换和验证等各个方面,帮助你快速找到最适合项目需求的工具。 ## 🛠️ 数据处理与操作工具 ### 核心数据处理库 地理数
网络工程系统CAD图:从设计到落地的关键技能与实战指南
网络工程并不只是配置路由器和交换机,真正的核心在于将设计方案转化为可施工的物理图纸。网络工程系统CAD图正是连接逻辑设计与物理世界的桥梁,它涵盖综合布线、信息点布置、桥架路由、弱电间规划等关键内容。理解并掌握这套图纸体系,是网络工程师从基础设备调试走向项目主导者、弱电总工乃至网络架构师的重要分水岭。在园区网、数据中心、智能楼宇等真实场景中,一套规范的系统CAD图直接决定了施工质量、验收效率与后期运维的可靠性。本文从基础概念出发,拆解图纸的组成层次、绘制流程和软件工作流,并结合学习路线与就业方向,帮助初学者建
SpringBoot与锐浪报表服务器深度整合实战指南
本文详细介绍了SpringBoot与锐浪报表服务器的深度整合实战指南,包括环境准备、Windows/Linux系统配置、核心功能实现代码解析及常见问题解决方案。通过具体案例和代码示例,帮助开发者高效完成报表系统的集成与部署,提升企业级应用的报表处理能力。
终极GeoJSON工具大全:让地理数据处理变得简单高效
GeoJSON作为现代地理数据交换的标准格式,已经成为地图开发者和数据科学家的必备工具。无论是创建交互式地图、分析地理数据,还是构建位置智能应用,掌握高效的GeoJSON处理工具都能让你的工作事半功倍。本文将为你呈现一份完整的GeoJSON工具清单,涵盖数据处理、可视化、验证和转换等各个方面,帮助你快速找到最适合的工具解决方案。 ## 🚀 为什么你需要了解这些GeoJSON工具? 在现代地理
向华为学习——解读158页 华为敏捷园区网技术解决方案【附全文阅读】
华为敏捷园区网解决方案通过策略随行和体验随身技术,满足移动办公场景下的网络需求。该方案采用敏捷交换机和防火墙自动执行策略配置,实现用户身份认证与业务策略的无缝衔接,且策略配置与IP地址解耦,简化了管理流程。相比传统技术,该方案有效解决了用户分级、QoS保障、无线接入等关键问题,确保用户在移动过程中获得一致的网络体验。
前端解析csv或geojson文件并展示
本位通过FileReader实现csv或geojson文件的前端解析并在地图上展示。
7.3 空间矢量调制(SVM)整数算法
本文提出了一种基于整数运算的空间矢量调制(SVM)优化实现方案,适用于计算资源有限的Cortex-M0平台。针对传统SVM算法中复杂的三角函数和浮点运算问题,重点优化了扇区判断和占空比计算两个关键环节。在扇区判断方面,采用基于电压分量符号和相对大小的三变量法,避免了角度计算;在占空比计算方面,通过几何关系将作用时间表示为电压分量的线性组合,并采用定点数实现。方案还详细讨论了系数定点化、死区补偿等实现细节,在保证精度的同时显著降低了计算复杂度。实验结果表明,优化后的整数算法在M0平台上仅需50-80个周期即可
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
CSV to GeoJSON 转换工具常见问题解决方案
CSV to GeoJSON 转换工具常见问题解决方案 CSV to GeoJSON 是一个开源项目,它能够将 CSV 和 TSV 文件转换为适合在地图上使用的 GeoJSON 数据格式。该项目主要使用 JavaScript 编程语言。 新手常见问题及解决步骤 问题一:如何全局安装 csv2geojson 问题描述: 用户想要全局安装 csv2geojson,以便能够在命令行中直接使用。 解决步骤...
假人有限元模型
假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用
如何高效使用GeoJSON:面向开发者的完整工具指南
GeoJSON是一种基于JSON的地理数据交换格式,能够轻松存储和表示地理空间信息,是现代地理信息处理的核心技术。无论是地图应用开发、地理数据分析还是空间可视化项目,掌握GeoJSON相关工具都能极大提升工作效率。本文将为你详细介绍如何利用awesome-geojson项目中的资源,快速上手并高效使用GeoJSON。 ## 为什么GeoJSON成为地理数据处理的首选? GeoJSON凭借其简洁
Data-Structures-and-Algorithm-Analysis-in-Java.pdf
作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
GeoJSON终极指南:快速上手地理数据处理的完整工具清单
GeoJSON是一种基于JSON的地理数据交换格式,它能够轻松存储和表示地理空间信息,是现代地理信息处理的核心技术。无论你是前端开发者、数据分析师还是GIS专业人员,掌握GeoJSON都能让你的地理数据处理工作事半功倍。本文将为你提供一份完整的GeoJSON工具清单,帮助你快速上手并高效处理地理数据。 ## 📋 GeoJSON快速入门指南 **什么是GeoJSON?** GeoJSON是一种
json与csv互转教程:csvjson帮你轻松处理API数据
在数据处理和API交互中,JSON和CSV是两种最常用的格式。JSON以其灵活的结构适合API传输,而CSV则便于表格数据的存储和分析。**csvkit**作为一款强大的CSV工具套件,提供了`csvjson`命令,让这两种格式的转换变得简单高效。本文将详细介绍如何使用`csvjson`实现JSON与CSV之间的无缝转换,帮助你轻松处理各类API数据。 ## 📌 什么是csvjson? `c
如何快速上手GeoJSON:免费工具与数据资源终极指南
GeoJSON作为现代地理数据交换的标准格式,正在改变我们处理地理信息的方式。无论你是地图开发者、数据分析师还是地理爱好者,掌握GeoJSON都能让你的工作事半功倍。本文将为你提供一份完整的GeoJSON入门指南,帮助你快速找到免费数据资源、学习实用工具,并开始你的地理数据之旅。 ## 🚀 GeoJSON快速入门:从零到一 ### 什么是GeoJSON? GeoJSON是一种基于JSON的
geomesa-hbase实践
geomesa-hbase实践 索引概念:geomesa会根据的schema字段属性来创建不同的时间与空间的索引 Z2[z2]]索引使用的二维Z阶曲线来索引点数据的维度和经度,用于查询空间上的分布没有时间概念 Z3[z3]索引使用的是三维Z阶曲线来索引点数据的维度经度和时间,具有空间和时间的概念 XZ2[xz2]索引使用的是XZ-ordering的二维实现来索引非点数据的维度和经度 XZ3[xz...
741



被折叠的 条评论
为什么被折叠?



