python3 streetViewLib.py

"""
模块:python3 streetViewLib.py
功能: 存放处理街景相关的常量、函数。
"""
import xml.dom.minidom
import os


def getFileExtension(filepath):
    """
    获取文件的扩展名。
    :param filepath: 文件路径。类似:“I:/31-CS/31-CS.shp”。
    :return: filepath 的扩展名。类似:“.shp”。
    """
    return filepath[filepath.rfind('.'):]


def joinDirpathFilenames(dirpath, filenames):
    """
    拼接路径和文件名。
    :param dirpath: 文件的根路径,类似:F:\3dData\小学-机电合模\1\71
    :param filenames: 文件名的列表,类似:['0.b3dm', '1.b3dm', '2.b3dm']
    :return: 文件路径的列表。
    """
    filePaths = []
    for filename in filenames:
        # 此处只收集“.jpg”格式的文件。
        if getFileExtension(filename) == ".jpg":
            # 拼接成绝对路径,并把路径中的 "\" -> "/"。
            filePaths.append(os.path.join(dirpath, filename).replace("\\", "/"))
    return filePaths


def getImgFilepathsOfDirectory(directory):
    """
    获取 directory 目录下的所有图片文件的绝对路径,
    存放到一个 列表里 返回。
    :param directory: 目标目录。
    :return: directory 目录下的所有文件的绝对路径的列表。
    """
    # filePaths,用以存放所有的文件路径!
    filePaths = []
    for root, dirs, files in os.walk(directory):
        filePaths.extend(joinDirpathFilenames(root, files))
    return filePaths


def getKrpanoParams(imgfilePaths):
    """
    获取 krpano 的参数字符串。
    :param imgfilePaths: 图片文件的列表,类似:
    ['F:/Gaoshengjie/LongGeTasks/streetView/streetImg3/ladybug_panoramic_000000.jpg', ...]
    :return: 列表的字符串形式,以空格开头,类似:" path/xx.jpg path/xxx.jpg ..."
    """
    return " " + " ".join(imgfilePaths)


def MAKE_VTOUR_NORMAL_droplet(krpanoAbsPath, krpanoParams):
    """
    调用 照片批处理程序,处理某目录下的照片,生成 vtour 目录。
    :param krpanoAbsPath: 批处理程序 MAKE_VTOUR_NORMAL_droplet.bat 的绝对路径,类似:
    F:/Gaoshengjie/LongGeTasks/streetView/pythonTest/krpanodew/krpano/krpano-1.19-pr13/MAKE_VTOUR_NORMAL_droplet.bat
    :param krpanoParams: 要处理的所有照片路径拼接成的字符串,空格开头,空格分隔。类似:
     F:/Gaoshengjie/LongGeTasks/streetView/streetImg3/ladybug_panoramic_000000.jpg F:/Gaoshengjie/LongGeTasks/streetView/streetImg3/ladybug_panoramic_000001.jpg ...
    :return:None.
    """
    os.system(krpanoAbsPath + krpanoParams)
    # os.kill(os.getpid())


def addHotSpot(xmlPath):
    """
    给 xmlPath 添加热点箭头。
    :param xmlPath: 要添加热点箭头的 xml 文件。
    :return:
    """
    # 1.解析 xml 文档。
    doc = xml.dom.minidom.parse(xmlPath)
    # 2.root, 根节点。
    root = doc.documentElement
    scenes = root.getElementsByTagName("scene")
    # print("scenes:", scenes)
    # print(len(scenes))
    # <hotspot name="spot4" style="skin_hotspotstyle" ath="10" atv="12" linkedscene="scene_ladybug_panoramic_000044"/>
    # for index in range(len(scenes) - 1):
    #     nextSceneName = scenes[index + 1].getAttribute("name")
    #     hotspot = doc.createElement("hotspot")
    #     if scenes[index].getElementsByTagName("hotspot"):
    #         scenes[index].removeChild(scenes[index].getElementsByTagName("hotspot")[0])
    #     scenes[index].appendChild(hotspot)
    #     hotspot.setAttribute("name", "spot4")
    #     hotspot.setAttribute("style", "skin_hotspotstyle")
    #     hotspot.setAttribute("ath", "10")
    #     hotspot.setAttribute("atv", "12")
    #     hotspot.setAttribute("linkedscene", nextSceneName)
    #     # print("nextSceneName:", nextSceneName, type(nextSceneName))

    # <hotspot name="spot4" style="skin_hotspotstyle" ath="10" atv="12" keep="true"/>
    hotspot = doc.createElement("hotspot")
    if scenes[0].getElementsByTagName("hotspot"):
        scenes[0].removeChild(scenes[0].getElementsByTagName("hotspot")[0])
    scenes[0].appendChild(hotspot)
    hotspot.setAttribute("name", "spot4")
    hotspot.setAttribute("style", "skin_hotspotstyle")
    hotspot.setAttribute("ath", "10")
    hotspot.setAttribute("atv", "12")
    hotspot.setAttribute("keep", "true")

    # 3.写文件。
    with open(xmlPath, "w", encoding="utf-8") as f:
        doc.writexml(f, indent='', addindent='', newl='', encoding="utf-8")
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值