代码之家  ›  专栏  ›  技术社区  ›  maurobio

使用pyshp创建直线段的形状文件?

  •  1
  • maurobio  · 技术社区  · 9 年前

    pyshp 库中,我正在尝试从以下数据(存储在列表中)创建形状文件:

    edge_list = [
        [-40.5, -20.666],
        [-39.849998, -18.700001],
        [-39.816002, -19.6],
        [-40.071999, -19.391001],
        [-40.150002, -19.933001],
        [-39.733002, -18.533001],
        [-39.833, -18.733],
        [-39.708, -18.419001],
        [-39.370998, -17.891001],
        [-39.200001, -17.417],
        [-39.216999, -17.299999],
        [-39.167, -17.083],
        [-39.049999, -16.433001],
        [-38.932999, -13.967],
        [-39.083, -16.583],
        [-39.0, -13.916],
        [-38.900002, -13.6],
    ]
    

    这是我的一段代码(其中edge\u list是上面的列表):

    w = shapefile.Writer()
    w.line(parts=[edge_list])
    w.field("COMMON_ID", 'C')
    w.save("test")
    

    enter image description here

    enter image description here

    有什么提示吗?

    import csv
    import shapefile
    
    data = csv.reader(open("test.csv", "rb"), delimiter = ',')
    data.next() # skip header line
    edge_list = []
    for row in data:
        edge_list.append([float(row[0]), float(row[1])])
    
    for e in range(len(edge_list)):
        print "x=", edge_list[e][0], "y=", edge_list[e][1]
    
    w = shapefile.Writer()
    w.line(parts=[edge_list])
    w.field("COMMON_ID", 'C')
    w.save("test")
    
    2 回复  |  直到 9 年前
        1
  •  1
  •   Scott Mermelstein    9 年前

    免责声明 :我没有使用shapefile或pyshp。但我知道画线的方法。

    edge_list

    在你的例子中,如果你的y变量是有序的,你的点看起来会很好。

    因此,请尝试替换此行:

    w.line(parts=[edge_list])
    

    有了这个:

    w.line(parts=sorted(edge_list, key=lambda point: point[1]))
    

        2
  •  1
  •   maurobio    9 年前

    以下是完整、完整的工作代码:

    import csv
    import shapefile
    
    data = csv.reader(open("test.csv", "rb"), delimiter = ',')
    data.next() # skip header line
    edge_list = []
    for row in data:
        edge_list.append([float(row[0]), float(row[1])])
    
    ## sort list before passing it to shapefile.line function
    edge_list = list(sorted(edge_list, key=lambda point: point[1]))
    
    for e in range(len(edge_list)):
        print "x=", edge_list[e][0], "y=", edge_list[e][1]
    
    w = shapefile.Writer()
    w.line(parts=[edge_list]) ## this now works OK!
    w.field("COMMON_ID", 'C')
    w.save("test")