【问题标题】:ITM (Irish Transverse Coordinate) conversion to GPS for google maps Python3ITM(爱尔兰横坐标)转换为谷歌地图 Python3 的 GPS
【发布时间】:2019-10-21 09:00:40
【问题描述】:

我对坐标一无所知。我的问题是我有一个包含 ITM 格式(Irish_X 和 Irish_Y)坐标的数据集。 我想将 ITM 坐标转换为 Google 地图可读的坐标

在线我发现了一个可能有用但我不知道如何使用的库,并且文档使用了我不习惯的非常具体的行话: https://proj.org

我还在同一个库 gitHub 存储库中评论了寻找答案: https://github.com/OSGeo/PROJ/issues/1687

非常感谢您的帮助!

【问题讨论】:

  • 您列出的坐标不在 ITM 中,而是在爱尔兰网格中。您可以通过在以下“官方”转换器中将它们作为 ITM 插入来确认,您将收到超出范围的错误,gnss.osi.ie/new-converter
  • 嗨 Luis,感谢您的评论,最后我找到了另一个具有 gps 坐标的数据集。顺便说一句,您知道如何以编程方式转换它们吗?
  • 我给出了 ITM 到 WGS84 转换的答案,这个问题的标题。对于爱尔兰网格,最好再问一个问题。

标签: python-3.x coordinates coordinate-systems


【解决方案1】:

要从 ITM 转换为 WGS84,只需调用 def itm2geo(x,y): 函数,如 Teste Values 部分中代码末尾的示例所示。

前两个函数(arcmerxy2geo)是辅助函数,不需要显式调用(由itm2geo(x,y)调用

from math import *

############################################################################

# Meridian Arc

############################################################################

def arcmer(a,equad,lat1,lat2):

    b=a*sqrt(1-equad)

    n=(a-b)/(a+b)

    a0=1.+((n**2)/4.)+((n**4)/64.)

    a2=(3./2.)*(n-((n**3)/8.))

    a4=(15./16.)*((n**2)-((n**4)/4.))

    a6=(35./48.)*(n**3)



    s1=a/(1+n)*(a0*lat1-a2*sin(2.*lat1)+a4*sin(4.*lat1)-a6*sin(6.*lat1))

    s2=a/(1+n)*(a0*lat2-a2*sin(2.*lat2)+a4*sin(4.*lat2)-a6*sin(6.*lat2))

    return s2-s1

###############################################################################
#
# Transverse Mercator Inverse Projection
#
###############################################################################
def xy2geo(m,p,a,equad,lat0,lon0):

    lat0=radians(lat0)
    lon0=radians(lon0)

    sigma1=p

    fil=lat0+sigma1/(a*(1-equad))

    deltafi=1

    while deltafi > 0.0000000001:

        sigma2=arcmer(a,equad,lat0,fil)

        RO=a*(1-equad)/((1-equad*(sin(fil)**2))**(3./2.))

        deltafi=(sigma1-sigma2)/RO

        fil=fil+deltafi 


    N=a/sqrt(1-equad*(sin(fil))**2)

    RO=a*(1-equad)/((1-equad*(sin(fil)**2))**(3./2.))

    t=tan(fil)

    psi=N/RO

    lat=fil-(t/RO)*((m**2)/(2.*N))+(t/RO)*((m**4)/(24.*(N**3)))*(-4.*(psi**2)-9.*psi*(1.-t**2)+12.*(t**2))-(t/RO)*(m**6/(720.*(N**5)))*(8.*(psi**4)*(11.-24.*(t**2))-12.*(psi**3)*(21.-71.*(t**2))+15.*(psi**2)*(15.-98.*(t**2)+15.*(t**4))+180.*psi*(5.*(t**2)-3.*(t**4))-360.*(t**4))+(t/RO)*((m**8)/(40320.*(N**7)))*(1385.+3633.*(t**2)+4095.*(t**4)+1575.*(t**6))

    lon=(m/(N))-((m**3)/(6.*(N**3)))*(psi+2.*(t**2))+((m**5)/(120.*(N**5)))*(-4.*(psi**3)*(1.-6.*(t**2))+(psi**2)*(9.-68.*(t**2))+72.*psi*(t**2)+24.*(t**4))-((m**7)/(5040.*(N**7)))*(61.+662.*(t**2)+1320.*(t**4)+720.*(t**6))

    lon=lon0+lon/cos(fil)

    lat=degrees(lat)
    lon=degrees(lon)

    return lat,lon


#############################################################################

# Irish Transverse Mercator - Inverse

#############################################################################

def itm2geo(x,y):

    # GRS-80

    a = 6378137.

    equad =0.00669437999        

    # Natural Origin 

    lat0=53.5

    lon0=-8.

    k0=0.999820

    p = (y - 750000.) /k0

    m = (x - 600000.) /k0

    lat,lon = xy2geo(m,p,a,equad,lat0,lon0)

    return lat,lon

#############################################################################

# Test values 

#############################################################################             
#lat=53.5

#lon=-8.

test = itm2geo(600000.,750000.)

print ("latitude= %.16f" %test[0])
print ("longitude= %.16f" %test[1])

【讨论】:

猜你喜欢
  • 2023-03-30
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多