5.1 加载矢量图层(ogr,gpx)

转载 5.1 加载矢量图层(ogr,gpx)_矢量层文件信息-CSDN博客

目录

前言

加载矢量(vector)图层

ogr

Shapefile

QGis导入.shp文件

代码导入

gpx

QGis导入GPX文件

代码导入

gpkg

QGis导入GPKG文件

代码导入

geojson

QGis导入GeoJson文件

代码导入

gml

QGis导入GML

代码导入

kml/kmz

QGis导入Kml

代码导入

dxf/dwg

QGis导入dxf

代码导入

Coverage

QGis导入Coverage矢量数据

代码导入

ogr参数总结

gpx

QGis导入gpx

代码导入

总结


前言

本章讲述使用qgis c++ Api加载各种类型的矢量地图数据显示。

加载矢量(vector)图层

在QGIS中,图层并不保存数据的实体,而是引用各种类型的数据源,并利用图层样式等属性渲染数据。

  • QgsVectorLayer代表矢量图层,首先看一下官方文档

The QgsVectorLayer is instantiated by specifying the name of a data provider, such as postgres or wfs, and url defining the specific data set to connect to. The vector layer constructor in turn instantiates a QgsVectorDataProvider subclass corresponding to the provider type, and passes it the url. The data provider connects to the data source.

  • 实例化QgsVectorLayer需要提供data provider的名称以及文件路径或url,其构造函数如下
QgsVectorLayer (const QString &path=QString(), const QString &baseName=QString(), const QString &providerLib="ogr", const QgsVectorLayer::LayerOptions &options=QgsVectorLayer::LayerOptions())
  • data provider可以指定的值包括:

  • data provider分两类,内置和外部,外部data provider以动态库的形式存在,如下图

以下是完整加载data provider后的输出

C:\src\OSGeo4W\src\qgis-ltr-dev\qgis\src\core\providers\qgsproviderregistry.cpp(337) : (QgsProviderRegistry::init) [633ms] Loaded 25 providers (OAPIF;WFS;arcgisfeatureserver;arcgismapserver;copc;delimitedtext;ept;gdal;geonode;gpx;hana;mdal;memory;mesh_memory;mssql;ogr;pdal;postgres;postgresraster;spatialite;vectortile;virtual;virtualraster;wcs;wms) 

下边分别加载不同data provider的数据

ogr

Accesses data using the OGR drivers (https://gdal.org/drivers/vector/index.html). The url is the OGR connection string. A wide variety of data formats can be accessed using this driver, including file based formats used by many GIS systems, database formats, and web services. Some of these formats are also supported by custom data providers listed below.
OGR是用于读写矢量数据的抽象数据模型类库,是GDAL开源项目的一个分支,也采用X/MIT协议发布。

  • OGR支持的矢量数据格式完整列表见链接
  • 常见的矢量数据包括Shapefile、KML/KMZ、DXF/DMG、GPX、OSM等多种类型

Shapefile
  • 一个Shapefile数据仅存储单一要素类型(如点、线、面)
  • 一个Shapefile只包含一个图层
QGis导入.shp文件

QGis中打开后缀名为.shp格式的矢量图层

代码导入
  • 传入文件路径,图层名,provider名称,构造QgsVectorLayer
  • 调用QgsProject的成员函数addMapLayer即可
void MainWindow::addShpSlot()
{
    QString filename = QStringLiteral("maps/shapefile/protected_areas.shp");
    QFileInfo ff(filename);
    //创建图层
    QgsVectorLayer* vecLayer = new QgsVectorLayer(filename,ff.baseName(),"ogr");
    if(!vecLayer->isValid())
    {
        QMessageBox::critical(this,tr("error"),tr("invalid layer"));
        return;
    }
    QgsProject::instance()->addMapLayer(vecLayer);
    zoomToFirstLayer<QgsVectorLayer*>();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值