iOS端實現釘釘及其他LBS應用遠程打卡

起因

月底接到通知,晚餐補助由簽到改成釘釘打卡。

作爲一名技術人員,不甘於寂寞的研究了一發釘釘遠程打卡..

源於我的正(dan)直(xiao),我並未在實際工作中使用,僅作爲研究實現了一發

工具

  • 一臺mac (虛擬器)
  • Xcode
  • 一臺iPhone

關於座標

這裏普及一下座標系統: 目前我們經常接觸的無非就是原始座標火星座標二次加密座標

  • 原始座標:手機上獲取到的是原始的GPS座標 —— WGS-84
  • 火星座標:我大天朝自己加了飄逸搞的一套加密座標,中國國測局(和GFW一樣的傻屌組織)—— GCJ-02谷歌高德
  • 百度加密座標:在火星座標的基礎上再次飄逸後的加密座標 —— BD-09百度

在遙遠的東方,有一個天朝。 天朝有一個測繪局,發明了一種把美國衛星的GPS的地球座標,進行偏移的算法,計算後,得出了一個火星座標。 爲了讓火星座標能正確的顯示,又給每部導航軟件加入了這個算法,可以在大家的地圖上還原位置。並且給每部導航收費。美其名國家安全。而且這個算法看上去很牛B的樣子,還不可逆。 所以,只有這個國家的人都在用錯誤的座標。正宗的掩耳盜鈴。 民用衛星精度都已經讓你出身冷汗了,何況軍用衛星。打仗估值也不會用中國的電子地圖吧。 只可惜各種LBS應用,都是個麻煩事哦。

還好黃天不負有心人,終於經過大家的模擬,計算,基本還原了飄逸算法

原理

做過地圖定位相關App的童鞋都應該瞭解Xcode - 工具欄 - Debug - Simulate Location

它的作用是用於虛擬定位,以便於不用親臨其地模擬到達某個座標。

同時釘釘打卡定位打卡的原理,是基於你是否到達了以公司地理座標爲圓心的某個圓。在此範圍內,員工可進行打卡。

我們需要做的是使用百度、高德或者谷歌地圖獲取到打卡位置的GPS座標,然後使用算法轉換成iPhone所需要的座標WGS-84。

然後在Simulate Location使用這個打卡座標模擬打卡。

實現步驟 (使用高德定位爲例)

  1. 使用高德獲取公司(以天安門所在點爲例)所在點的地理座標
  1. 116.397477,39.908692爲高德獲取到天安門的座標,使用飄逸算法進行座標轉換
  2. 步驟2中的飄逸算法,在我給出的demo中已給出iOS版本的轉換方式
    如下圖所示
  1. 修改start.gpx中的對應經緯度
    <wpt lat="39.908692" lon="116.397477">
  1. 連接真機,運行項目,Xcode - 工具欄 - Debug - Simulate Location,點擊start,如下圖所示

  2. 打開釘釘,遠程打卡you get ~



整個遠程打卡的流程到此就結束了,當開啓模擬定位之後,你會發現所有APP的定位均換成了這個定位,不用擔心,當結束項目之後稍等一下就會回到準確的定位。

補充說明以下幾點
1.如果沒有結束工程就拔掉數據線,定位會一直是模擬定位,可能需要重啓手機恢復一下
2.WiFi打卡需要修改一下所用WiFi的WiFi名和公司WiFi名一致
3.關於座標段落的文獻引用於其他作者

demo地址

有不明白的在評論中回覆即可,對你有幫助的話麻煩star一下哦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章