簡體   English   中英

Google Maps for Mobile“我的位置”功能如何工作?

[英]How does the Google Maps for Mobile “My Location” feature work?

我已經在支持位置API(JSR 179)的諾基亞N73上安裝了Google Maps Java 2 ME應用程序,但沒有內置GPS傳感器。 “我的位置”功能可以正常運行,並且可以查明我在城市中的位置。

當我嘗試訪問CellID,LAC和其他相關數據時,我得到了空值。 那么,地圖如何計算我的位置? 是因為他們的應用程序已使用證書簽名嗎? (不是)

它的作用是測量該區域內WiFi,3G和GSM基站/接入點的信號強度。 由於所有WiFi接入點都具有唯一的MAC地址,並且3G和GSM基站也具有唯一的標識,因此它現在可以根據強度知道您靠近哪個基站以及與它們之間的接近程度。

現在有幾種找到距離的方法。 如果知道接入點/基站的位置,則可以根據信號強度對您的位置進行三角測量。 為此,它至少需要訪問3個AP / BS。 使用GSM,它還可以使用Timer Advance,它可以估算出您距基站有多遠,准確度約為1公里。 有了3G,情況會更好。

另一種方法(由Google和其他公司使用)是將所有信號強度數據發送到服務器。 如果您有GPS,則還會發送GPS信息。 然后,服務器可以在不同坐標處建立到不同AP / BS的信號強度圖。 由於您沒有GPS,因此現在它會比較您傳遞的信號強度,並嘗試在其數據庫中找到最接近的匹配項,然后找到該最接近點的位置。

使用JSR 179定義的API在J2ME中很容易做到這一點。 這里有一個簡單的示例: JavaME Location API帶有源代碼的示例應用程序 (在編寫本文時該頁面已損壞;這是Google Cache版本 )。

該示例可在我的諾基亞E63上完美運行,就像您的 N97 N73沒有GPS,但它支持基於單元的定位。 這是它的核心:

public void checkLocation() throws Exception
{
    String string;
    Location l;
    LocationProvider lp;
    Coordinates c;

    // Set criteria for selecting a location provider:
    // accurate to 500 meters horizontally
    Criteria cr = new Criteria();
    cr.setHorizontalAccuracy(500);

    // Get an instance of the provider
    lp = LocationProvider.getInstance(cr);

    // Request the location, setting a one-minute timeout
    l = lp.getLocation(60);
    c = l.getQualifiedCoordinates();

    if(c != null ) {
      // Use coordinate information
      double lat = c.getLatitude();
      double lon = c.getLongitude();
      string = "\nLatitude : " + lat + "\nLongitude : " + lon;

    } else {
        string ="Location API failed";
    }
    midlet.displayString(string);
}

@Marius對該技術的工作原理是正確的,但是JSR 179 API對您隱藏了所有這些細節。 @JaanusSiim是錯誤的,因為您無法從J2ME執行此操作。

請注意,示例應用程序不需要簽名即可工作-手機將彈出提示,詢問是否允許未簽名的應用程序訪問您的位置信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM