本文描述了在mac下使用pycharm+pyqgis做gis开发相关经验记录。
1. 环境配置
安装qgis过程略过。
打开设置,添加:
改变如下项:
可看到配置已变成:
等待更改完成:
配置后测试:from qgis.core import *。若没有报错即为配置正确
2 第一个功能
2.1 绘制多段线
以下代码在Qgis的Python控制台中执行。
import csv
# 定义行结构体
class dataInfo:
def __init__(self):
self.equipID = ""
self.timestamp = []
self.lat = []
self.lng = []
csvFile = open("../1.csv")
dInfo = [] # 存储所有格式化后的点数据
reader = csv.reader(csvFile)
for item in reader:
haveSame = False # 记录是否有重复的,有的话就不用新增
for i in range(0, len(dInfo)):
if dInfo[i].equipID == item[0].split('_')[0]:
for j in range(0, len(dInfo[i].timestamp)):
if float(item[1]) < float(dInfo[i].timestamp[j]):
dInfo[i].timestamp.insert(j, item[1])
dInfo[i].lat.insert(j, item[2])
dInfo[i].lng.insert(j, item[3])
break
if j == len(dInfo[i].timestamp) - 1:
dInfo[i].timestamp.append(item[1])
dInfo[i].lat.append(item[2])
dInfo[i].lng.append(item[3])
haveSame = True
break
if not haveSame:
dInfoTemp = dataInfo()
dInfoTemp.equipID = item[0].split('_')[0]
dInfoTemp.timestamp.append(item[1])
dInfoTemp.lat.append(item[2])
dInfoTemp.lng.append(item[3])
dInfo.append(dInfoTemp)
for i in range(0, len(dInfo)):
testData = []
for j in range(0, len(dInfo[i].timestamp)):
testData.append(QgsPoint(float(dInfo[i].lat[j]), float(dInfo[i].lng[j])))
sf = QgsFeature()
lineLayer = QgsVectorLayer("LineString", str(len(dInfo[i].timestamp)) + " " + dInfo[i].equipID, "memory")
dt = lineLayer.dataProvider()
sf.setGeometry(QgsGeometry.fromPolyline(testData))
dt.addFeatures([sf])
lineLayer.updateExtents()
QgsProject.instance().addMapLayer(lineLayer)