2016-11-02 82 views
0

我对Python仍然很陌生。我要带领一个项目,在税地图上绘制我们县内的建筑脚印。在ArcGIS中使用Python从原点创建多边形/折线?

我已经找到了前面的问题,可能是非常有帮助的这个项目:https://gis.stackexchange.com/questions/6724/creating-line-of-varying-distance-from-origin-point-using-python-in-arcgis-deskt

我们卡马系统生成的意见/表所需要的信息。下面是一个例子:

PARID LLINE VECT      X_COORD Y_COORD 
1016649 0  R59D26L39U9L20U17  482547  1710874 

        180,59,270,26,0,39,90,9,0,20,90,17 (VECT column converted) 

我已经发现了一些Python示例的VECT列,该列是距离和方向调用的角度和由逗号分隔的距离转换。

我的问题:有没有实现循环到下面的脚本利用一个表,而不是静态的方式,用户输入,数字?由于我们有数千个多边形要建设,因此这对该县非常有价值。

下面是改变距离和角度x的代码段,以在ArcMap 10.2

#Using trig to deflect from a starting point 
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 

生成ÿ点任何建议,将不胜感激。

谢谢你宝贵的时间和知识。

回答

1

您可以根据给定的表创建一个词典来存储所有不同的值。如

d = {1:{"x":400460.99,"y":135836.7,"distance":800,"angle":15}, 
    2:{"x":"etc","y":"etc","distance":"etc","angle":"etc"}} 


for k in d.keys(): 
    origin_x, d[k]["x"] 
    origin_y = d[k]["y"] 
    distance = d[k]["distance"] 
    angle = d[k]["angle"] 

    #rest of the code 
    #..... 
+0

感谢您的快速响应。每个多边形的每一行是否需要创建自己的字典?正如问题中提到的,我们有几千个多边形可供创建。 @Daniel –

+0

@MichaelCore是的,如果数据来自表格,你可以指定一个多边形ID,然后用它的属性创建一个DIC。您必须动态创建dic的dic,而不是手动创建。 –

+0

非常感谢您的洞察力。我会检查一些食谱和帮助文件,看看我能产生什么。我会尽快发布我的代码并标记您的答案,以便我可以分享一些有用的内容。非常感谢你@Daniel –