您現在的位置是:首頁 > 棋牌

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

  • 由 程式設計派 發表于 棋牌
  • 2021-12-26
簡介com經緯度計算得到距離約為78米後續可根據需求,透過測距來得到相應距離 從而計算得到水平與豎直移動速度可以得出結論:在該高校相對從北到南 經度減少,緯度增加在該高校相對從東到西 經度減小,緯度減小在符合跑步打卡APP步道樂跑的配速要求

算路程用什麼軟體

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

文 | Joeric@cnblog

編輯 | EarlGrey

推薦 | 程式設計派

公眾號

ID:

codingpy)

前言

在某些

app

中,需要根據使用者的實時位置來完成某些事件

例如跑步打卡軟體(步道樂跑)、考勤打卡軟體(釘釘)、某些基於實時位置的遊戲(Pokemon Go、一起來捉妖)

一般解決辦法是透過使用安卓模擬器,透過改變模擬器的位置屬性來實現模擬位置

但是某些軟體會透過比對常用裝置的uuid,裝置序列號等

一旦出現不匹配或者無法識別就可能會被列為懷疑物件,且安卓模擬器較難實現連續的擬人化的路徑

因此,為了減少被判定作弊的可能,只能透過在常用裝置上連續的改變實時位置來模擬跑步行為

硬體環境:

MacBook Pro (15-inch, 2017)

iPhone 8 Plus

軟體環境:

macOS Mojave 10。14。5

iOS 12。4

Xcode 10。2。1

Python 3。7。0

sublime text 3。1。1

具體步驟

1。使用Xcode建立一個IOS專案

開啟Xcode -> Preferences 新增Apple ID

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

在Xcode上建立新專案,開啟Xcode -> create a new Xcode project

選擇ios選單 -> Single View

App

,填寫專案名 推薦非中文,在事先準備好的資料夾記憶體放 資料夾推薦非中文

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

此時將iPhone連線mac 左上角顯示連線裝置

出現如下結果即為成功:

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

2。使用Xcode建立一個含有gpx的檔案

GPX(GPS eXchange Format,GPS交換格式)是一個XML格式,為應用軟體設計的通用GPS資料格式,專門用來儲存地理資訊

一個GPX檔案內包含一些經緯度點組成的軌跡,包含了時間、名字等資訊

回到Xcode 開啟Xcode -> File -> New -> File。。。

在IOS選單下選擇GPX File

選擇一個位置並命名GPX檔案 例:fake_loc。gpx

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

自動生成如下gpx檔案即為成功

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

分析該gpx檔案,格式類似標籤語言風格

第一段註釋內容大意為:

“提供一個或多個包含緯度/經度對的點_

如果提供一個點,Xcode將模擬那個特定的點_

如果提供多個點,Xcode將依次模擬每一個點”_

第二段註釋內容大意為:

“可以選擇為每一個座標點新增一個時間標籤_可,Xcode可以根據時間標籤的順序依次移動到每一個座標點,並根據時間點來插入速度X

如果不提供一個時間標籤,那麼Xcode將使用一個固定的速度_

航路點必須按時間升序排序_”

因此,可以透過輸入一系列點來模擬位置,讓Xcode來依次定為每一個點來模擬人的跑動行為

3。使用Python來自動生成一系列軌跡點

mac下python與sublime text3的環境配置在第一篇隨筆中有記錄

分析gpx檔案結構可以得到目標gpx檔案結構應該為:

<?xml version=“1。0”?>

#……

#以此類推

在地圖經緯度查詢網站可以得到指定地點的經緯度資訊:

http

://

www。

gpsspg

。com

/maps。htm

我們選擇西安市某211高校作為實驗地點:

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

該網站提供多個公司的定位標準下的經緯度資訊

由於每一家公司的定位標準不同,經緯度就會存在偏差,這時候就要看用來模擬的

APP

使用哪家的地圖了

我們以某跑步打卡

APP

步道樂跑 作為實驗物件,在該高校實現水平移動與豎直移動

經過驗證該

APP

使用的是 谷歌地球標準,透過該網站首先得到一段直線的首尾經緯度點:

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

開始點:

lat:34。3752989239 lon:108。9080291565

中間點:

lat:34。3740193255 lon:108。9085977848

結束點:

lat:34。3733728774 lon:108。9064091023

在該網站可以透過經緯度獲得距離資訊:

http

://

www。

hhlink

。com

/經緯度/

計算得到距離約為78米

後續可根據需求,透過測距來得到相應距離 從而計算得到水平與豎直移動速度

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

可以得出結論:

在該高校相對從北到南 經度減少,緯度增加

在該高校相對從東到西 經度減小,緯度減小

在符合跑步打卡

APP

步道樂跑的配速要求:3~9 min/km,例如從北到南生成100個點

經度依次減少 緯度依次增加,並使得這100個點散佈在路徑上

每個點之間減少或者增加的距離可以透過乘以指定範圍內的隨機數,使得點之間呈現左右略為搖擺的路徑

在點數量較多的情況下近似為人的跑動軌跡

根據該高校的位置情況編寫相應的python程式:

import random #初始點資訊

a1 = 34。3752989239;

b1 = 108。9080291565; #中間點資訊

a2 = 34。3740193255;

b2 = 108。9085977848; for i in range( 1,1000 ): while( a1 >= a2 ): # 迴圈條件 經度未到達中間點時執行

xa = round( random。uniform(0。2, 7) ) # 隨機數,用於模擬人跑動

xb = round( random。uniform(12, 15) ) # 豎直移動

a1 = round( a1 - 0。0000072 * xa , 10 )

b1 = round( b1 + 0。0000008 * xb , 10 ) # 輸出資訊

print( ‘’ ) print( ‘’ ) for i in range( 1,1000 ):

xa = round( random。uniform(2, 8) )

xb = round( random。uniform(1, 3) ) # 水平移動

a2 = round( a2 - 0。000003 * xa, 10 )

b2 = round( b2 - 0。000025 * xb, 10 ) print( ‘’ ) print( ‘’ )

得到輸出(節選):

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

將該輸出複製並貼上在gpx檔案裡

並 command + s 儲存

可以在xcode專案目錄內找到並開啟該檔案:

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

4。開始位置模擬

確保手機連線上電腦,並解鎖保持螢幕常亮

點選Xcode右上角開始圖示:

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

第一次會提示iPhone未信任開發者

在設定 -> 通用 -> 裝置管理 點選該開發者並選擇信任

再次在Xcode上點選右上角圖示

一分鐘左右手機上會多出一個灰色的

app

圖示

點選後按home鍵退出,進入步道樂跑

在Xcode下方多出一欄功能,點選位置圖示並選擇你的fake_loc

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

此時

APP

就已經按照gpx檔案內的路徑開始移動了

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

總結

在模擬時沒有考慮速度的因素,按照預設的Xcode對gpx的點的更新速度來實現的

在控制整體的移動速度時完全是按照點的密集程度,即點的位置變化程度來實現的

後期可以根據時間標籤

根據步道樂跑後臺資料,檢測作弊主要依靠平均配速、每公里的步數、裝置uuid、裝置序列號來檢測的

文章的方法可以解決平均配速、uudi、序列號等問題(因為就是使用真機來實現的)

但是對於步數只能依靠在模擬時透過搖晃手機來實現

原文:https://www

。cn

blogs

。com

/Joeric07/p/11173651。html

Python 模擬真實運動軌跡,輕鬆完成長跑和打卡

題圖:pexels,CC0 授權。

Top