这里先给大家介绍几个坐标系:

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转换成高德坐标教程的更多相关文章

  1. 编写Python脚本把sqlAlchemy对象转换成dict的教程

    编写Python脚本把sqlAlchemy对象转换成dict的教程 在用sqlAlchemy写web应用的时候,经常会用json进行通信,跟json最接近的对象就是dict,有时候操作dict也会比操 ...

  2. vue 实现高德坐标转GPS坐标

    vue 实现高德坐标转GPS坐标 首先介绍一下常见的几种地图的坐标类型: WGS-84:这是一个国际标准,也就是GPS坐标(Google Earth.或者GPS模块采集的都是这个类型). GCJ-02 ...

  3. ArcGIS中利用ArcMap将地理坐标系转换成投影坐标系(从WKID=4326到WKID=102100)

    原文:ArcGIS中利用ArcMap将地理坐标系转换成投影坐标系(从WKID=4326到WKID=102100) 对于非地理专业的开发人员,对与这些生涩的概念,我们不一定都要了解,但是我们要理解,凡是 ...

  4. 转:ArcGIS中利用ArcMap将地理坐标系转换成投影坐标系(从WKID=4326到WKID=102100)

    对于非地理专业的开发人员,对与这些生涩的概念,我们不一定都要了解,但是我们要理解,凡是以经纬度为单位的都是地理坐标系,因为它归根结底是一个椭球体,只不过各个国家为了反映该国家所在区域地球的真实形状,而 ...

  5. PaintCode 教程:矢量图轻松转换成CoreGraphics代码

    本文译自Ranwenderlich的这篇:http://www.raywenderlich.com/100281/paintcode-for-designers-getting-started Pai ...

  6. 爬虫:把廖雪峰的教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天就琢磨着写一个爬虫,将廖雪峰的 ...

  7. Python 爬虫:把廖雪峰教程转换成 PDF 电子书

    写爬虫似乎没有比用 Python 更合适了,Python 社区提供的爬虫工具多得让你眼花缭乱,各种拿来就可以直接用的 library 分分钟就可以写出一个爬虫出来,今天尝试写一个爬虫,将廖雪峰老师的 ...

  8. 微信原始坐标转换成百度坐标 lat lng

    如有帮到你记得结合我这篇博客里的方法.... http://www.cnblogs.com/zc290987034/p/8294988.html {:wx_jssdk_config("fal ...

  9. Java-Runoob-高级教程-实例-时间处理:04. Java 实例 - 时间戳转换成时间

    ylbtech-Java-Runoob-高级教程-实例-时间处理:04. Java 实例 - 时间戳转换成时间 1.返回顶部 1. Java 实例 - 时间戳转换成时间  Java 实例 以下实例演示 ...

随机推荐

  1. C 语言源代码说明

    void bdmain(void){/* 禁止 Cache 和 MMU */ cache_disable(); mmu_disable(); /* 端口初始化 */ port_init(); /* 中 ...

  2. Python学习笔记(二)——列表

    Python学习笔记(二)--列表 Python中的列表可以存放任何数据类型 >>> list1 = ['Hello','this','is','GUN',123,['I','Lov ...

  3. artTemplate(mark)

    一个渲染性能出众模板引擎,无论在 NodeJS 还是在浏览器中都可以运行. 特性 拥有接近 JavaScript 渲染极限的的性能 调试友好:语法.运行时错误日志精确到模板所在行:支持在模板文件上打断 ...

  4. HTML加载顺序

    一.js执行顺序 //1. 外部引入的js文件,会异步下载并且执行(<script>块中的语句),根据引入的位置会在不同时刻执行 //2.$().ready(function() {}) ...

  5. Nginx启动报错误unlink() “nginx.pid” failed (2: No such file or directory)

    在修改了配置文件之后,启动nginx的时候发现,进程已经存在了,但是端口没有监听到. 查看错误日志,有如下错误信息 2015/10/22 21:39:06 [alert] 26434#0: unlin ...

  6. Leetcode - K Sum

    List<List<Integer>> kSum_Trim(int[] a, int target, int k) { List<List<Integer>& ...

  7. Scala 方法与函数简单记录

    /** * Scala 方法与函数 * Scala 有方法与函数,二者在语义上的区别很小.Scala 方法是类的一部分,而函数是一个对象可以赋值给一个变量.换句话来说在类中定义的函数即是方法 */ o ...

  8. equal 与 hashCode

    equal Object: public static boolean equals(Object a, Object b) { return (a == b) || (a != null & ...

  9. SCRIPT7002: XMLHttpRequest: 网络错误 0x2ef3的解决方法

    最近在使用jquery easyui datagrid 对页面布局,发现有时在IE下会接收不到数据并报错: SCRIPT7002: XMLHttpRequest: 网络错误 0x2ef3, 由于出现错 ...

  10. VS2010-MFC(对话框:一般属性页对话框的创建及显示)

    转自:http://www.jizhuomi.com/software/169.html 属性页对话框包括向导对话框和一般属性页对话框两类,上一节演示了如何创建并显示向导对话框,本节将继续介绍一般属性 ...