2009-08-29 26 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

相关问题