การสร้างเส้นของระยะทางที่แตกต่างจากจุดกำเนิดโดยใช้ Python ใน ArcGIS Desktop?


11

ฉันพยายามสร้างคุณสมบัติเส้นจากจุดเดียวโดยใช้ระยะทางและมุมที่กำหนดโดยใช้ ArcGIS และ Python (ArcPy)

ฉันมีจุดที่พิกัดเหล่านี้: X = 400460.99, Y = 135836.76

จากจุดนี้ฉันต้องการสร้างเส้นยาว 800 เมตรที่มุม 15 องศาจากจุดนั้น

ฉันไม่รู้ว่าผลลัพธ์ที่ได้คืออะไร

ข้อมูลของฉันถูกฉายใน Maryland State Plane South - Meters

คำตอบ:


13

จุดสิ้นสุดถูกแทนที่จากแหล่งกำเนิดโดย 800 เมตรแน่นอน การกระจัดในทิศทางของพิกัด x นั้นเป็นสัดส่วนกับไซน์ของมุม (ทิศตะวันออกเฉียงเหนือ) และการกระจัดในทิศทางของพิกัด y นั้นเป็นสัดส่วนกับโคไซน์ของมุม

ดังนั้นจากบาป (15 องศา) = บาป (0.261799) = 0.258819 และ cos (15 องศา) = 0.965926 เราได้รับ

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

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

ดังนั้นพิกัดปลายทางคือ (400460.99 + 207.055, 135836.76 + 772.741) = (400668.05, 136609.49)


ฉันสับสนเล็กน้อย ถ้า sin (theta aka 15 องศา) = y / r และ y = r * sin (15 องศา) ไม่ควรเปลี่ยนสูตรสำหรับการแทนที่ของ x และ y?
ziggy

@ Ziggy สูตรของคุณไม่ถูกต้องสำหรับมุมที่วัดจากทิศตะวันออกเฉียงเหนือ คุณกำลังพยายามใช้สูตรสำหรับมุมทิศเหนือของตะวันออก
whuber

คุณทราบได้อย่างไรว่าตำแหน่งที่ตั้งและมุมอยู่ทางตะวันออกเฉียงเหนือ สิ่งนี้อาจอยู่นอกขอบเขตของความคิดเห็นเหล่านี้ แต่คุณมีคำแนะนำทรัพยากรที่จะเรียนรู้และนำแนวคิดตรีโกณมิติพื้นฐานมาใช้กับคำถาม GIS เช่นนี้หรือไม่
ziggy

1
@ Ziggy ตามอัตภาพนักภูมิศาสตร์วัดมุมเป็นองศาตะวันออกเฉียงเหนือ แต่มีวิธีอื่นอีกมากมาย นั่นคือเหตุผลที่ฉันดูแลเพื่อสร้างสิ่งที่ฉันหมายถึงโดย "มุม" และวิธีการวัด ผู้ที่ใช้การประชุมอื่น ๆ จำเป็นต้องทำการปรับเปลี่ยนตามปกติเพื่อใช้โซลูชันนี้เท่านั้น ฉันไม่มีความรู้เรื่องทรัพยากรสำหรับการเรียนรู้ตรีโกณมิติ: ฉันเรียนรู้มานานแล้วจากข้อความพีชคณิตมัธยมซึ่งเกินพอที่จะตอบคำถาม GIS คุณไม่จำเป็นต้องรู้หนุนมากอยู่แล้ว
whuber

13

การสร้างคำตอบของ @ whuberถ้าคุณต้องการใช้สิ่งนี้ใน Python คุณจะคำนวณการกระจัดตามที่ระบุไว้จากนั้นสร้างเอาต์พุตเป็นชุดของคะแนนดังนี้

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.