We all know that GRASS is a great GIS software. Combined with QGIS it is even more great!
Using GRASS from within QGIS is very useful to deal with daily GIS problems. Everyone that works with geospatial data knows how annoying is to clean up geometries full of errors. The manual process demands lots of time and we can always forget something in the end. Do this kind of job automatically is faster and safer.
Let’s se how to do this using pyqgis. Imagine that we have a database layer like this:
A good way to clean problems like those shown above and at the same time solve snapping problems is to use the following tools in v.clean.advanced provided by GRASS:
- break
- rmsa
- rmdangle
If you want a description on how those tools work, take a look at: https://grass.osgeo.org/grass73/manuals/v.clean.html
To clean it using grass we can use the following piece of code:
#choosing the algorithm alg = 'grass7:v.clean.advanced' #getting the vector layer we want to clean input = iface.activeLayer() #setting tools tools = 'break,rmsa,rmdangle' threshold = -1 #getting mapcanvas extent (bounding box) supposing we can see our data e = iface.mapCanvas().extent() xmax = e.xMaximum() ymax = e.yMaximum() xmin = e.xMinimum() ymin = e.yMinimum() extent = '{0},{1},{2},{3}'.format(xmin, xmax, ymin, ymax) #setting parameters: choose them according to your data snap = 100.0 minArea = 0.001 #running the grass algorithm ret = processing.runalg(alg, input, tools, threshold, extent, snap, minArea, None, None) #getting output layer outputLayer = processing.getObject(ret['output']) #Adding to registry QgsMapLayerRegistry.instance().addMapLayer(outputLayer) #getting error flags errorLayer = processing.getObject(ret['error']) #Adding to registry QgsMapLayerRegistry.instance().addMapLayer(errorLayer)
After running, we can see results like this:
Quite good, right?
Gostaria de saber se tem algum curso de programação Python que possa recomendar.
LikeLike
Olha, eu não conheço nenhum curso ministrado com um conteúdo como este que estamos fazendo.
LikeLike