3

I've used the v2 labeling engine to place some nice looking road labels. Now I'd like to export those labels as a point shapefile for use in another program. Is there any way to accomplish this?

  • what is the other program – Nathan W May 3 '12 at 12:47
  • The other program is OCAD. – Ríbean May 3 '12 at 15:06
  • 1
    I ask because QGIS doesn't seem to treat the labels as any kind of selectable objects. Or at least I don't know how to select them. OCAD doesn't have the ability to smart-label objects the way that QGIS does & if this can be done, it would save a lot of time. – Ríbean May 3 '12 at 15:09
  • Last month (Dec. 2013), Dr. Marco Hugentobler added direct DXF export to the current development version of QGIS, i.e. the master branch. However, labels are not included in the new feature (yet?). You may wish to contact Marco via the QGIS Dev mailing list to see if he is planning on it, or if you are interested in funding its development. – dakcarto Jan 9 '14 at 22:01
1

I do something like this:

canvas = qgis.utils.iface.mapCanvas()
fullext = canvas.mapRenderer().fullExtent()
f = 64
sx = fullext.xMinimum()
sy = fullext.yMinimum()
w = fullext.width()/f
h = fullext.height()/f
fileGrid = open("grid.txt","w")
for i in xrange(f): 
    for j in xrange(f): 
        rec = QgsRectangle(sx+i*w,sy+j*h,sx+(i+1)*w,sy+(j+1)*h)
        s = "%d,%d,%f,%f,%f,%f\n" % (i,j,rec.xMinimum(),rec.yMinimum(),rec.xMaximum(),rec.yMaximum())
        fileGrid.write(s)
        print "rec: "+rec.toString()
        canvas.setExtent(rec)
        canvas.refresh()
        filename = "test_%d_%d.txt" % (i,j)
        fileObj = open(filename,"w")
        labels = canvas.mapRenderer().labelingEngine().labelsWithinRect(fullext)
        for l in labels:
           # print l.labelText,l.cornerPoints[0].x(),l.cornerPoints[0].y(),l.rotation
            s = "%s,%f,%f,%f\n" % (l.labelText.encode("utf-8"),l.cornerPoints[0].x(),l.cornerPoints[0].y(),l.rotation)
            fileObj.write(s)
        fileObj.close()
        print "save: "+filename;


fileGrid.close()
print "END"

it writes labels to txt file with x and y coordinates and angle. I don't have any idea how to save labels for all maps in specific scale.

It should be noted that the angle in the txt file is in radians not degrees. If you load the file into QGIS you have to give the angle in degrees. This can be done by *180/pi. In QGIS you can type the expression "column with the angle"*180/pi under

properties>labels>placement>"icon besides rotation">expression

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.