2009-08-29 24 views
1

我已經安裝了谷歌地圖的Java ME 2應用在我的Nokia N73支持位置API(JSR 179),但沒有一個內置的GPS傳感器。 「我的位置」功能正常工作,並能夠查明我在城市中的位置。Google地圖移動版「我的位置」功能如何運作?

當我試圖訪問CellID, LAC和其他相關數據,我得到空。那麼地圖如何能夠計算我的位置?是否因爲他們的應用程序使用證書籤名? (我不是)

+3

我確實認爲Symbian手機沒有獲得J2ME版本的Google地圖。在我的索尼愛立信W960我得到了Symbian版本 – JaanusSiim 2009-08-29 15:36:07

+0

是,Symbian手機最有可能獲得了Symbian C++版本,因爲它沒有在我的N73,在那裏作爲我的老索尼愛立信W700i的Java版本被下載.. – 2009-10-17 04:48:59

回答

2

它的作用是測量的WiFi,3G和GSM基站/接入點在該地區的信號強度。由於所有WiFi接入點都具有唯一的MAC地址,並且3G和GSM基站也具有唯一的標識,因此現在可以根據實力瞭解您所接近的基站以及與您的距離。

現在有幾種方法可以找到距離。如果它知道接入點/基站在哪裏,那麼它可以根據信號強度對您的位置進行三角測量。爲了這個工作,它需要有至少3個AP/BS。使用GSM,它也可以使用定時器提前量,這是一個估計你離基站有多遠的距離,精度約爲1km。隨着3G,它會更好。

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

+1

的一切,你的描述可以在J2ME中無法完成,所以這應該證明我的觀點 - 所使用的Google地圖版本不是用J2ME編寫的 – JaanusSiim 2009-08-29 15:37:03

+0

是用C++編寫的Google Maps for Mobile,還是Symbian OS上的C++公開cellid,lac和其他信息應用程序。 – 2009-08-29 20:34:21

1

這是很容易使用JSR 179定義這些API在J2ME做。這裏有一個簡單的例子:JavaME Location API Example application with Source Code(在撰寫本文時,該頁面已被破壞;這是Google Cache version)。

該示例完美地在我的諾基亞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做到這一點。

注意,示例應用程序並不需要簽署合作 - 手機會彈出一個提示,詢問是否允許未簽名的應用程序訪問您的位置信息。

+0

你引用了「像你的N97」,但是我的手機是N73 ...我試過了N73上的示例程序,但它不起作用,我推斷沒有cellid和/或lac手機無法計算位置。我認爲Google的做法是,他們有一個Symbian C++應用程序,我可以從GUI中看到,然後Symbian可能能夠檢索到Java ME不能提供的值,否則Google可能會在操作員處爲其應用程序簽名級別和具體訪問這些值... – 2009-10-16 13:26:50

+1

對不起,我的意思是N73,它支持JSR 197 - 見http://www.forum.nokia.com/devices/N73至於示例不工作,在我的情況下,我已禁用「藍牙GPS」,並啓用「基於網絡「的設置/常規/定位,並且我在」定位服務器「下配置了接入點和服務器(supl.nokia.com)。 – RichieHindle 2009-10-16 13:38:56

+0

我想你的意思是「J2ME™的JSR 179位置API」。如果設備支持位置API,如果可能能夠使用a來計算您的位置。外部GPS(通過藍牙)b。內部gps c。 cell id ...現在,因爲N73沒有一個內部gps,所以剩下兩個選項。如果您考慮閱讀此鏈接,也可以使用Cell ID ... http://library.forum.nokia.com/index.jsp?topic =/Java_Developers_Library/GUID-1F6DF24F-40E4-4450-80F6-783C996A25D7.html .. 。 – 2009-10-16 20:54:12

相關問題