ArcGIS Desktop'ta Python kullanarak başlangıç ​​noktasından değişen mesafeye kadar çizgi oluşturuluyor mu?


11

ArcGIS ve Python (ArcPy) kullanarak ayarlanmış bir mesafe ve açı kullanarak, tek bir noktadan bir çizgi özelliği oluşturmaya çalışıyorum.

Bu koordinatlarda bir noktam var: X = 400460.99, Y = 135836.76

Bu noktadan itibaren, o noktadan 15 derecelik bir açıyla 800 Metre uzunluğunda bir çizgi oluşturmak istiyorum.

Ortaya çıkan son noktanın ne olacağını bilmiyorum.

Verilerim Maryland State Plane South - Meters'ta öngörülüyor.

Yanıtlar:


13

Son nokta, elbette, 800 metreden orijinden çıkarıldı. X-koordinatı yönündeki yer değiştirme, açının sinüsü ile orantılıdır (kuzeyin doğusunda) ve y-koordinat yönündeki yer değiştirme, açının kosinüsü ile orantılıdır.

Böylece, günahtan (15 derece) = günah (0.261799) = 0.258819 ve cos (15 derece) = 0.965926

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

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

Bu nedenle uç nokta koordinatları (400460.99 + 207.055, 135836.76 + 772.741) = (400668.05, 136609.49).


Biraz kafam karıştı. günah (teta aka 15 derece) = y / r ve y = r * günah (15 derece) x ve y yer değiştirmelerinin formülleri değiştirilmemelidir?
ziggy

@Ziggy Formülleriniz, kuzeyin doğusunda ölçülen bir açı için doğru formüller değil. Doğunun kuzeyindeki bir açı için formüller uygulamaya çalışıyorsunuz.
whuber

konumun ve açının kuzeyin doğusunda olduğunu nasıl fark ettiniz? bu, bu yorumların kapsamı dışında olabilir, ancak bunun gibi CBS sorularına temel trig kavramlarının nerede öğrenileceği ve uygulanacağı konusunda herhangi bir kaynak tavsiyeniz var mı?
ziggy

1
@Ziggy Geleneksel olarak coğrafyacılar açıları kuzeyin doğusundaki derece cinsinden ölçer, ancak başka birçok yol vardır. Bu yüzden "açı" ile ne demek istediğimi ve nasıl ölçüldüğünü belirlemeye özen gösterdim. Diğer kuralları kullanan kişilerin bu çözümü uygulamak için yalnızca olağan ayarlamaları yapmaları gerekir. Trig öğrenmek için kaynaklar konusunda uzman değilim: Uzun zaman önce lise cebir metninden öğrendim, bu da herhangi bir CBS sorusunu ele almak için fazlasıyla yeterliydi. Zaten çok fazla trig bilmek zorunda değilsin .
whuber

13

Bina @ whuber cevabı sen Python bu uygulamaya istiyorsanız aşağıdakileri belirtildiği gibi deplasman hesaplamak istiyorum, o zaman noktalarının bir koleksiyon olarak bir çıkış oluşturmak böylece gibi:

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.