22 QString QgsPointsLayerFromTableAlgorithm::name()
const
24 return QStringLiteral(
"createpointslayerfromtable" );
27 QString QgsPointsLayerFromTableAlgorithm::displayName()
const
29 return QObject::tr(
"Create points layer from table" );
32 QStringList QgsPointsLayerFromTableAlgorithm::tags()
const
34 return QObject::tr(
"points,create,values,attributes" ).split(
',' );
37 QString QgsPointsLayerFromTableAlgorithm::group()
const
39 return QObject::tr(
"Vector creation" );
42 QString QgsPointsLayerFromTableAlgorithm::groupId()
const
44 return QStringLiteral(
"vectorcreation" );
47 QString QgsPointsLayerFromTableAlgorithm::shortHelpString()
const
49 return QObject::tr(
"This algorithm generates a points layer based on the values from an input table." )
50 + QStringLiteral(
"\n\n" )
51 + QObject::tr(
"The table must contain a field with the X coordinate of each point and another "
52 "one with the Y coordinate, as well as optional fields with Z and M values. A CRS "
53 "for the output layer has to be specified, and the coordinates in the table are "
54 "assumed to be expressed in the units used by that CRS. The attributes table of "
55 "the resulting layer will be the input table." );
58 QgsPointsLayerFromTableAlgorithm *QgsPointsLayerFromTableAlgorithm::createInstance()
const
60 return new QgsPointsLayerFromTableAlgorithm();
63 void QgsPointsLayerFromTableAlgorithm::initAlgorithm(
const QVariantMap & )
75 addParameter(
new QgsProcessingParameterCrs( QStringLiteral(
"TARGET_CRS" ), QObject::tr(
"Target CRS" ), QStringLiteral(
"EPSG:4326" ) ) );
82 std::unique_ptr< QgsProcessingFeatureSource > featureSource( parameterAsSource( parameters, QStringLiteral(
"INPUT" ), context ) );
86 const QgsFields fields = featureSource->fields();
87 const int xFieldIndex = fields.
lookupField( parameterAsString( parameters, QStringLiteral(
"XFIELD" ), context ) );
88 const int yFieldIndex = fields.
lookupField( parameterAsString( parameters, QStringLiteral(
"YFIELD" ), context ) );
90 QString fieldName = parameterAsString( parameters, QStringLiteral(
"ZFIELD" ), context );
92 if ( !fieldName.isEmpty() )
95 fieldName = parameterAsString( parameters, QStringLiteral(
"MFIELD" ), context );
97 if ( !fieldName.isEmpty() )
101 if ( zFieldIndex >= 0 )
103 if ( mFieldIndex >= 0 )
113 const double step = featureSource->featureCount() > 0 ? 100.0 / featureSource->featureCount() : 1;
132 const double x = attrs.at( xFieldIndex ).toDouble( &xOk );
133 const double y = attrs.at( yFieldIndex ).toDouble( &yOk );
135 if ( ! attrs.at( xFieldIndex ).isNull() && ! attrs.at( yFieldIndex ).isNull() && xOk && yOk )
139 if ( zFieldIndex >= 0 && ! attrs.at( zFieldIndex ).isNull() )
140 point.addZValue( attrs.at( zFieldIndex ).toDouble() );
142 if ( mFieldIndex >= 0 && ! attrs.at( mFieldIndex ).isNull() )
143 point.addMValue( attrs.at( mFieldIndex ).toDouble() );
148 if ( !sink->addFeature( f ) )
155 outputs.insert( QStringLiteral(
"OUTPUT" ), dest );