Membuat garis dengan jarak bervariasi dari titik asal menggunakan Python di ArcGIS Desktop?

11

Saya mencoba membuat fitur garis dari satu titik, menggunakan jarak dan sudut yang ditetapkan menggunakan ArcGIS dan Python (ArcPy).

Saya ada benarnya di koordinat ini: X = 400460,99, Y = 135836,76

Dari titik ini, saya ingin membuat garis panjang 800 Meter pada sudut 15 derajat dari titik itu.

Saya tidak tahu apa hasil akhir yang akan dihasilkan.

Data saya diproyeksikan di Maryland State Plane South - Meter.

J Graham
sumber

Jawaban:

13

Titik akhir dipindahkan dari asal dengan 800 meter, tentu saja. Perpindahan ke arah koordinat x sebanding dengan sinus sudut (timur utara) dan perpindahan ke arah koordinat y sebanding dengan kosinus sudut.

Dengan demikian, dari dosa (15 derajat) = dosa (0,261799) = 0,258819 dan cos (15 derajat) = 0,965926 kita dapatkan

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

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

Oleh karena itu koordinat titik akhir adalah (400460.99 + 207.055, 135836.76 + 772.741) = (400668.05, 136609.49).

whuber
sumber
Saya sedikit bingung. jika sin (theta alias 15 derajat) = y / r dan y = r * sin (15 derajat) bukankah rumus untuk perpindahan x dan y harus diaktifkan?
ziggy
@ Ziggy Rumus Anda bukan yang benar untuk sudut yang diukur timur dari utara. Anda mencoba menerapkan rumus untuk sudut utara timur.
whuber
bagaimana Anda bisa mengetahui bahwa lokasi dan sudutnya berada di timur utara? ini mungkin berada di luar ruang lingkup komentar ini tetapi apakah Anda memiliki rekomendasi sumber daya tentang di mana belajar dan menerapkan konsep trigonometri dasar untuk pertanyaan GIS seperti ini?
ziggy
1
@ Ziggy Secara konvensional, ahli geografi mengukur sudut dalam derajat timur dari utara, tetapi ada banyak cara lain. Itulah sebabnya saya berhati-hati untuk menetapkan apa yang saya maksud dengan "sudut" dan bagaimana itu diukur. Orang yang menggunakan konvensi lain hanya perlu melakukan penyesuaian biasa untuk menerapkan solusi ini. Saya bukan ahli sumber daya untuk mempelajari trigonometri: Saya mempelajarinya sejak lama dari teks aljabar sekolah menengah, yang lebih dari cukup untuk menjawab pertanyaan SIG. Anda tidak perlu tahu banyak pemicu .
whuber
13

Membangun jawaban @ whuber , jika Anda ingin menerapkan ini dengan Python, Anda akan menghitung perpindahan seperti yang dinyatakan, lalu buat output sebagai kumpulan poin seperti:

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
scw
sumber