Tạo dòng có khoảng cách khác nhau từ điểm gốc bằng Python trong ArcGIS Desktop?


11

Tôi đang cố gắng tạo một tính năng đường thẳng từ một điểm duy nhất, sử dụng khoảng cách và góc được đặt bằng ArcGIS và Python (ArcPy).

Tôi có một điểm tại các tọa độ này: X = 400460,99, Y = 135836,76

Từ thời điểm này, tôi muốn tạo một đường dài 800 mét ở góc 15 độ từ điểm đó.

Tôi không biết điểm cuối kết quả sẽ là gì.

Dữ liệu của tôi được chiếu ở Máy bay South State Maryland - Mét.

Câu trả lời:


13

Điểm cuối được dịch chuyển từ điểm gốc 800 mét, tất nhiên. Sự dịch chuyển theo hướng của tọa độ x tỷ lệ với sin của góc (phía đông bắc) và sự dịch chuyển theo hướng của tọa độ y tỷ lệ với cosin của góc.

Do đó, từ sin (15 độ) = sin (0,261799) = 0,258819 và cos (15 độ) = 0,965926 chúng ta thu được

x-displacement = 800 sin(15 degrees) = 800 * 0.258819 = 207.055 

y-displacement = 800 cos(15 degrees) = 800* 0.965926 = 772.741.

Do đó tọa độ điểm cuối là (400460,99 + 207.055, 135836.76 + 772.741) = (400668.05, 136609,49).


Tôi la một chut Nhâm lân. if sin (theta aka 15 độ) = y / r và y = r * sin (15 độ) không nên chuyển đổi công thức cho các chuyển vị x và y?
ngoằn ngoèo

@Ziggy Công thức của bạn không phải là công thức chính xác cho một góc được đo ở phía đông bắc. Bạn đang cố gắng áp dụng các công thức cho một góc phía bắc của phía đông.
whuber

Làm thế nào bạn có thể nhận ra rằng vị trí và góc là phía đông của phía bắc? điều này có thể nằm ngoài phạm vi của những bình luận này nhưng bạn có bất kỳ đề xuất tài nguyên nào về nơi học và áp dụng các khái niệm cơ bản cho các câu hỏi về GIS như thế này không?
ngoằn ngoèo

1
@Ziggy Thông thường, các nhà địa lý đo góc theo độ phía đông của miền bắc, nhưng có nhiều cách khác. Đó là lý do tại sao tôi quan tâm đến việc thiết lập ý nghĩa của "góc" và cách đo. Những người sử dụng các quy ước khác chỉ cần thực hiện các điều chỉnh thông thường để áp dụng giải pháp này. Tôi không phải là chuyên gia về tài nguyên cho việc học trig: Tôi đã học nó từ lâu từ một văn bản đại số ở trường trung học, điều này là quá đủ để giải quyết bất kỳ câu hỏi nào về GIS. Bạn không cần phải biết nhiều trig nào .
whuber

13

Dựa trên câu trả lời của @ whuber , nếu bạn muốn thực hiện điều này trong Python, bạn sẽ tính toán độ dịch chuyển như đã nêu, sau đó tạo đầu ra dưới dạng tập hợp các điểm như vậy:

import arcpy
from math import radians, sin, cos

origin_x, origin_y = (400460.99, 135836.7)
distance = 800
angle = 15 # in degrees

# calculate offsets with light trig
(disp_x, disp_y) = (distance * sin(radians(angle)),\
                    distance * cos(radians(angle)))
(end_x, end_y) = (origin_x + disp_x, origin_y + disp_y)

output = "offset-line.shp"
arcpy.CreateFeatureClass_management("c:\workspace", output, "Polyline")
cur = arcpy.InsertCursor(output)
lineArray = arcpy.Array()

# start point
start = arcpy.Point()
(start.ID, start.X, start.Y) = (1, origin_x, origin_y)
lineArray.add(start)

# end point
end = arcpy.Point()
(end.ID, end.X, end.Y) = (2, end_x, end_y)
lineArray.add(end)

# write our fancy feature to the shapefile
feat = cur.newRow()
feat.shape = lineArray
cur.insertRow(feat)

# yes, this shouldn't really be necessary...
lineArray.removeAll()
del cur
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.