虽然 QGIS 支持 CSV 格式的加载,但不支持直接加载一般的 JSON 格式。本文使用 PyQGIS 代码,读取 JSON 文件,并显示为矢量点。
JSON文件示例如下:
{
"features": [
{
"id": 1,
"name": "东方明珠塔",
"longitude": 121.4997,
"latitude": 31.2397,
"altitude": 468.0
},
{
"id": 2,
"name": "外滩",
"longitude": 121.4905,
"latitude": 31.2357,
"altitude": 4.5
},
{
"id": 3,
"name": "故宫博物院",
"longitude": 116.3975,
"latitude": 39.9181,
"altitude": 52.0
},
{
"id": 4,
"name": "埃菲尔铁塔",
"longitude": 2.2945,
"latitude": 48.8584,
"altitude": 300.0
}
]
}
实现代码如下。
注意:
- 请修改 file_path 为你的json文件路径;
- JSON文件中的坐标需要使用经纬度(因为脚本中矢量图层采用 EPSG:4326 )。
import json
from qgis.core import QgsVectorLayer, QgsFeature, QgsGeometry, QgsPointXY, QgsProject, QgsField
from PyQt5.QtCore import QVariant
# 从本地文件读取JSON数据
file_path = "d:/point.json"
with open(file_path, 'r', encoding='utf-8') as f:
data = json.load(f)
# 创建内存图层
layer = QgsVectorLayer("Point?crs=EPSG:4326", "地点", "memory")
provider = layer.dataProvider()
provider.addAttributes([
QgsField("id", QVariant.Int),
QgsField("name", QVariant.String),
QgsField("altitude", QVariant.Double)
])
layer.updateFields()
# 添加要素
for feat in data["features"]:
point = QgsPointXY(feat["longitude"], feat["latitude"])
feature = QgsFeature()
feature.setGeometry(QgsGeometry.fromPointXY(point))
feature.setAttributes([feat["id"], feat["name"], feat["altitude"]])
provider.addFeature(feature)
# 添加到项目
QgsProject.instance().addMapLayer(layer)
更多PyQGIS问题环境留言或联系我们,转载须注明出处。