Suite

Comment puis-je afficher la longueur en fonction de l'angle de la ligne ?

Comment puis-je afficher la longueur en fonction de l'angle de la ligne ?


Je veux afficher la longueur selon la partie 1 Image. mais maintenant, sa fabrication ressemble à la partie 2. J'utilise le code ci-dessous.

importer un fichier de formes de PIL importer une image, ImageDraw, ImageFont de qgis.utils importer iface de PyQt4.QtCore importer QVariant importer des maths importer psycopg2 essayer: conn = psycopg2.connect("dbname='postgres' user="postgres" host="localhost" password="mindcrew01"") sauf : print "Je n'arrive pas à me connecter à la base de données" cur = conn.cursor() r = shapefile.Reader("K:NEW_GISArkundArkundESRI SHAPE FILEADJUJICATIONFinal Arkund_Corr") formes = r.shapes() layer = iface.activeLayer() feature_dict = {f.id(): f pour f dans layer.getFeatures()} index = QgsSpatialIndex() pour f dans feature_dict.values() : index.insertFeature(f) Chalata_array=[] Neighbors_chalata_array={} Neighbors_pixels_array={} points_full_array={} pour f dans feature_dict.values() : polygon_f_id=[] polygon_f_id.append(f.id()) Chalata_array.append( f['STRING_']) Neighbors_chalata_first=[] Neighbors_chalata_first.append(f['STRING_']) geom = f.geometry() points_full_array_first=[] intersecting_ids = index.intersects(geom.boundingBox()) pour interse cting_id dans intersecting_ids : intersecting_f = feature_dict[intersecting_id] if (f != intersecting_f et non intersecting_f.geometry().disjoint(geom)): voisins_chalata_first.append(intersecting_f['STRING_']) polygon_id (intersecting_f).append(intersecting_f ) iwidth = 680 iheight = 449 xdist =shapes[f.id()].bbox[2] - formes[f.id()].bbox[0] ydist =shapes[f.id()].bbox[3 ] - formes[f.id()].bbox[1] xratio = (iwidth/(xdist+82)) yratio = (iheight/(ydist+15)) Neighbors_pixels_first={} pour get_id in range(len(polygon_f_id) ) : voisins_pixels_secound=[] pour x,y dans r.shapes()[polygon_f_id[get_id]].points : px = int((iwidth - ((shapes[polygon_f_id[0]].bbox[2] - x) * xratio)-100)) py = int(((shapes[polygon_f_id[0]].bbox[3] - y) * yratio)+30) voisins_pixels_secound.append((px,py)) points_full_array_first.append((px, py)) nears_pixels_first[get_id]=neighbours_pixels_second points_full_array[f['STRING_']]=points_full_array_first neighbors_chalata_array[f['STRING_']]=neighbours_chalata_first voisins_pixels _array[f['STRING_']]=neighbors_pixels_first #print points_full_array #print Neighbors_chalata_array #print Neighbors_pixels_array for chalata_no_i in range(len(Chalata_array)): fnt = ImageFont.truetype('B:example.GJBWAf fnt_new = ImageFont.truetype('C:exampleGJBWAV0B.ttf', 15) img = Image.new("RGB", (iwidth, iheight), "white") draw = ImageDraw.Draw(img) image_name=Chalata_array [chalata_no_i] pour new_chalata_no dans la plage(len(neighbors_pixels_array[Chalata_array[chalata_no_i]])): if(new_chalata_no==0) : get_pixels=neighbors_pixels_array[Chalata_array[chalata_no_i]][new_chalata_no==0) : get_pixels) n = len(get_pixels) # of corners area = 0.0 pour i in range(n): j = (i + 1) % n area += get_pixels[i][0] * get_pixels[j][1] area -= get_pixels[j][0] * get_pixels[i][1] area = abs(area) / 2.0 #new_area=area/1000 cur.execute("SELECT id FROM maap_chalta_no where district=%s and taluka=%s et village=%s et Chalto_Number=%s",("તાપી","વ્યારા","આરકું ડ",Chalata_array[chalata_no_i])) #print cur.fetchone()[0] if(cur.rowcount>0): cur.execute("UPDATE maap_chalta_no SET maap_number=%s WHERE id=%s",(area, cur.fetchone()[0])) else : query_three = "INSERT INTO maap_chalta_no (district,taluka,village,Chalto_Number,maap_number) VALUES (%s, %s, %s, %s, %s)" values_three = ( "તાપી","વ્યારા","આરકુંડ", Chalata_array[chalata_no_i], area) # Exécuter la requête sql cur.execute(query_three, values_three) conn.commit() x = [p[0] for p in get_pixels] y = [p[1] pour p dans get_pixels] centroid = (sum(x) / len(get_pixels), sum(y) / len(get_pixels)) draw.text(centroid, str(neighbors_chalata_array[Chalata_array[chalata_no_i]][new_chalata_no ]), font=fnt, fill="black") pour get_line_point in range(len(get_pixels)): if(get_line_point!=0): lin_points_array=[(line_x,line_y),(get_pixels[get_line_point][0], get_pixels[get_line_point][1])] draw.line(lin_points_array, fill="black", width=4) x_line = [p[0] for p in lin_points_array] y_line = [p[1] for p in lin_points_array] cen troid_new = ((sum(x_line) /2), (sum(y_line) /2)) line_length=math.hypot(get_pixels[get_line_point][0] - line_x, get_pixels[get_line_point][1]-line_y) new_line_length=line_length /3.28084 if(new_line_length>10) : org_length="{:.2f}".format(new_line_length) #new_org_length=org_length.split('.') #new_new_org_length=new_org_length[0]+' .'+new_org_length[1] draw.text(centroid_new, org_length, font=fnt_new, fill="black") line_x=get_pixels[get_line_point][0] line_y=get_pixels[get_line_point][1] else : #print new_chalata_no get_pixels=neighbours_pixels_array[Chalata_array]]chalata_no_i [new_chalata_no] x = [p[0] pour p dans get_pixels] y = [p[1] pour p dans get_pixels] centroïde = (sum(x) / len(get_pixels), sum(y) / len(get_pixels)) draw.text(centroid, str(neighbors_chalata_array[Chalata_array[chalata_no_i]][new_chalata_no]), font=fnt, fill="black") pour get_line_point in range(len(get_pixels)): if(get_line_point!=0): if (((get_pixels[get_line_point][0],get_pixels[get_line_point][1]) dans voisins_pixels_ar ray[Chalata_array[chalata_no_i]][0])== False): lin_points_array=[(line_x,line_y),(get_pixels[get_line_point][0],get_pixels[get_line_point][1])] draw.line(lin_points_array, fill ="black", width=1) x_line = [p[0] for p in lin_points_array] y_line = [p[1] for p in lin_points_array] centroid_new = ((sum(x_line) / len(lin_points_array)), (sum (y_line) / len(lin_points_array))-20) line_length=math.hypot(get_pixels[get_line_point][0] - line_x, get_pixels[get_line_point][1]-line_y) new_line_length=line_length/3.28084 if(new_line_length>10) : org_length="{:.2f}".format(new_line_length) #new_org_length=org_length.split('.') #new_new_org_length=new_org_length[0]+' .'+new_org_length[1] draw.text(centroid_new, org_length, police =fnt_new, fill="black") line_x=get_pixels[get_line_point][0] line_y=get_pixels[get_line_point][1] img_new_name="C:/example/Images/Chalta_no_"+str(image_name)+".png">


Ai-je bien compris, vous voulez dessiner les étiquettes parallèlement aux lignes ?

Une question très similaire vient d'être répondue aujourd'hui - Comment étiqueter les côtés individuels d'un polygone , en utilisant QGIS lui-même. Cela pourrait être un moyen plus facile d'y parvenir.

Je vois que vous utilisez PIL pour faire ce rendu. Cette réponse est-elle utile ?

Si vous souhaitez utiliser PIL, vous devrez être capable de calculer l'angle de rotation pour chaque bord. Je vous recommande de regarder QgsPoint et sa méthode azimut().


Voir la vidéo: Comment puis je trouver la longueur totale des lignes autocad