GeoPandas 支持读取和写入多种地理空间数据格式,如 ESRI Shapefile、GeoJSON、GeoPackage 等,以及与其他 GIS 软件兼容的格式。
ESRI Shapefile(简称 Shapefile 或 .shp 文件)是一种常见的空间矢量数据存储格式,用于存储地理空间数据。Shapefile 文件通常由多个文件组成,包括 .shp
、.shx
、.dbf
等格式,它们一起描述了矢量空间数据的几何形状、属性信息和空间索引。
以下是 Shapefile 文件的主要组成部分:
.shp
文件:
.shp
文件存储矢量几何形状信息,如点、线、多边形的坐标和形状数据。.shx
文件:
.shx
文件包含 Shapefile 的空间索引,用于加快在 .shp
文件中的记录检索和访问。.dbf
文件:
.dbf
文件是一个 dBASE 格式的表格文件,存储了与空间几何形状相关联的属性数据。每个几何对象都可以有与之相关联的属性信息。其他附加文件:
.prj
文件(存储投影信息)、.sbn
和 .sbx
文件(用于空间索引加速)等。Shapefile 是一种广泛使用的空间矢量数据格式,常用于存储地理信息系统(GIS)中的地理空间数据,例如点、线、多边形等空间要素数据。它被许多 GIS 软件(如 ArcGIS、QGIS 等)所支持和使用。
虽然 Shapefile 是一个通用的标准格式,但它也有一些限制,比如不支持存储拓扑关系和只能存储一个几何类型等。随着时间的推移,一些现代的地理空间数据格式(如 GeoJSON、Geopackage 等)正在逐渐取代 Shapefile,以满足更复杂的地理空间数据需求。
import geopandas as gpd
import matplotlib.pyplot as plt
# 读取 Shapefile 文件
gdf = gpd.read_file('D:\\BaiduNetdiskDownload\\湖北省数据\\矢量数据\\第二种路网\\湖北省_road.shp')
# 根据字段值 'layer' 进行筛选
# 假设 'layer' 的值为 0 和 1 时分别使用红色和蓝色线渲染,线宽为2
gdf_0 = gdf[gdf['layer'] == 0]
gdf_1 = gdf[gdf['layer'] == 1]
# 创建绘图对象并设置输出图片大小
fig, ax = plt.subplots()
# 绘制不同图层并设置不同颜色和线宽
gdf_0.plot(ax=ax, color='red', linewidth=2)
gdf_1.plot(ax=ax, color='blue', linewidth=2)
# 设置图片大小为宽10英寸、高8英寸
plt.figure(figsize=(10, 8))
# 显示地图
plt.show()
# 保存地图图片到指定位置(例如保存为 PNG 格式的图片)
plt.savefig(r'C:\Users\HTHT\Desktop\1\map_image.png', bbox_inches='tight')
在 OGC(Open Geospatial Consortium)标准中,WKT(Well-Known Text)和 GeoJSON 是两种常用的地理空间数据格式,用于描述和表示地理空间几何对象。
WKT(Well-Known Text):
POINT(30 10)
,线可以表示为 LINESTRING(30 10, 10 30, 40 40)
,多边形可以表示为 POLYGON((35 10, 45 45, 15 40, 10 20, 35 10))
。GeoJSON:
{"type": "Point", "coordinates": [30, 10]}
,线可以表示为 {"type": "LineString", "coordinates": [[30, 10], [10, 30], [40, 40]]}
,多边形可以表示为 {"type": "Polygon", "coordinates": [[[35, 10], [45, 45], [15, 40], [10, 20], [35, 10]]]}
。import geopandas as gpd
import matplotlib.pyplot as plt
from shapely import wkt
# Example WKT strings
wkt_strings = [
'POINT (0 0)',
'LINESTRING (1 1, 2 2, 2 3)',
'POLYGON ((0 0, 1 0, 1 1, 0 1, 0 0))'
]
# Construct a GeometryArray using from_wkt
geometry_array = gpd.GeoSeries.from_wkt(wkt_strings)
# Display the GeometryArray
print(geometry_array)
# 创建一个空的 GeoDataFrame,将 GeometryArray 赋值给 'geometry' 列
data = gpd.GeoDataFrame(geometry=geometry_array)
# 绘制地理空间数据
data.plot()
# 显示图形
plt.show()
import geopandas as gpd
import matplotlib.pyplot as plt
# 示例的 GeoJSON 字符串
geojson_string = '{"type":"Polygon","crs":{"type":"name","properties":{"name":"EPSG:4490"}},"coordinates":[[[115.816729382,29.917458261],[115.816729382,29.92010116],[115.817519894,29.92010116],[115.817519894,29.917458261],[115.816729382,29.917458261]]]}'
# 直接从字符串读取 GeoDataFrame
data = gpd.read_file(geojson_string, driver='GeoJSON')
# 提取几何列为 GeoSeries
geometry_series = data.geometry
# 显示数据
print(geometry_series)
# 创建一个空的 GeoDataFrame,将 GeometryArray 赋值给 'geometry' 列
data = gpd.GeoDataFrame(geometry=geometry_series)
# 绘制地理空间数据
data.plot()
# 显示图形
plt.show()
ArcGIS Geodatabase(GDB)是 Esri 公司开发的一种专门用于管理和存储地理空间数据的数据库格式。它是一种包含多种不同类型数据集的文件集合,允许用户在同一个数据库中存储多种不同的地理空间数据和相关信息。
ArcGIS Geodatabase 主要有两种类型:
文件型地理数据库 (File Geodatabase):
.gdb
扩展名的文件夹,里面包含了多个文件,用于存储不同的数据集和图层信息。这种格式的数据库对于小型到中型项目非常适用,并且具有优秀的性能和可扩展性。企业型地理数据库 (Enterprise Geodatabase):
ArcGIS Geodatabase 提供了对空间数据的高级管理和处理功能,例如支持拓扑关系、数据集合的完整性检查、版本控制、地理空间数据的数据字典管理等。这些功能使得 ArcGIS Geodatabase 成为了许多地理信息系统(GIS)和地理空间数据管理应用中的重要组成部分。
import geopandas as gpd
import fiona
# GDB 文件路径
gdb_path = r'C:\Users\HTHT\Desktop\1\4\1.gdb'
# 列出 GDB 中的图层
layers = fiona.listlayers(gdb_path)
print("Available layers:", layers)
# 选择要加载的图层
selected_layer = layers[0] # 选择第一个图层
# 读取选定的图层数据到 GeoPandas DataFrame
data = gpd.read_file(gdb_path, layer=selected_layer)
# 显示数据的前几行
print(data.head())
# 绘制地理空间数据
data.plot()
# 显示图形
plt.show()
开始读取之前,需要安装
pip install SQLAlchemy
pip install psycopg2
SQLAlchemy 是一个流行的 Python SQL 工具和 ORM(对象关系映射)库,它提供了对多种关系数据库的抽象和访问。它允许开发者使用 Python 语言来管理数据库,执行 SQL 查询,并与数据库进行交互。
以下是 SQLAlchemy 的一些主要特点和用途:
ORM(对象关系映射)支持:SQLAlchemy 提供了 ORM 功能,允许开发者使用 Python 类来表示数据库表和关系。它将数据库中的表映射为 Python 对象,使得可以直接通过对象操作数据库,而无需编写复杂的 SQL 查询。
数据库适配器:SQLAlchemy 支持多种主流数据库(如 PostgreSQL、MySQL、SQLite、Oracle 等)的连接和交互,它提供了适配器(dialects)来与不同的数据库引擎交互,使得开发者可以在不同的数据库系统中轻松切换。
灵活性:SQLAlchemy 提供了高度的灵活性,允许开发者根据需要以不同的抽象级别操作数据库。它支持 SQL 表达式、原始 SQL 查询、ORM 查询等多种方式来处理数据。
数据库连接池和事务管理:SQLAlchemy 提供了连接池管理和事务管理,有助于更有效地管理数据库连接,减少资源消耗,提高性能。
完善的文档和社区支持:SQLAlchemy 拥有丰富的文档和活跃的社区,提供了大量示例、教程和文档,有助于开发者更好地使用和理解它的功能。
总的来说,SQLAlchemy 是一个功能强大、灵活且易于使用的 Python SQL 工具,用于简化和管理与数据库的交互,并提供了多种方法来处理和操作数据库。
psycopg2
是一个流行的 PostgreSQL 数据库的 Python 适配器,用于在 Python 中连接和操作 PostgreSQL 数据库。
主要特点包括:
PostgreSQL 适配器:psycopg2
允许 Python 开发者通过 Python 与 PostgreSQL 数据库进行交互。它是一个高度优化的库,提供了对 PostgreSQL 数据库的完整访问和控制。
性能和稳定性:由于 psycopg2
是针对 PostgreSQL 数据库的 C 语言扩展模块,因此具有出色的性能和稳定性。它可以实现高效的数据库连接、查询和数据操作。
多功能性:psycopg2
支持大多数 PostgreSQL 数据库的功能,包括事务管理、预处理语句、类型适配等。它允许执行 SQL 查询、事务控制以及处理查询结果。
大量文档和社区支持:psycopg2
有丰富的文档和活跃的开发者社区。它提供了大量的示例和文档,使开发者能够更好地使用和理解库的功能。
在 Python 中连接 PostgreSQL 数据库时,psycopg2
是一个非常受欢迎且广泛使用的选择,用于处理数据库连接、执行查询以及进行其他与数据库相关的操作。
import geopandas as gpd
import matplotlib.pyplot as plt
from sqlalchemy import create_engine,text
# 设置数据库连接信息
username = 'user_xxx'
password = 'pwd_xxx'
host = '127.0.0.1'
database = 'dbname_xxx'
port='5432'
schema='schema_xxx'
engine=create_engine(f'postgresql://{
username}:{
password}@{
host}:{
port}/{
database}?options=-csearch_path={
schema}')
# 查询并读取数据到 GeoPandas DataFrame
table_name = 'tbname_xxx'
query = text(f"SELECT * FROM {
table_name}")
data = gpd.read_postgis(query, con=engine.connect(),geom_col='shape')
# 显示数据的前几行
print(data.head())
# 绘制地理空间数据
data.plot()
# 显示图形
plt.show()
文章浏览阅读221次。【代码】linux 清空docker容器日志。_linux清理docker容器log
文章浏览阅读7.3k次,点赞3次,收藏15次。源码地址为:https://github.com/QingdaoU/OnlineJudge可参考的文档为:https://github.com/QingdaoU/OnlineJudgeDeploy/tree/2.0一、安装所依赖的环境sudo apt-get update && sudo apt-get install -y vim python-pip curl g..._github oj开源
文章浏览阅读4.4k次。在《网络安全法》中,虽然已经明确了要求保障网络数据的完整性、保密性、可用性的能力,但随着近些年数据安全热点事件的出现,如数据泄露事件、个人信息滥用事件。表明对数据保护的要求仅依赖《网络安全法》中的几款条例是不足以支撑的。因此2021年9月1日《中华人民共和国数据安全法》便正式诞生,从此数据安全也被推上了风口浪尖。那么数据安全如何定义?与传统网络安全有何区别?数据安全体系又应该如何建立?..._数据安全
文章浏览阅读194次。Java解leetcode,助力面试之简单10道题(五)第338题 比特位计数解题思路代码第342题 4的幂解题思路代码第344题 反转字符串解题思路代码第345题 反转字符串中的元音字母解题思路代码第367题 有效的完全平方数解题思路代码第389题 找不同解题思路代码第392题 判断子序列解题思路代码第404题 左叶子之和解题思路代码第405题 数字转换为十六进制数解题思路代码第409题 最长回文串解题思路代码第338题 比特位计数示例 1:输入输出[3,2,3]3示例
文章浏览阅读698次。#pragma once #include <deque>#include <condition_variable>template <typename T>class MsgList { public: void add(const T& msg) { std::unique_lock<std::mutex> lock(mutex); queue.
文章浏览阅读551次,点赞8次,收藏8次。重点:项目和文档是本人近期原创所作!程序可以将水表图片里面的数据进行深度学习,提取相关信息训练,lw1.3万字重复15%,可以直接上交那种!具体和看下面的目录。python水表识别,图像识别深度学习 CNN,Opencv,Keras。_水表 深度学习 识别
文章浏览阅读910次。问题前端用xterm.js通过websocket连接docker虚拟终端,返回的字符中包括如下字符串,其中有两个控制字符,“ESC"和"BEL” ,想通过正则表达式匹配这一段字符,然后去掉这段字符:参考文档控制字符编码表转义符对照表通过上面查询得知,"ESC"和"BEL"这两个控制符的ASCII码分别为:十进制为27和7,十六进制为0x1B和0x07,转义符分别为:\e和\a代码**注意:**直接使用ASCII码匹配是不行的,一定要用转义符才行。如下测试代码中,只有regex3才能匹_正则表达式匹配控制字符
文章浏览阅读1.5k次。1.RIL框架 RIL,Radio Interface Layer。本层为一个协议转换层,提供Android Telephony与无线通信设备之间的抽象层。 Android RIL位于Telephony Frameworks之下,Modem之上的,根据源码,RIL可以分为两个部分:Frameworks 框架层中的java程序,简称RILJ。HAL层中C/C++程序,简称RILC,RILC具体的又包括LibRIL、Rild和Reference-RIL这三个部分。 Andr..._ril框架
文章浏览阅读565次。第六节 math包的基础使用前言实践前言我们通常会对数值型变量进行计算,这里我们给出一些常用的函数用于辅助你的计算过程。常用的数学计算函数均在math包。实践首先我们导入math包,并定义一个浮点型变量pi将其赋值为3.14:import mathpi = 3.14如果我们需要计算浮点型变量四舍五入后的计算结果,用函数round()即可:print(round(pi))>>> 3如果我们需要向上取整,那就需要函数math.ceil():print(math.cei_ps math function
文章浏览阅读4.4k次,点赞3次,收藏2次。Could not find first log file name in binary log index file问题解决解决过程问题最近在使用canal来监测数据库的变化,处理变动的数据。由于有一段时间没有用了,这次启动在日志文件中看到这个异常 Could not find first log file name in binary log index file,详细信息如下:2020-12-16 19:14:42.053 [destination = tradeAndRefund , addr_canal could not find first log file name in binary log index file
文章浏览阅读960次。分析:1.创建一个Random对象;2.创建一个hashset的集合对象;3.循环生成10个1-20的随机数4.输出。package edu.xalead;import java.util.*;public class Test { public static void main(String[] args) { Random r...
文章浏览阅读3.2k次。Linux系统下的扩展名并不能标识该文件是属于哪一种类型的文件。文件是否可以执行等都跟文件的扩展名无关。因为文件script没有执行权限,所以也就无法执行,sh-3.2# touch ./scriptsh-3.2# ls -lh ./script-rw-r--r-- 1 root root 0 Dec 28 06:15 ./scriptsh-3.2#sh-3.2# ./scriptsh: /scr..._linux的扩展名