惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

爱范儿
爱范儿
WordPress大学
WordPress大学
C
Check Point Blog
GbyAI
GbyAI
U
Unit 42
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
Blog — PlanetScale
Blog — PlanetScale
J
Java Code Geeks
I
InfoQ
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Hugging Face - Blog
Hugging Face - Blog
Vercel News
Vercel News
博客园 - 【当耐特】
美团技术团队
小众软件
小众软件
S
SegmentFault 最新的问题
Jina AI
Jina AI
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Cloudflare Blog
Last Week in AI
Last Week in AI
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
V
Visual Studio Blog

Fooleap's Blog

渴望理想 | Fooleap's Blog 19 年底一些事 | Fooleap's Blog 藉秋风,跑起来 | Fooleap's Blog 一个人去跑步 | Fooleap's Blog 8 月的跑量仿佛是那暑假的作业 | Fooleap's Blog 三伏天跑步那么难受,为何还要跑? | Fooleap's Blog 解决小程序开发“当前系统代理不是安全代理” | Fooleap's Blog 忘却配速的夏日跑步 | Fooleap's Blog 六月天时“带水”跑步更爽 | Fooleap's Blog 出来混迟早要还的 | Fooleap's Blog 跑步不能当饭吃 | Fooleap's Blog 将京东移动端详情页链接转为 PC 端 | Fooleap's Blog 不是热就是雨 | Fooleap's Blog 这半月,我跑了 11 个 520 | Fooleap's Blog 跑完流汗一时爽,一直流汗一直爽 | Fooleap's Blog 初夏夜跑 | Fooleap's Blog Electron 中打开 QQ 临时会话 | Fooleap's Blog 春节期间的培隆角 | Fooleap's Blog 从春天跑到夏天 | Fooleap's Blog 晨雾中奔跑 | Fooleap's Blog 漫步春雨中 | Fooleap's Blog 跑在木棉花下 | Fooleap's Blog 我在春节依然坚持跑步 | Fooleap's Blog 伴随着日出跑步 | Fooleap's Blog 没有最好,只有更好 | Fooleap's Blog 电子气温计 | Fooleap's Blog 渡亭小学的金凤花 | Fooleap's Blog 随心而跑 | Fooleap's Blog 2018 跑步小结 | Fooleap's Blog 在 gVim 中使用“非等宽字体” | Fooleap's Blog
转换 Nike+ 的坐标数据 | Fooleap's Blog
fooleap · 2017-04-27 · via Fooleap's Blog

前文已经提到,在取得 Nike+ API 提供的坐标数据之后,需要将坐标数据进行转换。Nike+ 数据采用的是 WGS84 坐标系统,若想用高德地图 API 来做显示,那么便需要将坐标转为 GCJ02 坐标系统对应的。

坐标系统

目前,互联网三大坐标系统及各大互联网地图使用情况。

坐标系统 使用
地球坐标 (WGS84) Google Earth、Google Maps 国外、其他国外地图等
火星坐标 (GCJ02) Google Maps 国内、高德地图、腾讯地图等
百度坐标 (BD09) 百度地图

坐标转换

毕竟需要处理大量的点,使用地图相关的 API 转换效率明显不如直接操算法。我转换时尝试了网上流传的算法,用起来还蛮准确的。

经搜索,发现 WGS84 转 GCJ02 算法似乎源自于 EvilTransform.cs[1]。我原来使用的是 wandergis 的 coordtransform[2],用起来挺顺手的。后来亦发现 googollee 做了更多语言版本的库[3]

实例应用

反正只需一次转换,干脆把转换这个过程留在后端。为此,我将 coordtransform 写成 PHP 版[4]

话不多说,下面的实例是利用 Nike+ API 获取的跑步路线数据直接转换为高德地图 API 显示跑步路线可用的坐标数组。

<?php
require_once('coordtransform.php');

$options = array(
    CURLOPT_URL => 'https://api.nike.com/sport/v3/me/activity/e39a37be-d4e8-4ef7-82cc-0b255c0f2834?metrics=longitude,latitude',
    CURLOPT_HEADER => false,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => array('Authorization: Bearer ******')
);
$curl = curl_init(); 
curl_setopt_array($curl, $options);
$data = json_decode(curl_exec($curl)); // Nike API 返回 JSON 格式
curl_close($curl); 

$lng = array_search('longitude', array_column($data -> metrics, 'type'));
$lat = array_search('latitude', array_column($data -> metrics, 'type'));

$coordtransform = new CoordTransform();
foreach( $data -> metrics[$lng] -> values as $key => $item){
    $coord[$key] = $coordtransform->wgs84togcj02( $item -> value, $data -> metrics[$lat] -> values[$key] -> value );
};
$coord = json_encode($coord);

参考资料

本文历史

  • 2017 年 04 月 27 日 完成初稿

最近更新

猜你喜欢