QGIS
Quantum GIS(QGIS)是开源地理信息系统桌面软件, 使用GNU(General Public License)授权,属于 Open Source eospatial Foundation(OSGeo)的官方计划。 在 GNU 授权下,开发者可以自行检阅与调整程序代码,并保障让所有使用者可以免费且自由地修改程序。
QGIS 的目标是成为一个 GIS系统,提供常见的功能与特征。借着核心特征提供基本功能与附加组件(Python 或 C++) 持续地扩充,让使用者可以浏览、管理、编辑、分析数据以及制图。
QGIS 是一群自愿者所开发的项目,为程序代码提供缺陷修复、报告以及文件等贡献。 它是由热心的使用者和开发社群所维护的。它提供了交互式的邮件列表, 以及通过网络管道传达给其他用户与开发人员帮助与建议。另外,它也提供商业定制化开发。
QGIS项目开始于2002年5月,是基于跨平台的图形工具Qt软件包,采用C++ 语言开发的一个GIS软件。 目前的开发非常活跃,当前Windows(2020年)的最新版本是QGIS 3.12版。
参考来源:Q3基础教程
设置中文界面
- 点击
Settings
菜单下的Options
- 在弹出的
Options
对话框中点击General
选项卡 - 点中
Override System Locale
前的小方框 - 在
User interface translation
下拉列表中选中简体中文
- 重启
快捷键
ctrl+D
remove layer or groupctrl+L
Data Source Manager
矢量平移
- 将投影转移到平面投影(epsg:3857)
vector geometry
–>translate
shp等格式转换
KML 转 Shape
- Open up the installed QGIS.
- Select Layer in the menu bar and press Add Vector Layer or select the shortcut icon. Browse the KML file, in the Source DataSet type, in the pop up window opened.(While browsing, select either all files or Key Hole Markup language in file type). And press Open.
- select layer from the menu and click on save as.
- In the Save vector layer as window, Select the format from the drop down box as ESRI Shapefile(OGR) and browse the folder in which you want to save the shapefile. Name it and Press OK. Reference: 1
Shape 转 kml
- Open up the installed QGIS.
- In the menu bar, select Layer and press Add Vector Layer. Now select the source type in the pop up window opened as File and browse the source Shapefile(Note:Your shapefile .shp, .dbf and .shx file should be in same folder). Press open.
- Right click on the name of Shapefile layer Appearing in the Left upper side and select save as:
or
You can select layer from the menu, and click on save as. (Image below provide demonstrate both the options with the indicator displayed) - In the Save vector layer as window, Select the format from the drop down box as Keyhole Markup Language(KML) and browse the folder in which you want to save the KML file . Name it and Press OK.
Your KML file will be Exported in the directed folder. You can Verify the generated KML file for its validity by uploading the generated KML file to QGIS or uploading KML file in Google map. You may soon find the tool and the coding for the same on this site.
- Reference: 1
导入谷歌、高德等地图卫星影像
- 安装QuickMapServices插件
打开QGIS,在菜单Plugins中选择Manage and Install Plugins…
搜索QuickMapServices,选中并点击Install,等待即可完成安装。
安装好后会在工具栏显示三个图标,选择带➕号的那个,打开即可看到大量底图,单击即可导入。
有些朋友可能发现底图并没有图片上展示的这么多,这是由于部分底图需要额外获取,选择底部的Settings→More services→Get contributed pack,即可完成获取。
批量替换字段值
- open attribute table (
F6
) - open field calculator (
CTRL + I
) - Inverse select
create a new field
and Input follow expression
replace("地类",'裸地','植被')
Note that the double quotes indicate a field name while the single quotes refer to a static string. These are not interchangeable.
参考文献:
地物分类统计插件
Plugins
-> Manage and Install Plugins...
->
搜索 并 安装 Group Stats
然后在 Vector
下找到 并 使用
Rows
: 地类Columns
: SumValue
: Area
点击 Calculate
,结果在左上角,可点击 Data
另存为 *.CSV
文件。
参考文献:
矢量编辑
矢量裁剪
增加矢量图形
- 单击
编辑
(铅笔形状
)按钮,切换到编辑状态 - Add Polygon feature (
ctrl+.
)
矢量挖洞
- 在大矢量范围内,增加一个矢量(需要挖掉的范围)
Vector
菜单,->Geoprocess Tools
,->Difference
调整矢量边界大小
- 单击
编辑
(铅笔形状
)按钮,切换到编辑状态 - Vertex Tool (),点一下,拖动到合适位置
编辑矢量要素
- 加载矢量文件
- 单击
编辑
(铅笔形状
)按钮,切换到编辑状态 - 在
编辑
下拉菜单里面选择要进行的操作
例如 我希望在面要素里面划出一个空洞,
- 选择添加环工具
- 在选定的面要素上,画一个面,双击结束。最终形成一个带有空洞的面。
那么这个空洞又如何自动消除呢?
- 在处理工具箱的搜索栏里面搜索关键词
删除空穴
- 选择处理路径及名称
- 点击保存后运行
参考来源:白衣探马陈庆之
线状转面状地物
- 选择处理工具箱中的:
矢量几何图形
- 选择工具:
多边形化
- 输入存储面的信息
- 运行
计算周长和面积
打开字段计算器,选择新列并键入以下表达式
对于区域:area
对于周长:perimeter
设置测量默认单位
- 新建工程,打开
设置
- 打开里面选项。
- 打开里面
地图工具
,里面的测量工具
修改后就是默认的单位,字段计算器计算几何属性的时候按照这个里面的默认单位计算。
字段数据过滤与增删
从大量数据中对某一字段为特定值的进行过滤,此时可以使用filter进行属性过滤得到想要的数据,类似数据库查询的where语句
- 在非编辑状态,右键选中的图层,选择”过滤”
- 在弹出的”查询构建器”中,点击字段列表中某个,在右侧点击全部,可以获得该字段在图层的所有取值
- 在过滤表达式区域,可以参照SQL的WHERE子句设置过滤表达式,支持精确查找,模糊查找等过滤方式,
参考文献: young_always
ENVI分类后处理
- ENVI,
classification
–Post Classification
–Classification to Vector
, select classified result,Raster To Vector parameters
Outputsingle layer
, andOK
Available Vector List
,File
–Export layer to shapefile...
- QGIS,
CTRL+L
, Open ‘2010.shp’, Add - right click on ‘2010.shp’,
Export
–Save Features As ...
,2010-land.shp
, repeat,2010-water.shp
- 2010-land.shp,
toggle editing
, select water area, then hitdelete
key, save - 2010-water.shp,
toggle editing
, select water area,Edit
–Edit geometry
–delete part
, then click on the area you need to remove, save - 2010-land.shp,
filed calculator
,Expression
, input$area
, calculate feature area, input$perimeter
and calculate feature perimeters - 面积-周长变化趋势表.xlsx
将文本坐标转换为矢量/kml
- 找到工具栏上的“添加文本数据图层”,或者在 菜单“
图层
”->“添加图层
”->“添加文本图层
”,(上图红色位置)点击后弹出下图界面 - 选择保存的点坐标文件,由于文本文件中的坐标是由制表符隔开的,所以分隔符选择制表符,首行也不包括字段名称,所以也不勾选,几何图形定义选择点坐标,进行相应的选择时,下面的列表会实时进行预览,选择点坐标后,会提示选择x坐标和y坐标所在的列。如下图所示,选择完之后点击确定。
- 上图点击确定之后,会弹出选择空间参考的对话框,由于上面的点坐标是经纬度,所以直接在弹出坐标参考选择器重选择
WGS84
即可,一般默认的也就是这个,如果你的点文件坐标是别的坐标系,选择对应的空间参考即可。 - 选择完毕之后确定,即可将数据加载到QGIS视图中。如下图所示,然后再左侧的图层右键,弹出菜单选择另存为,如下图所示:
- 点击另存为,弹出另存为对话框,选择保存的文件路径以及文件格式,最后确定即可,如下图所示:
参考文献:kong
将 DWG 导入 QGIS 项目
项目
-> DWG/DXF 导入
ArcGIS
修改字段属性
按照以下步骤修改现有字段属性:
- 启动 ArcMap 或 ArcCatalog,并连接到包含要修改字段属性的表或要素类的地理数据库。
- 右键单击表或要素类,然后单击属性。
- 单击字段选项卡。
- 从字段名称列表中选择要修改的字段。
- 要重命名字段,可单击名称文本,然后输入新名称。
- 要更改数据类型,可从相应的数据类型下拉列表中选择一个新类型。
- 要更改字段别名、默认值或长度,可双击字段属性列表中的值,然后输入一个新值。
- 完成所有修改后,请单击确定以关闭表属性或要素类属性对话框,然后应用更改。
批量删除字段
单个删除字段
在图层的属性表内, 在某个字段上点击右键可以看到删除字段的选项,如下图
批量删除字段
在ArcToolbox中点击“数据管理工具\字段\删除字段”,调用删除字段工具,如下图所示。
在显示的删除字段对话框内,输入表选择需要删除字段的图层,选择后会在下面列出可以删除的字段,勾选上需要删除的字段即可,如下图所示。
批量删除字段多文件
如果要从多个表文件中删除相同字段,需要用到 modeler 工具,
ArcToolbox
–>数据管理工具
–>字段
–>删除字段
,拖动到modeler
布局菜单插入
–>迭代器
–>要素类
- 双击
迭代要素类
,其中,工作空间或要素数据集
选择需要迭代的数据库。 - 双击
删除字段
,输入表
选择带循环符号的条目,删除字段
按需选择需要删除的字段 运行模型
,如下图所示
参考来源:
- zhihu
- 感谢泉哥 @GHQ
批量添加字段
多个表合并
地理处理
-> 合并
属性表字段值批量替换
- 新建字段
- 打开
字段计算器
- 代码
## 海棠区
def func(name):
## 1 耕地
if name==('旱地'.decode('utf-8')):
a='耕地'
return a.decode('utf-8')
## 2 园地
elif name==('其他园地'.decode('utf-8')):
a='园地'
return a.decode('utf-8')
elif name==('果园'.decode('utf-8')):
a='园地'
return a.decode('utf-8')
## 3 林地
elif name==('乔木林地'.decode('utf-8')):
a='林地'
return a.decode('utf-8')
elif name==('灌木林地'.decode('utf-8')):
a='林地'
return a.decode('utf-8')
elif name==('其他林地'.decode('utf-8')):
a='林地'
return a.decode('utf-8')
## 4 草地
elif name==('其他草地'.decode('utf-8')):
a='草地'
return a.decode('utf-8')
## 5 湿地
elif name==('沿海滩涂'.decode('utf-8')):
a='湿地'
return a.decode('utf-8')
elif name==('红树林'.decode('utf-8')):
a='湿地'
return a.decode('utf-8')
## 6 农业设施
elif name==('设施农用地'.decode('utf-8')):
a='农业设施'
return a.decode('utf-8')
elif name==('农村道路'.decode('utf-8')):
a='农业设施'
return a.decode('utf-8')
elif name==('养殖坑塘'.decode('utf-8')):
a='农业设施'
return a.decode('utf-8')
## 7 居住用地
elif name==('城镇住宅用地'.decode('utf-8')):
a='居住用地'
return a.decode('utf-8')
## 8 商业服务用地
elif name==('商业服务业设施用地'.decode('utf-8')):
a='商业服务用地'
return a.decode('utf-8')
## 9 交通用地
elif name==('公路用地'.decode('utf-8')):
a='交通运输'
return a.decode('utf-8')
## 10 陆地水域
elif name==('河流水面'.decode('utf-8')):
a='陆地水域'
return a.decode('utf-8')
elif name==('坑塘水面'.decode('utf-8')):
a='陆地水域'
return a.decode('utf-8')
## 其他 保留原名
else:
return name
## 吉阳区
def func(name):
## 1 耕地
if name==('水田'.decode('utf-8')):
a='耕地'
return a.decode('utf-8')
## 3 林地
elif name==('乔木林地'.decode('utf-8')):
a='林地'
return a.decode('utf-8')
elif name==('灌木林地'.decode('utf-8')):
a='林地'
return a.decode('utf-8')
elif name==('其他林地'.decode('utf-8')):
a='林地'
return a.decode('utf-8')
## 4 草地
elif name==('其他草地'.decode('utf-8')):
a='草地'
return a.decode('utf-8')
## 5 湿地
elif name==('沿海滩涂'.decode('utf-8')):
a='湿地'
return a.decode('utf-8')
elif name==('红树林'.decode('utf-8')):
a='湿地'
return a.decode('utf-8')
## 6 农业设施
elif name==('农村道路'.decode('utf-8')):
a='农业设施'
return a.decode('utf-8')
elif name==('养殖坑塘'.decode('utf-8')):
a='农业设施'
return a.decode('utf-8')
## 7 居住用地
elif name==('城镇住宅用地'.decode('utf-8')):
a='居住用地'
return a.decode('utf-8')
## 8 商业服务用地
elif name==('商业服务业设施用地'.decode('utf-8')):
a='商业服务用地'
return a.decode('utf-8')
## 工矿用地
elif name==('盐田'.decode('utf-8')):
a='工矿用地'
return a.decode('utf-8')
## 9 交通用地
elif name==('公路用地'.decode('utf-8')):
a='交通运输'
return a.decode('utf-8')
elif name==('港口码头'.decode('utf-8')):
a='交通运输'
return a.decode('utf-8')
elif name==('水工建筑用地'.decode('utf-8')):
a='公共设施'
return a.decode('utf-8')
elif name==('公园与绿地'.decode('utf-8')):
a='绿地与开敝空间用地'
return a.decode('utf-8')
elif name==('河流水面'.decode('utf-8')):
a='陆地水域'
return a.decode('utf-8')
elif name==('坑塘水面'.decode('utf-8')):
a='陆地水域'
return a.decode('utf-8')
elif name==('特殊用地'.decode('utf-8')):
a='特殊用地'
return a.decode('utf-8')
## 其他 保留原名
else:
return name
## 天涯区
def func(name):
if name==('水田'.decode('utf-8')):
a='耕地'
return a.decode('utf-8')
if name==('旱地'.decode('utf-8')):
a='耕地'
return a.decode('utf-8')
if name==('其他园地'.decode('utf-8')):
a='园地'
return a.decode('utf-8')
elif name==('乔木林地'.decode('utf-8')):
a='林地'
return a.decode('utf-8')
elif name==('灌木林地'.decode('utf-8')):
a='林地'
return a.decode('utf-8')
elif name==('其他林地'.decode('utf-8')):
a='林地'
return a.decode('utf-8')
## 4 草地
elif name==('其他草地'.decode('utf-8')):
a='草地'
return a.decode('utf-8')
## 5 湿地
elif name==('沿海滩涂'.decode('utf-8')):
a='湿地'
return a.decode('utf-8')
elif name==('内陆滩涂'.decode('utf-8')):
a='湿地'
return a.decode('utf-8')
elif name==('红树林地'.decode('utf-8')):
a='湿地'
return a.decode('utf-8')
## 6 农业设施
elif name==('设施农用地'.decode('utf-8')):
a='农业设施'
return a.decode('utf-8')
elif name==('农村道路'.decode('utf-8')):
a='农业设施'
return a.decode('utf-8')
elif name==('养殖坑塘'.decode('utf-8')):
a='农业设施'
return a.decode('utf-8')
## 7 居住用地
elif name==('城镇住宅用地'.decode('utf-8')):
a='居住用地'
return a.decode('utf-8')
elif name==('农村宅基地'.decode('utf-8')):
a='居住用地'
return a.decode('utf-8')
elif name==('科教文卫用地'.decode('utf-8')):
a='公共管理'
return a.decode('utf-8')
elif name==('机关团体'.decode('utf-8')):
a='公共管理'
return a.decode('utf-8')
## 8 商业服务用地
elif name==('商业服务业设施用地'.decode('utf-8')):
a='商业服务用地'
return a.decode('utf-8')
## 9 交通用地
elif name==('公路用地'.decode('utf-8')):
a='交通运输'
return a.decode('utf-8')
elif name==('港口码头用地'.decode('utf-8')):
a='交通运输'
return a.decode('utf-8')
elif name==('城镇道路'.decode('utf-8')):
a='交通运输'
return a.decode('utf-8')
elif name==('公共设施用地'.decode('utf-8')):
a='公共设施'
return a.decode('utf-8')
elif name==('特殊用地'.decode('utf-8')):
a='特殊用地'
return a.decode('utf-8')
## 其他 保留原名
else:
return name
# 崖州区
def func(name):
if name==('水田'.decode('utf-8')):
a='耕地'
return a.decode('utf-8')
elif name==('旱地'.decode('utf-8')):
a='耕地'
return a.decode('utf-8')
elif name==('其他园地'.decode('utf-8')):
a='园地'
return a.decode('utf-8')
elif name==('乔木林地'.decode('utf-8')):
a='林地'
return a.decode('utf-8')
elif name==('灌木林地'.decode('utf-8')):
a='林地'
return a.decode('utf-8')
elif name==('其他林地'.decode('utf-8')):
a='林地'
return a.decode('utf-8')
## 4 草地
elif name==('其他草地'.decode('utf-8')):
a='草地'
return a.decode('utf-8')
## 5 湿地
elif name==('沿海滩涂'.decode('utf-8')):
a='湿地'
return a.decode('utf-8')
elif name==('内陆滩涂'.decode('utf-8')):
a='湿地'
return a.decode('utf-8')
elif name==('红树林地'.decode('utf-8')):
a='湿地'
return a.decode('utf-8')
## 6 农业设施
elif name==('农村道路'.decode('utf-8')):
a='农业设施'
return a.decode('utf-8')
elif name==('设施农用地'.decode('utf-8')):
a='农业设施'
return a.decode('utf-8')
elif name==('养殖坑塘'.decode('utf-8')):
a='农业设施'
return a.decode('utf-8')
## 7 居住用地
elif name==('城镇住宅用地'.decode('utf-8')):
a='居住用地'
return a.decode('utf-8')
elif name==('农村宅基地'.decode('utf-8')):
a='居住用地'
return a.decode('utf-8')
elif name==('科教文卫用地'.decode('utf-8')):
a='公共管理'
return a.decode('utf-8')
elif name==('机关团体'.decode('utf-8')):
a='公共管理'
return a.decode('utf-8')
## 8 商业服务用地
elif name==('商业服务业设施用地'.decode('utf-8')):
a='商业服务用地'
return a.decode('utf-8')
elif name==('工业用地'.decode('utf-8')):
a='工矿用地'
return a.decode('utf-8')
## 9 交通用地
elif name==('公路用地'.decode('utf-8')):
a='交通运输'
return a.decode('utf-8')
elif name==('港口码头用地'.decode('utf-8')):
a='交通运输'
return a.decode('utf-8')
elif name==('城镇道路'.decode('utf-8')):
a='交通运输'
return a.decode('utf-8')
elif name==('公共设施用地'.decode('utf-8')):
a='公共设施'
return a.decode('utf-8')
elif name==('河流水面'.decode('utf-8')):
a='陆地水域'
return a.decode('utf-8')
elif name==('坑塘水面'.decode('utf-8')):
a='陆地水域'
return a.decode('utf-8')
elif name==('特殊用地'.decode('utf-8')):
a='特殊用地'
return a.decode('utf-8')
## 其他 保留原名
else:
return name
参考文献:
线段打断与合并
线段打断
需求:将线段阶段多节
菜单栏
->编辑器
->开始编辑
- 点击编辑器右边工具
裁剪面工具
- 点击需要截断的位置进行截断
- 截取,双击停止截取
- 最后要记得保存所编辑的内容哦,不然白做无用功了
断线合并
- 在
Editor工具栏
下拉列表中选择开始编辑
工具(Start Editing) - 如果ArcMap已打开多个图层,会弹出对话框让选择需要编辑的图层,选择图层后点击ok
- 在工作区域内,选中两条矢量线,从编辑工具中下拉列表中选择
合并
…工具(merge)
参考文献: