Đặt nhãn vuông góc trong QGIS?


8

Tôi đang cố gắng để có được kiểu nhãn giống với Định hướng vị trí vuông góc từ ArcGIS trong QGIS. Vì QGIS không có tính năng này làm mặc định, tùy chọn sẽ sử dụng vị trí tùy chỉnh cho việc này.

Một ví dụ về ArcGIS:

nhập mô tả hình ảnh ở đây

Một cách giải quyết trong QGIS

Cài đặt:

Dữ liệu được xác định tọa độ X (nhãn ở giữa dòng anh ta):

$x_at( num_points( $geometry)/2)

Dữ liệu được xác định tọa độ Y (giống như vị trí của X):

$y_at( num_points( $geometry)/2)

Dữ liệu được xác định Xoay vòng:

angle_at_vertex( $geometry , num_points( $geometry)/2)

nhập mô tả hình ảnh ở đây

Chỉ với 2/3 nhãn, vị trí được chấp nhận. Đối với các dòng có nhiều dấu ngắt với các góc khác nhau, sẽ khó khăn hơn để có được một nhãn đẹp.

ArcGIS dường như tìm kiếm phân khúc dòng với ít lần ngắt hơn hoặc một đoạn thẳng. Có cách nào để có được tọa độ hoặc hình học của đoạn thẳng nhất bằng cách sử dụng trình tạo Biểu thức cho vị trí nhãn tốt hơn không?


làm thế nào về việc lấy trung bình các góc ở một số đỉnh
csk

@csk Tôi đã thử line_interpolate_angle($geometry, some lenght)và lấy một số angle_at_vertex( $geometry , num_points( $geometry)). Một vòng lặp trên chức năng này có thể là một aproach, nhưng tôi không thể thực hiện nó trực tiếp trong trình tạo Expresion
aldo_tapia

có vẻ như bạn muốn tìm một phần của đường trong đó góc ở mỗi đỉnh xấp xỉ bằng đường_interpolate_angle
csk

@csk vâng, đại loại thế. Một đoạn thẳng để đặt nhãn
aldo_tapia

Câu trả lời:


1

Cách giải quyết thực tế

Giả sử loại hình học này:

nhập mô tả hình ảnh ở đây

Tôi đã cố gắng tìm một vị trí tốt. Tôi cũng đang làm việc với tập bản đồ, vì vậy tôi đã sử dụng khoảng cách 3% tính năng tập bản đồ từ phần giữa của đường nội suy trên các đỉnh của tính năng để đặt nhãn:

Một cái gì đó như thế này:

nhập mô tả hình ảnh ở đây

Và tôi tạo một mũi tên từ đỉnh giữa của tính năng đến nhãn:

nhập mô tả hình ảnh ở đây


Cài đặt:

Mũi tên:

Máy phát điện hình học

make_line(make_point($x_at( num_points( $geometry)/2) , $y_at( num_points( $geometry)/2)),
  project( line_interpolate_point(make_line(make_point($x_at(1),$y_at(1)),make_point($x_at(-1),$y_at(-1))),
  length(make_line(make_point($x_at(1),$y_at(1)),make_point($x_at(-1),$y_at(-1))))/2),length(@atlas_geometry)*0.03,
   (radians(line_interpolate_angle(make_line(make_point($x_at(1),$y_at(1)),make_point($x_at(-1),$y_at(-1))),
  0.0001)))+ pi() *0.5))

Nhãn

Dữ liệu xác định X

x(project( line_interpolate_point(make_line(make_point($x_at(1),
  $y_at(1)),make_point($x_at(-1),$y_at(-1))),
  length(make_line(make_point($x_at(1),$y_at(1)),
  make_point($x_at(-1),$y_at(-1))))/2),length(@atlas_geometry)*0.03,
   (radians(line_interpolate_angle(make_line(make_point($x_at(1),
  $y_at(1)),make_point($x_at(-1),$y_at(-1))),0.0001)))+ pi() *0.5))

Dữ liệu xác định Y

y(project( line_interpolate_point(make_line(make_point($x_at(1),
  $y_at(1)),make_point($x_at(-1),$y_at(-1))),
  length(make_line(make_point($x_at(1),$y_at(1)),
  make_point($x_at(-1),$y_at(-1))))/2),length(@atlas_geometry)*0.03,
   (radians(line_interpolate_angle(make_line(make_point($x_at(1),
  $y_at(1)),make_point($x_at(-1),$y_at(-1))),0.0001)))+ pi() *0.5))

Có lẽ điều này có thể hữu ích cho một ai đó.

Nếu có một cách tiếp cận tốt hơn, vui mừng nhận được nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.