zoukankan      html  css  js  c++  java
  • 根据线拐点的表格坐标信息批量生成奥维地图轨迹

    `# 根据线拐点的表格坐标信息批量生成奥维地图轨迹####
    '''

    • 功能用途介绍:

      • 如何根据野外标记的坐标信息,在奥维地图上绘制轨迹和拐点标签
      • 优点:可以批量在奥维地图上标记多条轨迹路线,和标记拐点标签,并可修改点标签的大小、颜色,线的宽度。
      • 用途:可以根据野外调查的实际点位绘制工作轨迹,进行质量检查。
    • 模块使用方法:

      • 运行环境:采用python编程语言,在PyCharm开发平台运行。

      • 前期准备:

        • Windows系统安装xlrd库:cmd.exe-->pip3 install xlrd

        • excel表格原始数据格式:

    name xyh color width LineName Pnum a ln
    101 113.823035001277,25.1556843733412,0 ff00ff80 2 L1 1 1 L1-
    102 113.822375077267,25.1563570638673,0 ff00ff80 2 L1 2 2 L1-
    103 113.82171504702,25.1570297539114,0 ff00ff80 2 L1 3 3 L1-
    104 113.821055106587,25.1577023495313,0 ff00ff80 2 L1 4 4 L1-
    201 113.82039506199,25.1583750348307,0 ff00ff80 2 L2 1 5 L2-
    202 113.819735109284,25.1590477158692,0 ff00ff80 2 L2 2 6 L2-
    203 113.819075050336,25.1597203964229,0 ff00ff80 2 L2 3 7 L2-
    204 113.818415083279,25.160393072716,0 ff00ff80 2 L2 4 8 L2-
    205 113.817755106973,25.1610656564729,0 ff00ff80 2 L2 5 9 L2-
    301 113.817095026497,25.1617383299062,0 ff00ff80 2 L3 1 10 L3-
    302 113.816435037913,25.1624109990793,0 ff00ff80 2 L3 2 11 L3-
    401 113.815774943083,25.1630836677642,0 ff00ff80 2 L4 1 12 L4-
    402 113.815114938074,25.1637562420257,0 ff00ff80 2 L4 2 13 L4-
    403 113.814454828889,25.164428905961,0 ff00ff80 2 L4 3 14 L4-
    404 113.813794811597,25.1651015656366,0 ff00ff80 2 L4 4 15 L4-
    405 113.813134787128,25.1657742229374,0 ff00ff80 2 L4 5 16 L4-

    • 模块运行:
      • 点击“运行”
      • 输入:输入Excel表格数据存储路径
      • 结果保存到模块目录下,文件名为:“ 坐标转奥维结果.kml”
      • 将“ line坐标转奥维地图线结果.kml”导入到奥维地图软件,即完成点位标记
        '''

    效果如下:

    '''

    • 研发团队:广核智造研发小组 组长:bisonQue 研发日期:2020年7月3日
      '''
      import xlrd

    行 Row 列 Column 这是Excel里面的规范表述!

    便签绘制函数

    def placemark(name, color, scale, xyh):
    msg3 = '''
    %s%s ''' % (
    name, color, scale, xyh)
    return msg3
    # print(msg3)
    # with open("坐标转奥维结果.kmz", "w+", encoding="utf-8") as f:
    # f.write(msg3)

    绘制多段线函数

    def placemarkForLine(name, color, width, xyhlist):
    msgLine = '''< Placemark >< name > %s < / name > < Style > < LineStyle > < color > %s < / color > < width > %s < / width > < / LineStyle >< / Style >< LineString >< coordinates > %s< / coordinates >< / LineString >< / Placemark >
    '''% (name, color, width, xyhlist)
    msgLine ='''

    %s

    %s
    '''% (name, color, width, xyhlist)
    return msgLine
    # print(msg3)
    # with open("坐标转奥维结果.kmz", "w+", encoding="utf-8") as f:
    #     f.write(msg3)
    

    def strcount(a): # a为字符串参数 字符串中的所有元素的出现次数
    b = {} # 定义一个空字典
    c = len(a) # 求出字符串的长度
    i = 0
    while i < c:
    if a[i] in b:
    b[a[i]] += 1
    else:
    b[a[i]] = 1
    i += 1
    # 遍历字典
    # for item in b.items():
    # print(item)
    # b.pop(a[0])
    print(b)
    return b

    def all_list(arr): # list中的count,获取所有元素的出现次数
    result = {}
    for i in set(arr):
    result[i] = arr.count(i)
    return result

    main

    if name == 'main': # 主函数入库类似c的main函数
    # read_xlrd(excelFile=excelFile) #执行函数
    with open("line坐标转奥维地图线结果.kml", "w+", encoding="utf-8") as f:
    msg1 = '''OvitalMap_20200629_213234仁化项目奥维点'''
    f.write(msg1.strip(' '))

        excelFile = 'line.xls'  # excle文件路径名称
        # excelFile = str(input("请输入Excel表格数据存储路径,例如:E:/2020仁化矿山调查项目2020年/RHZB.xls,输入完路径按回车键,路径为:"))
    
        data = xlrd.open_workbook(excelFile)
        # 默认读取第1张sheet表
        table = data.sheet_by_index(0)  # 或者table = data.sheet_by_name('工作表1')
    
    标记线上的拐点
        rowNum = 0
        colNum = 0
        Name = ""
        Xyh = ""
        Color = ""
        Scale = ""
    
        for rowNum in range(table.nrows):  # 每行地址循环
            # for colNum in range(table.ncols):
            for colNum in range(table.ncols):
                nameValue = table.row_values(rowNum)[colNum]
                if rowNum > 0 and colNum==0:
                    Name= nameValue      #标签名字
                elif rowNum > 0 and colNum==1:
                    Xyh = nameValue        #标签坐标
                elif rowNum > 0 and colNum==2:
                    Color = nameValue     #标签颜色
                elif rowNum > 0 and colNum == 3:
                    Scale = nameValue     #标签大小
                else:
                    pass
            f.write(placemark(Name, Color,Scale, Xyh).strip('
    '))
    
    获取线名称放入列表
        xyzValue = ""
        res = ""
        a = []
        b = []
        list_l1 = []  # 用于提取线名称,按linename循环
        list_l2 = []  # 用于计算某条线出现的次数,终止循环
        for rowNum in range(table.nrows):  # 每行地址循环
            # for colNum in range(table.ncols):
            for colNum in range(table.ncols):
                nameValue = table.row_values(rowNum)[colNum]
                L = table.row_values
                if colNum == 7 and rowNum > 0:
                    lname = L(rowNum)[7]
                    list_l1.append(lname)
                    list_l2.append(L(rowNum)[4])
        # 提取线段名称,用于判断
        # print("list_l1:", list_l1)  #list_l1: ['L1-', 'L1-', 'L1-', 'L1-', 'L2-', 'L2-', 'L2-', 'L2-', 'L2-', 'L3-', 'L3-']
        # print("list_l2:", list_l2) #list_l2: ['L1', 'L1', 'L1', 'L1', 'L2', 'L2', 'L2', 'L2', 'L2', 'L3', 'L3']
        dict_count= all_list(list_l2)
        # print("dict_count:",dict_count)  # {'l3': 2, 'l1': 5, 'l2': 4}
        llist_l1 = set(list_l1)
        llist_l1 = list(set(list_l1))
        llist_l1.sort(key=list_l1.index)
        y = ''.join(llist_l1)
        lineName = y.split('-')
        lineName.pop()  # 删掉最后一个空字符
        # print("lineName:",lineName)   #['l1', 'l2', 'l3']
        # print(len(lineName)) #3
        # for i in range(len(lineName)):
        # print(lineName[i])     #l1     l2         l3
    
    绘制多段线
        for i in range(len(lineName)):  # len(lineName)循环次数是线的种类
            count=0
            j=0
            a = []
            for rowNum in range(table.nrows):  # 每行地址循环
                colNum = 1
                nameValue = table.row_values(rowNum)[colNum]
                L = table.row_values
                if L(rowNum)[4] == lineName[i] :
                   count+=1
                   j+=1
                   res = L(rowNum)[1]
                   a.append(res)
                   a.append(" ")
                   name=L(rowNum)[4]
                   color=L(rowNum)[2]
                   width=L(rowNum)[3]
            xyhlist=''.join(a)
            f.write(placemarkForLine(name, color, width, xyhlist))
    
    输出结尾部分
        msg2 = '''</Folder></Document></kml>'''
        f.write(msg2.strip('
    '))
    
    python打印输出

    with open("line坐标转奥维地图线结果.kml", "r", encoding="utf-8") as f1:
    print(f1.read())
    print("程序运行成功!结果保存到:line坐标转奥维地图线结果.kml")
    ############################ end ############################`

    因为不懂,所以要学; 因为平凡,所以努力。 因为有为,所以有位。 因为执着,所以精彩。
  • 相关阅读:
    国内的pythoner强烈建议使用豆瓣的pypi源 zz
    python3.x中的urllib模块
    idcheck.py
    17、关于hibernate的N+1问题
    16、【转】Hibernate 原汁原味的四种抓取策略
    1、SSH的整合---->将Struts2整合到Spring中
    1、利用json2html.js处理json数据
    1、Ubuntu14.04使用root登陆帐户
    2、CentOS中修改yum源
    1、在CentOS上安装Java JDK的步骤
  • 原文地址:https://www.cnblogs.com/quezesheng/p/13228067.html
Copyright © 2011-2022 走看看