在知乎上看到这个问题,记录一下解决的过程。
命令行的方式如果你安装编译好gdal,可以使用以下命令:
gdalwarp -tr 100 100 input.tif output.tif
代码的方式此外,你还可以用python代码的方式进行重采样,把影像重采样到100米。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023/12/22 20:39
# @File : resample_100.py
from osgeo import gdal
def resample_to_100m(input_path, output_path):
"""Resamples a raster dataset to 100 meters using GDAL.
Args:
input_path: Path to the input raster dataset.
output_path: Path to the output raster dataset.
"""
...
需要把非84坐标的矢量转换为WGS84坐标的矢量。
方法介绍跟栅格数据投影转换一样,使用GDAL库,我们有两种方法进行矢量数据的重投影:
1.使用命令工具及其对应的命令行API接口进行转换(简单,准确,实践中一定要用这种方法)
GDAL提供了ogr2ogr命令行工具进行矢量数据投影转换,命令如下:ogr2ogr -t_srs "+proj=aea +lat_1=25 +lat_2=47 +lat_0=30 +lon_0=105 +x_0=0 +y_0=0 +ellps=WGS84 +datum=WGS84 +units=m +no_defs " China_Projected.shp China.shp
-t_srs选项制定输出数据投影,当然可以是ESPG,也可以是PROJ4或者OGC WKT格式的投影定义都OK
GDAL对该命令的封装的C/C++函数是GDALVectorTranslate(),Python中是gdal.VectorTranslate()
2.使用GDAL提供的基本API进行实现。如果要自己利用基本API函数实现的话,基本思路如下:
利用osgeo.ogr.Dri ...
pyside6
未读需求pyside6将图片资源转为py格式, 是为了打包为exe的时候不丢失图片文件
步骤新建img.qrc文件,例子如下:
<RCC>
<qresource prefix="pic">
<file>icon.jpg</file>
</qresource>
</RCC>
在img.qrc同名目录下,存在icon.jpg
在这个目录下,进入命令行输入
pyside6-rcc img.qrc -o img.py
在该目录下,生成一个img.py文件
在pyside6的主程序中调用图片资源
最后的界面如下:
某些地理空间数据格式很常见。但有些并不常见。笔者汇总 GIS 文件格式:
矢量 GIS 文件格式
矢量数据不是由像素网格组成的。相反,矢量图形由顶点和路径组成
矢量数据的三种基本符号类型是点、线和面(面)。这些GIS文件格式包含矢量数据。
文件类型
后缀
描述
Esri Shapefile
.SHP,.DBF,.SHX
到目前为止,shapefile 是最常见的地理空间文件类型。所有商业和开源都接受 shapefile 作为 GIS 格式。它无处不在,已成为行业标准。SHP文件必须包含三个文件,这些文件是构成 shapefile 所必需的。三个必需的文件是:1.SHP 是特征几何。2.SHX 是形状索引位置。DBF 是属性数据。
GeoJSON
.GEOJSON.JSON
GeoJSON 是一种使用 JavaScript 对象表示法 (JSON) 对地理数据结构(如点、线和多边形)进行编码的格式。它是在线 Web 制图应用程序最常见的开放标准格式之一。
Geography Markup Language (GML)
.GML
GML 以文本形式存储地理实体(要素 ...
python
未读在项目开发中,我们有时会引入一些包,后续由于种种原因,并没有 import 到项目中。如果在部署到时候使用 pip freeze,则会将这些并未引入到包也列到 requirements 中,而实际这些包是不需要的。
pipreqs 这个包就可以解决这个问题,它会分析项目中的代码,只列出被导入了的包。使用方法:
pip install pipreqs
pipreqs --encoding=utf-8-sig your_project_path --force
pipreqs 会生成 requirements.txt 到你分析的项目根目录中,与 pip freeze 生成的文件格式一致,可以使用 pip install -r requirements.txt 安装。
matplotlib==3.5.0
numpy==1.22.4
opencv_contrib_python==4.5.4.60
opencv_python_headless==4.5.5.64
Pillow==8.3.2
torch==1.9.0+cpu
torchvision==0.10.0
tqdm==4.66.1
列出 ...
python
未读读取tif文件正常来说,读取tif文件,使用gdal库就能解决了。
gdal库在遥感行业过于强大、简单、易用,以至于很多商业软件的底层也调用了gdal。
平常在python环境下使用gdal库对tif文件进行读写是很简单的,大佬们都把函数、接口封装得很好,咱们直接调用对应的API就OK了。
常用的语句如下:
from osgeo import gdal # 导入gdal
tif_file = r'xxx.tif' # 待读取的tif文件
ds = gdal.Open(tif_file) # 调用gdal的接口,ds是gdal的对象
array = ds.ReadAsArray() # 这个对象中有ReadAsArray方法
以上四句语句,把tif_file全部读取在内存里。
不使用gdal读取tif文件为什么会有这个奇怪的需求呢?
因为…
我有个朋友,他在linux因为没有linux的权限,安装不了 gdal。
这个朋友肯定不是我。
所以只能通过其他方法,把tif文件读取到内存里。
搜索一番,发现有2种方法可以成功实现这个需求。另外第2种方法只能实现部分需求。
skim ...
地理坐标系一般是指由经度、纬度和相对高度组成的坐标系,能够标示地球上的任何一个位置。经度和纬度常合称为经纬度,把球面上的经纬度显示在平面地图上需要采用某种地图投影
地理坐标系由于地面高低的不同和地球形状的不正规,天体测量所得的信息不足用于明确地计算地理位置。一般采用某个标准的大地测量系统所规定的地理坐标系统,目前最常用的标准是WGS84,它被卫星导航系统如美国GPS、中国的北斗导航系统使用。
投影坐标系
投影坐标系最出名的墨卡托投影,这里不过多讨论。
需求现在有一份栅格影像tif文件,需要把这份栅格文件去除投影坐标,变为地理坐标。准确地说是,让这景tif的坐标系从GCS2000 变为WGS84 。
代码#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023/12/5 14:40
# @File : reprojection.py
# 栅格数据可以重投影,但比矢量数据投影更复杂。
# 栅格数据需要处理栅格数据中像元会弯曲和移动的事实,一对一的映射并不存在
# 通常用最近邻域插值法、双线性插值和三次卷积插值法进行 ...
需求现在有一份SHP文件,需要把这份矢量文件制作为深度学习的标签。这时候第一个步骤是:把矢量栅格化。
代码#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2023/11/27 10:18
# @File : shp_clip_img.py
from osgeo import gdal
import os
# 根据shp 裁剪影像
def clip_image_by_shp(input_file, output_file, clip_shape, nodata=0):
'''
@todo 根据shp 裁剪影像
@param shp_file: shp file
@param img_file: image file
@param outpath: output path
@return:
'''
outpath = os.path.dirname(output_file)
if os.path.exists(outpath):
...
python
未读为什么要使用多个版本的python?前几天想研究insar,发现了有个第三方库pygmtsar。在pip insatll pygmtsar 完成后,测试一下import pygmtsar 语句,竟然报错。
搜索一遍后,发现是 distributed这个库不支持python3.9.1。
简单的解决办法是把python的版本升级。但是升级是不可能升级的,升级了其它库是不是得重新装。
多版本python的windows10 环境于是不如多下载一个python版本。
安装好后,把python.exe复制粘贴,把复制的文件改名为python311.exe。
把D:\py311 添加到系统环境变量。
把D:\py311\Lib\site-packages 添加到系统环境变量。
在终端/cmd命令行输入
python311
测试完成。
进入D:\py311\Scripts,把pip.exe改名为pip311.exe
为什么会用虚拟环境?作为一个使用python开发过大型项目的同学,一定会碰到python库的版本依赖。
例如 直接依赖:
A项目:使用 django 2.2
B项目:使用 ...
GADM: 全球行政区划数据库GADM主页:https://gadm.org/
GADM,全称Database of Global Administrative Areas,是一个高精度的全球行政区划数据库。其包含了全球所有国家和地区的国界、省界、市界、区界等多个级别的行政区划边界数据。
警告GADM提供的中国国界数据不符合中国的领土主张,省界、市界、区界等数据也不一定是最新的版本。在正式刊物中发表使用此类数据的图件时需格外谨慎。
数据下载GADM提供了两种下载方式:
下载全球所有国家和地区的所有数据 https://gadm.org/download_world.html
按国家下载 https://gadm.org/download_country.html
由于全球数据量巨大,建议根据需要按照国家下载数据。
需要说明的是,GADM 中对country 的定义为“any entity with an ISO country code”。因而如果想要下载完整的中国数据,实际上需要下载China、Hong Kong、Macao和Taiwan 四个数据。
由于GADM提供的中国国界数 ...