坐标转换

# -*- coding =utf-8 -*-
# @Time : 2021/2/26 15:34
# @Author :Mr
# @File :method.py
# @Software :PyCharm
import cmath
import math


def dmstodeg(dms):
    # 十进制度转换成度分秒
    try:
        p = dms.find('°')
        if p < 0:
            return str(dms)
        # arcpy.AddMessage("p="+str(p))
        d = int(dms[0:p].strip())
        # arcpy.AddMessage("d="+str(d))
        p1 = dms.find('′')
        # arcpy.AddMessage("p1="+str(p1))
        if p1 < 0:
            p1 = dms.find("'")

        f = 0  #
        if p1 > 0:
            f = int(dms[p + 1:p1].strip())
        else:
            p1 = p
        # arcpy.AddMessage("f="+str(f))

        p2 = dms.find('″')
        if p2 < 0:
            p2 = dms.find('"')
        # arcpy.AddMessage("p2="+str(p2))

        s = 0  #
        if p2 > 0:
            s = float(dms[p1 + 1:p2].strip())
        else:
            s = dms[p1 + 1:].strip()  # 可以没有秒

        # arcpy.AddMessage("s="+str(s))

        return d + f / 60 + s / 3600
    except ValueError:
        return None


def degtodms(deg):
    # 十进制度转换成度分秒
    try:
        degrees = int(deg)
        minutes = int(math.modf(deg)[0] * 60)
        seconds = round(math.modf(math.modf(deg)[0] * 60)[0] * 60, 2)
        if deg < 0:
            dms = str(degrees) + '°' + str(-minutes) + "\'" + str(-seconds) + '"'
        else:
            dms = str(degrees) + '°' + str(minutes) + "\'" + str(seconds) + '"'
        return dms
    except ValueError:
        return print(ValueError)


def get_dist_deg(ax, ay, bx, by):
    # 计算两点距离和方位角(角度为十进制)
    a = complex(ax, ay)
    b = complex(bx, by)
    linear, azimuth = cmath.polar(b - a)
    if azimuth < 0:
        return linear, math.degrees(azimuth) + 360
    else:
        return linear, math.degrees(azimuth)


def transformParameter(parameter):
    # 根据两个已知坐标在两个坐标系坐标计算坐标系转换参数
    ax, ay, bx, by, cx, cy, dx, dy = parameter[0], parameter[1], parameter[2], parameter[3], parameter[4], parameter[5], \
                                     parameter[6], parameter[7]

    a = complex(ax, ay)
    b = complex(bx, by)
    c = complex(cx, cy)
    d = complex(dx, dy)
    # 计算旋转尺度复数
    f = (c - d) / (a - b)
    # 计算平移复数
    e = c - f * a
    # 显示平移复数
    print(e)
    # 显示尺度参数(尺度为缩放比例),以度分秒形式显示旋转角度
    print(f.real, degtodms(math.degrees(f.imag)))
    return e, f


def coordinateTransform(e, f, coordinate):
    # 根据坐标系转换参数计算需要转换点的目标坐标
    g = e + f * complex(coordinate[0], coordinate[1])
    return round(g.real, 3), round(g.imag, 3)


def architectureCoordinateTransform(angle, base_point, coordinate, k=1, direction=0):
    # 建筑坐标转换
    # 根据坐标系转换参数计算需要转换点的目标坐标
    a = complex(base_point[0], base_point[1])
    c = complex(coordinate[0], coordinate[1])
    d = complex(k, math.radians(angle))
    if direction == 0:
        # 建筑坐标转换成测量坐标
        g = a + d * c
    else:
        # 测量坐标转换成建筑坐标
        g = (c - a) / d
    return round(g.real, 3), round(g.imag, 3)






if __name__ == '__main__':
    print('a')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值