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

推荐订阅源

WordPress大学
WordPress大学
A
About on SuperTechFans
小众软件
小众软件
Hugging Face - Blog
Hugging Face - Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 叶小钗
博客园 - 聂微东
博客园 - Franky
Apple Machine Learning Research
Apple Machine Learning Research
罗磊的独立博客
量子位
博客园 - 三生石上(FineUI控件)
Recent Announcements
Recent Announcements
The GitHub Blog
The GitHub Blog
B
Blog RSS Feed
T
The Blog of Author Tim Ferriss
GbyAI
GbyAI
云风的 BLOG
云风的 BLOG
Last Week in AI
Last Week in AI
宝玉的分享
宝玉的分享
B
Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Stack Overflow Blog
Stack Overflow Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC

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 日 完成初稿

最近更新

猜你喜欢