Skip to content
Permalink
Browse files

workaround to create unique memory layer data sources (fixes #12206)

  • Loading branch information
jef-n committed Feb 17, 2015
1 parent 255cbd2 commit f64730e8d196e40bfecd8bea67ae64b69fba0cb3
Showing with 7 additions and 2 deletions.
  1. +3 −0 src/app/qgisapp.cpp
  2. +2 −1 src/gui/qgsnewmemorylayerdialog.cpp
  3. +2 −1 src/plugins/roadgraph/exportdlg.cpp
@@ -6343,6 +6343,9 @@ QgsVectorLayer *QgisApp::pasteToNewMemoryVector()

QString typeName = QString( QGis::featureType( wkbType ) ).replace( "WKB", "" );

static int pastedFeatureLayers = 0;
typeName += QString( "?memoryid=pasted_features%1" ).arg( ++pastedFeatureLayers );

QgsDebugMsg( QString( "output wkbType = %1 typeName = %2" ).arg( wkbType ).arg( typeName ) );

QString message;
@@ -64,7 +64,8 @@ QgsVectorLayer *QgsNewMemoryLayerDialog::runAndCreateLayer( QWidget *parent )
geomType = "point";
}

QString layerProperties = geomType + QString( "?crs=%1" ).arg( crsId );
static int createScratchLayers = 0;
QString layerProperties = QString( "%1?crs=%2&memoryid=scratchlayer%3" ).arg( geomType ).arg( crsId ).arg( ++createScratchLayers );
QString name = dialog.layerName().isEmpty() ? tr( "New scratch layer" ) : dialog.layerName();
QgsVectorLayer* newLayer = new QgsVectorLayer( layerProperties, name, QString( "memory" ) );
return newLayer;
@@ -76,7 +76,8 @@ QgsVectorLayer* RgExportDlg::mapLayer() const
if ( layerId == QString( "-1" ) )
{
// create a temporary layer
myLayer = new QgsVectorLayer( "LineString?crs=epsg:4326", "shortest path", "memory" );
static int createdLayers = 0;
myLayer = new QgsVectorLayer( QString( "LineString?crs=epsg:4326&memoryid=rglayer%1" ).arg( ++createdLayers ), "shortest path", "memory" );

QgsVectorDataProvider *prov = myLayer->dataProvider();
if ( prov == NULL )

2 comments on commit f64730e

@nirvn

This comment has been minimized.

Copy link
Contributor

@nirvn nirvn replied Feb 17, 2015

@jef-n , that's a great workaround, it'll do just fine. There might be issues with projects that keep - through the memory layer saver plugin - memory layers across sessions, but the chances of affecting people out there would be quite slim.

There is one memory layer creation scenario that wasn't fixed by your commit, that is the processing's save to memory layer output. Might be worth fixing that too.

@jef-n

This comment has been minimized.

Copy link
Member Author

@jef-n jef-n replied Feb 17, 2015

should be implemented in e748281

Please sign in to comment.
You can’t perform that action at this time.