坐标转换,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 实例 以下实例演示 ...
随机推荐
- 2019-8-31-dotnet-非泛型-类型-System.Collections.IEnumerable-不能与类型实参一起使用
title author date CreateTime categories dotnet 非泛型 类型 System.Collections.IEnumerable 不能与类型实参一起使用 lin ...
- 数据库MySQL--基础查询
1.查询字段 查询表某字段:select 字段名 from 表名: 查询表内所有字段:select * from 表名: (当字段和关键字重名是用( ` )着重号区分 ) 2.查询常量值 select ...
- BCZM : 1.5
https://blog.csdn.net/zs634134578/article/details/18046317 有很多服务器存储数据,假设一个机器仅存储一个标号为ID的记录,假设机器总量在10亿 ...
- 计算几何——直线交点poj1269
求直线交点还是要推一个公式的.. 见博客https://blog.csdn.net/u013050857/article/details/40923789 还要学一下向量的定点比分法 另外poj精度好 ...
- 图片压缩(js压缩,底部有vue压缩图片依赖使用的教程链接)
directTurnIntoBase64(fileObj, callback) { var r = new FileReader(); // 转成base64 r.onload = function( ...
- 存储过程被程序和第三方客户端执行很慢,而sql server management studio执行速度正常
来自:http://blog.csdn.net/pgbiao/article/details/22388945 原因分析:由于存储过程是预编译的, 在第一次执行的时候, 会生成执行计划, 以后执行的时 ...
- System.Web.Mvc.RoutePrefixAttribute.cs
ylbtech-System.Web.Mvc.RoutePrefixAttribute.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutra ...
- org.apache.ibatis.binding.BindingException: Parameter 'xxx' not found. Available parameters are [arg1, arg0, param1, param2]
这个异常说明参数没有加上@Param注解,加上这个注解就行了. 默认情况下mybatis把参数按顺序转化为[0, 1, param1, param2],也就是说#{0} 和 #{param1} 是一样 ...
- day 61 Django基础之django分页
Django基础之django分页 一.Django的内置分页器(paginator) view from django.shortcuts import render,HttpRespons ...
- “瑞士军刀”Netcat使用方法总结
前言 最近在做渗透测试的时候遇到了端口监听和shell的反弹问题,在这个过程中自己对Netcat这一款神器有了新的认识,现将一些Netcat的用法做一个小总结,希望对各位有帮助! Netcat简介 N ...