不同的图形库和地理信息系统(GIS)软件提供了不同的方式来创建图层。以下是一些常见的图形库和GIS软件的创建图层的方式和示例代码:
1. **使用GDAL/OGR库**:
? ?GDAL(Geospatial Data Abstraction Library)和OGR(Simple Features Library)是用于读写地理空间数据的库。你可以使用它们来创建图层并写入地理空间数据。
? ?示例代码(C++):
? ?```cpp
? #include "gdal/ogr_api.h"
? ?int main() {
? ? ? ?// 创建一个源
? ? ? ?OGRRegisterAll();
? ? ? ?OGRDataSource *poDS = OGRSFDriverRegistrar::Open("data_source_name", TRUE);
? ? ? ?// 创建一个图层
? ? ? ?OGRLayer *poLayer = poDS->CreateLayer("layer_name", NULL, wkbPoint, NULL);
? ? ? ?// 添加
? ? ? ?OGRFieldDefn oField("field_name", OFTString);
? ? ? ?oField.SetWidth(32);
? ? ? ?poLayer->CreateField(&oField);
? ? ? ?// 创建要素并写入图
? ? ? ?OGRFeature *poFeature = OGRFeature::CreateFeature(poLayer->GetLayerDefn());
? ? ? ?poFeature->SetField("field_name", "field_value");
? ? ? ?OGRPoint pt;
? ? ? ?pt.setX(1.0);
? ? ? ?pt.setY(1.0);
? ? ? ?poFeature->SetGeometry(&pt);
? ? ? ?poLayer->CreateFeature(poFeature);
? ? ? ?// 释放资源 ? ? ? OGRFeature::DestroyFeature(poFeature);
? ? ? ?OGRDataSource::DestroyDataSource(poDS);
? ? ? ?
? ? ? ?return 0;
? ?}
? ?```
2. **使用Python的Fiona库**:
? ?Fiona是Python中用于读写地理空间数据的库,它可以与GDAL/OGR一起使用来创建图层并写入地理空间数据。
? ?示例代码(Python):
? ?```python ?
import fiona
? ?from fiona.crs import from_epsg
? ?# 创建图层
? ?schema = {
? ? ? ?'geometry': 'Point',
? ? ? ?'properties': {'name': 'str'}
? ?}
? ?with fiona.open('output.shp', 'w', 'ESRI Shapefile', schema, crs=from_epsg(4326)) as layer:
? ? ? ?# 添加要素
? ? ? ?point = {
? ? ? ? ? ?'type': 'Point',
? ? ? ? ? ?'coordinates': (1.0, 1.0)
? ? ? ?}
? ? ? ?layer.write({
? ? ? ? ? ?'geometry': point,
? ? ? ? ? ?'properties': {'name': 'example'}
? ? ? ?})
? ?```
3. **使用QGIS软件**:
? ?在QGIS软件中,你可以通过界面操作或者使用Python脚本来创建图层。
? ?示例代码(Python):
? ?```python
? from qgis.core import QgsVectorLayer, QgsField, QgsPoint, QgsFeature, QgsGeometry
? ?# 创建图层
? ?layer = QgsVectorLayer("Point", "layer_name", "memory")
? ?pr = layer.dataProvider()
? ?pr.addAttributes([QgsField("name", ?QVariant.String)])
? ?layer.updateFields()
? ?# 添加素
? ?feature = QgsFeature()
? ?feature.setGeometry(QgsGeometry.fromPointXY(QgsPoint(1.0, 1.0)))
? ?feature.setAttributes(["example"])
? ?pr.addFeature(feature)
? ?# 刷新地图
? ?layer.updateExtents()
? ?QgsProject.instance().addMapLayer(layer)
? ?```
未完待续……