Skip to content

Instantly share code, notes, and snippets.

@seco
Forked from allieus/gist:1180051
Created August 27, 2018 08:09
Show Gist options
  • Save seco/b9d477907ff1c67f0e43ddd802353463 to your computer and use it in GitHub Desktop.
Save seco/b9d477907ff1c67f0e43ddd802353463 to your computer and use it in GitHub Desktop.
wgs84/tm127/tm128/grs80/cyworld 간 좌표변환
'''
aero님께서 구현하신 구글/네이버/싸이월드/콩나물 좌표변환은 펄/자바스크립트로 되어있습니다.
펄/자바스크립트에 익숙지 않은지라, 수식을 파이썬으로 번역해보았습니다.
'''
from pyproj import Proj
from pyproj import transform
WGS84 = { 'proj':'latlong', 'datum':'WGS84', 'ellps':'WGS84', }
# conamul
TM127 = { 'proj':'tmerc', 'lat_0':'38N', 'lon_0':'127.0028902777777777776E',
'ellps':'bessel', 'x_0':'200000', 'y_0':'500000', 'k':'1.0',
'towgs84':'-146.43,507.89,681.46'}
# naver
TM128 = { 'proj':'tmerc', 'lat_0':'38N', 'lon_0':'128E', 'ellps':'bessel',
'x_0':'400000', 'y_0':'600000', 'k':'0.9999',
'towgs84':'-146.43,507.89,681.46'}
# GRS80(Geodetic Reference System 1980:측지 기준계 1980)의 타원체
GRS80 = { 'proj':'tmerc', 'lat_0':'38', 'lon_0':'127', 'k':1, 'x_0':200000,
'y_0':600000, 'ellps':'GRS80', 'units':'m' }
def wgs84_to_tm128(longitude, latitude):
return transform( Proj(**WGS84), Proj(**TM128), longitude, latitude )
def tm128_to_wgs84(x, y):
return transform( Proj(**TM128), Proj(**WGS84), x, y )
def wgs84_to_tm127(longitude, latitude):
return map(lambda x:2.5*x,
transform( Proj(**WGS84), Proj(**TM127), longitude, latitude ))
def tm127_to_wgs84(x, y):
return transform( Proj(**TM127), Proj(**WGS84), x/2.5, y/2.5 )
def grs80_to_wgs84(x, y):
return transform( Proj(**GRS80), Proj(**WGS84), x, y )
def wgs84_to_cyworld(longitude, latitude):
x_min = 4456260.72
y_min = 1161720.00
long_min = 123.78323
lat_min = 32.27345
max_grid_length = 112721.92
x = (longitude-long_min)*max_grid_length/3.1308 + x_min
y = (latitude-lat_min)*max_grid_length/3.1308 + y_min
return x, y
def cyworld_to_wgs84(x, y):
x_min = 4456260.72;
y_min = 1161720.00;
long_min = 123.78323;
lat_min = 32.27345;
max_grid_length = 112721.92;
longitude = long_min + (x-x_min)*3.1308 / max_grid_length;
latitude = lat_min + (y-y_min)*3.1308 / max_grid_length;
return longitude, latitude
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment