坐标转换,EPSG:4326转换成高德坐标教程
这里先给大家介绍几个坐标系:
1.WGS84:国际坐标系,为一种大地坐标系,也是目前广泛使用的GPS全球卫星定位系统使用的坐标系。
2.GCJ02:火星坐标系,是由中国国家测绘局制订的地理信息系统的坐标系统。由WGS84坐标系经加密后的坐标系。
工作中有时需要将shape数据转换成高德坐标数据,由于目前数据大部分都是WGS84国际坐标系,因此需要通过使用高德地图提供的API将84坐标转换成GCJ02即火星坐标系。
第一步:准备数据
方法1:
从shape图上随机提取一些点,根据shape图形大小提取,如果图形较大,建议多提取一些。一般在拐点和图形的四周均匀选择。

点提取完成后获取坐标点的经纬度值。可以使用Arcgis的计算工具获取x,y值。画红框的地方需要注意,要选择十进制表示的经纬度。


坐标提取完成后新建一个excel表,将x,y值分别复制黏贴在excel表中的前两列。

方法2:
将shape数据存入postgresql,并使用postgis提供的函数随机从shape上提取点,并取出其x,y值。此方法是随机选择,因此选择的点未必均匀分布在图形四周和拐点处。
SELECT ST_X(geom), ST_Y(geom) from(
SELECT
(ST_Dump (ST_GeneratePoints (nanjing.geom, 20))).geom AS geom,
md5((random()*random())::text) as id,
random()*1000 as val
FROM nanjing where name = '浦口区')
k1
第二步:执行下面的python代码调取高德API进行坐标转换
import xlrd
from xlutils.copy import copy
from urllib import request
import json class ToGd():
def __init__(self, key, coordsys='gps', output='JSON'):
self.key = key # 高德应用的key
self.coordsys = coordsys # 原坐标系,默认选择gps,此处实际对应4326的坐标系
self.output = output # 设置高德api数据返回类型,可选JSON和xml
self.file_path = input('请输入你的文件路径') # 获取文件路径,即上面新建的excel文件名称 def split_li(self, locations_li):
# 拆分坐标列表
li = list()
for location in locations_li:
location_li = location.split(',')
# print(location_li)
li.append(location_li)
# print(li)
return li def locations(self):
# 读取文件中的数据并返回locations字符串及原坐标列表
f = xlrd.open_workbook(self.file_path)
index = f.sheet_names()[0]
sheet = f.sheet_by_name(index)
nrows = sheet.nrows
data_str = ''
old_locations_li = list()
for i in range(nrows):
if i == (nrows - 1):
data_li = str(sheet.row_values(i)[0]) + ',' + str(sheet.row_values(i)[1])
else:
data_li = str(sheet.row_values(i)[0]) + ',' + str(sheet.row_values(i)[1]) + '|'
data_str += data_li
old_locations_li.append(sheet.row_values(i))
return data_str, old_locations_li def make_response(self, locations):
# 构造请求url,并获取响应数据,返回拆分后的坐标列表
url = 'https://restapi.amap.com/v3/assistant/coordinate/convert?locations=%s&coordsys=%s&output=%s&key=%s' % \
(locations, self.coordsys, self.output, self.key)
# 返回值为json
resp_json = request.urlopen(url)
# json转换成字典
resp_dict = json.loads(resp_json.read().decode())
# 提取转换为高德坐标后的坐标
locations_str = resp_dict.get('locations')
# 字符串分割
locations_li = locations_str.split(';')
new_locations_li = self.split_li(locations_li)
return new_locations_li def save(self, old_locations_li, new_locations_li):
# 保存成excel或txt文件
# new_file = copy(f)
# new_sheet = new_file.get_sheet(0)
# for m in range(len(locations_li)):
# for n in range(len(locations_li[m])):
# new_sheet.write(m, n + 2, locations_li[m][n])
# file_path = self.file_path + '2'
# new_file.save(file_path)
file_path = 'result.txt'
with open(file_path, 'w', encoding='utf-8')as f:
for m in range(len(new_locations_li)):
# for n in range(len(new_locations_li[m])):
f.write(str(old_locations_li[m][0]))
f.write(' ')
f.write(str(old_locations_li[m][1]))
f.write(' ')
f.write(str(new_locations_li[m][0]))
f.write(' ')
f.write(str(new_locations_li[m][1]))
f.write('\n') def run(self):
data_str, old_locations_li = self.locations()
new_locations_li = self.make_response(data_str)
self.save(old_locations_li, new_locations_li) if __name__ == '__main__':
test = ToGd('154c586add07ef456b90b079935f47a4') # 输入高德应用的key,实例化对象
test.run()
这段代码的主要作用是调用高德地图的API将84坐标转换成对应的高德坐标,并按相应格式输出成txt文件。
上面的代码是用python写的,执行的话需要安装python环境,另外还需要申请高德应用的key,相关申请方法可查看https://lbs.amap.com/dev/key
代码执行完成后会在本地生成一个result.txt的文件,下面需要用这个文件做空间校正。
第三步:空间校正
在Arcgis中对需要做坐标转换的数据开启编辑功能,打开空间校正工具栏,输入连接文件。连接文件即第二步得出的result.txt文件。
可以点击View Link Table查看误差值,如果误差值太大,需要重新做连接文件。


选择需要校正的数据。


点击校正。

校正完成后即可得到与高德地图匹配的shape数据。
上述方法只能用于小范围测试使用,未做精度评估。如需大规模商业化使用,还需再想别的方法。
坐标转换,EPSG:4326转换成高德坐标教程的更多相关文章
- 编写Python脚本把sqlAlchemy对象转换成dict的教程
编写Python脚本把sqlAlchemy对象转换成dict的教程 在用sqlAlchemy写web应用的时候,经常会用json进行通信,跟json最接近的对象就是dict,有时候操作dict也会比操 ...
- vue 实现高德坐标转GPS坐标
vue 实现高德坐标转GPS坐标 首先介绍一下常见的几种地图的坐标类型: WGS-84:这是一个国际标准,也就是GPS坐标(Google Earth.或者GPS模块采集的都是这个类型). GCJ-02 ...
- ArcGIS中利用ArcMap将地理坐标系转换成投影坐标系(从WKID=4326到WKID=102100)
原文:ArcGIS中利用ArcMap将地理坐标系转换成投影坐标系(从WKID=4326到WKID=102100) 对于非地理专业的开发人员,对与这些生涩的概念,我们不一定都要了解,但是我们要理解,凡是 ...
- 转:ArcGIS中利用ArcMap将地理坐标系转换成投影坐标系(从WKID=4326到WKID=102100)
对于非地理专业的开发人员,对与这些生涩的概念,我们不一定都要了解,但是我们要理解,凡是以经纬度为单位的都是地理坐标系,因为它归根结底是一个椭球体,只不过各个国家为了反映该国家所在区域地球的真实形状,而 ...
- PaintCode 教程:矢量图轻松转换成CoreGraphics代码
本文译自Ranwenderlich的这篇:http://www.raywenderlich.com/100281/paintcode-for-designers-getting-started Pai ...
- 爬虫:把廖雪峰的教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...
- Python 爬虫:把廖雪峰教程转换成 PDF 电子书
写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天尝试写一个爬虫,将廖雪峰老师的 ...
- 微信原始坐标转换成百度坐标 lat lng
如有帮到你记得结合我这篇博客里的方法.... http://www.cnblogs.com/zc290987034/p/8294988.html {:wx_jssdk_config("fal ...
- Java-Runoob-高级教程-实例-时间处理:04. Java 实例 - 时间戳转换成时间
ylbtech-Java-Runoob-高级教程-实例-时间处理:04. Java 实例 - 时间戳转换成时间 1.返回顶部 1. Java 实例 - 时间戳转换成时间 Java 实例 以下实例演示 ...
随机推荐
- dialogs打开对话框选定文件夹,getopenfilename获取文件名
如果需要使用“打开”.“打印”等Excel内置对话框已经具有的功能,可以使用代码直接调用这些内置的对话框,如下面的代码所示. #001 Sub DialogOpen() #002 Appl ...
- 数据库MySQL--分组查询
事例使用文件:https://files.cnblogs.com/files/Vera-y/myemployees.zip 分组数据:group by 子句 分组查询语法: select 分组函数,列 ...
- linux 部署脚本
shell 脚本 #!/bin/bash #设置jdk环境 export JAVA_HOME=/usr/java/jdk1.8.0_45 export JRE_HOME=$JAVA_HOME/jre ...
- 14 win7 sp1下安装vs2015
0 引言 在win7下安装vs2015的时候遇到了很多问题,看了很多帖子,尝试了很多次,终于成功了.网上也有大量关于win7 sp1下安装vs2015的帖子,我在安装的时候也参考了很多相关经验,这次写 ...
- tomcat7 linux service
1. 创建tomcat用户 useradd -r -m -d /usr/local/tomcat7 -s /sbin/nologin tomcat 2. 将下面脚本命名为tomcat7 放入/etc/ ...
- iOS开发之SceneKit框架--SCNGeometry.h
1.SCNGeometry简介 SCNGeometry负责呈现三维模型的类,它管理者物体的形状.纹理等.它可以由SCNGeometrySource和SCNGeometryElement来构造, 一个S ...
- PAT甲级——A1123 Is It a Complete AVL Tree【30】
An AVL tree is a self-balancing binary search tree. In an AVL tree, the heights of the two child sub ...
- 一个小村庄的烦恼(netty-nio)
背景:一座大山有个小村庄,住着几百户人家,隔着大山那边几十里山路,有个小集市,家家户户经常翻山越岭买日用品,苦不堪言(同步阻塞,单线程,每户人家一个线程,去赶集了,今天也干不了别的活). 后来村长看着 ...
- NTT FWT(xor or and) 模板
void nnt(int a[],int len,int on) { ;i<len;i++) if(i<r[i]) swap(a[i],a[r[i]]); ;i<len;i<& ...
- c#窗体开发
奇: 常用控件的使用(期间参杂着VS快捷键/常用设置) 快捷键:引用命名空间:shift+alt+F10 断点:F9 调试:F5 逐句调试(每行代码一次跳转):F11 逐过程调试:F10 重构提取方法 ...