Thank you Jordi!
But i am using a point memory layer as you mention but using special
markers as defined below, and the code that you propose me, do not
worked and my features with the symbols do not move. I need to have any
kind of special consideration when moving feature points with marker
symbols attached?
//create Vector layer in memory for adding iamge markers
QgsVectorLayer *symbolsLayer = new QgsVectorLayer("Point",
"temporairy_points", "memory");
QgsVectorDataProvider *provider = symbolsLayer->dataProvider();
//create new feature
QgsFeature feature = QgsFeature();
QgsPoint point =
ui.qgsMapCanvas->getCoordinateTransform()->toMapCoordinates(e->pos().x()
, e->pos().y());
QgsGeometry *geometry = geometry->fromPoint(point);
feature.setGeometry(geometry);
QgsSvgMarkerSymbolLayerV2 svgMarkersymbolLayerV2 = new
QgsSvgMarkerSymbolLayerV2(QCoreApplication::applicationDirPath () +
"/data/symbols/test.svg");
QgsSymbolLayerV2List symbolLayerV2List;
symbolLayerV2List.clear();
symbolLayerV2List.append(svgMarkersymbolLayerV2);
QgsMarkerSymbolV2 *markerSymbolV2 = new
QgsMarkerSymbolV2(symbolLayerV2List);
QgsRendererCategoryV2 *rendererCategoryV2 = new QgsRendererCategoryV2(0,
markerSymbolV2, "0");
QgsCategoryList categoryList;
categoryList.clear();
categoryList.append(*rendererCategoryV2);
QgsCategorizedSymbolRendererV2 *categorizedSymbolRendererV2 = new
QgsCategorizedSymbolRendererV2("A", categoryList);
symbolsLayer->startEditing();
symbolsLayer->setRendererV2(categorizedSymbolRendererV2);
symbolsLayer->addAttribute(QgsField("A", QVariant::String, "String", 4,
0, ""));
QList<QgsField> lstFields;
lstFields.insert(0, QgsField("A", QVariant::String, "String", 4, 0,
""));
provider->addAttributes(lstFields);
categorizedSymbolRendererV2->startRender(QgsRenderContext(),
symbolsLayer);
feature.clearAttributeMap();
QgsAttributeMap attributeMap;
attributeMap.insert(0, "0");
feature.setAttributeMap(attributeMap);
categorizedSymbolRendererV2->renderFeature(feature, QgsRenderContext(),
symbolsLayer->id().toInt(), false, false);
QgsFeatureList qgsfeaturesList = QgsFeatureList();
qgsfeaturesList.append(feature);
provider->addFeatures(qgsfeaturesList);
symbolsLayer->updateExtents();
// Add the Vector Layer to the Layer Registry
QgsMapLayerRegistry::instance()->addMapLayer(symbolsLayer, false);
myLayerSet.prepend(QgsMapCanvasLayer(symbolsLayer, true));
// Set the Map Canvas Layer Set
ui.qgsMapCanvas->setLayerSet(myLayerSet);
From: [email protected]
[mailto:[email protected]] On Behalf Of Jordi
Torres
Sent: Friday, June 14, 2013 11:54 AM
To: [email protected]
Subject: Re: [Qgis-developer] Using api to move features
One more thing:
It should be _vectorLayer instead of _contactLayer in the last three
lines.
Cheers.
2013/6/14 Jordi Torres <[email protected]>
OOPs forgot to send it to the list.
Hi Marco,
This is working for me, don't know if is the best option:
//_vector Layer is a point layer in memory
_vectorLayer->startEditing();
QgsGeometryMap m;
//Pass the feature id and the new x,y
m.insert(feature.id(),*QgsGeometry::fromPoint(QgsPoint(x,y)));
_vectorLayer->dataProvider()->changeGeometryValues(m);
_contactLayer->updateExtents();
_contactLayer->commitChanges();
_contactLayer.triggerRepaint();
Hope it helps.
2013/6/14 Marco Gomes <[email protected]>
I am trying to move features in a Qt timer without success. What it is
missing?
Below all my trials to make this work.
//pointMarkersLayer->dataProvider()->changeGeometryValues(geomMap);
//pointMarkersLayer->updateFeature(featureRoute_p);
//pointMarkersLayer->changeGeometry(featureRoute_p.id(),
geometry);
//pointMarkersLayer->moveVertex(finalPoint.x(), finalPoint.y(),
featureRoute_p.id(), 0);
//pointMarkersLayer->changeGeometry(featureRoute_p.id(),
geometry);
//pointMarkersLayer->updateFeature(featureRoute_p);
//categorizedSymbolRendererV2->renderFeature(featureRoute_p,
QgsRenderContext(), pointMarkersLayer->id().toInt(), false, false);
//pointMarkersLayer->startEditing();
//pointMarkersLayer->select(featureRoute_p.id(), false);
//featureRoute_p.setGeometry(QgsGeometry::fromPoint(finalPoint));
//pointMarkersLayer->updateFeature(featureRoute_p);
//float dx = finalPoint.x() -
featureRoute_p.geometry()->asPoint().x();
//float dy = finalPoint.y() -
featureRoute_p.geometry()->asPoint().y();
//pointMarkersLayer->translateFeature(featureRoute_p.id(), dx,
dy);
_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer
--
Jordi Torres
--
Jordi Torres
--
Jordi Torres
_______________________________________________
Qgis-developer mailing list
[email protected]
http://lists.osgeo.org/mailman/listinfo/qgis-developer