2015-01-07 32 views
0

嗨,我創建了兩個應用程序,其中每個應用程序需要知道另一個應用程序的位置。我正在使用corelocation。不過,我不確定最佳/有效的方式獲取附近的設備。我可以創建一個數據庫,使用parsi api協調。不過,我認爲每隔幾分鐘計算一次最短距離將會有很多工作。有任何想法嗎?我有一個每個應用程序的地圖,我想顯示在地圖上的兩個用戶之間的最短距離。我使用谷歌地圖api的iosiOS NearBy devices

回答

0

如果他們足夠接近(約30米),你可以使用iBeacons 。

什麼工作最好取決於您的特定應用程序的需求。

編輯:既然你說你的距離太遠,iBeacons將無法正常工作。

這樣做的蠻力方法是運行所有連接的設備並計算(畢達哥拉斯)到每個設備的距離,並選擇距離閾值內的距離。然而這非常耗時。

相反,您可能希望讓每個設備在位置發生變化時報告每個位置的某種區域碼(州?縣?郵政編碼?)。您將使用地理編碼生成地區信息。您可以讓報告設備自己進行地理編碼,因此他們只負責更新單個設備的位置信息,並且不會停止進行地理編碼。當服務器發生變化時,您會向服務器報告緯度/長度和區域信息,「窒息」只報告重大更改的變化,或每分鐘一次,以較少頻率爲準。 (我記得在文檔中閱讀,你只應該提交少量的地理編碼呼叫,或者你被鎖定和/或你的應用被拒絕。)

你會收集中央服務器中的數據。

然後,您可以首先請求與您當前區域匹配的其他用戶(以及可能附近的區域),然後僅對匹配區域代碼的那部分數據進行距離計算。

+0

半徑將至少爲5英里。 ibeacons不會工作 –

+1

這不提供問題的答案。要批評或要求作者澄清,請在其帖子下方留言。 –

+0

@WayneEllery,iBeacons是一個可能的答案,取決於要求。根據反應,這是不可行的,但它是一種可能的解決方案。 –

0

計算距離的API非常輕量級。在內部,您使用Haversine formula來計算包括地球曲率在內的距離。從iOS的角度來看,儘管你只是這麼做:

CLLocation* previousPoint = [self.allLocations objectAtIndex:i-1]; 
    CLLocation* currentPoint = [self.allLocations objectAtIndex:i]; 
    CLLocationDistance distanceFromPrevPoint = [previousPoint distanceFromLocation:currentPoint]; 

您可以輕鬆地遍歷該區域中的其他設備。如果您想減少計算次數,則只能計算距同一基本緯度經度(忽略分鐘和秒)的設備的距離。

+0

我知道這不是問題。事情是我有多個設備,他們可以在美國的任何地方,所以我不想爲整個國家做這個計算。我想將其分解成可能的城市,但我不知道如何確定此設備是否在某個區域,而不經過整個數據庫。我需要每隔幾秒做一次,這樣做很多工作。硬編碼也不是一個好主意。 –

+0

Haversine對於幾公里的距離來說是過度殺傷力。爲此,您可以簡單地使用畢達哥拉斯距離(在計算當前緯度經度的距離之後)。當您測量地球曲率進場的距離(數百公里)時,您確實只需要Haversine。 –

相關問題