2013-04-28 61 views
2

我试图用onMapLongClickListener(LatLng点)获取点击地址,使用lat和点的lng,并使用Geocoder转换它们的地址。如果我连接到互联网,但如果我不是应用程序崩溃,因为getFromLocation方法给出一个空结果。 所以我想Geocoder类只适用于连接启用。是这样吗?有没有办法让地址保持离线?Android地理编码器只能与互联网连接吗?

这就是方法的代码:

public void onMapLongClick(LatLng point) { 
      List<Address> addresses = null; 
      try { 
       addresses = geocoder.getFromLocation(point.latitude, point.longitude, 1); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      String address = addresses.get(0).getAddressLine(0); 
      String city = addresses.get(0).getAddressLine(1); 
      String country = addresses.get(0).getAddressLine(2); 
      String str = address + ", " + city + ", " + country; 
      gMap.addMarker(new MarkerOptions() 
      .position(point) 
      .title("Clicked Point") 
      .draggable(false) 
      .snippet(address + ", " + city + ", " + country)); 
      Vibrator v = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE); 
      v.vibrate(50); 
     }  

而这些权限:

<uses-permission android:name="com.example.mappine.permission.MAPS_RECEIVE" /> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" /> 
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.VIBRATE" /> 
+0

我确定有人在某个地方提供离线地理编码数据库,但某人不是Google,他们的产品可能不是免费的。 – 2013-04-28 02:32:52

+0

Google的地理编码API免费且具有条件(请参阅[这里](https://developers.google.com/maps/documentation/geocoding/))。 – 2015-06-11 09:19:40

回答

10

是。你知道完整的地理编码器需要多少数据吗?你没有将它存储在手机上。

+0

地理编码器需要将世界上的所有地址(或至少应用程序正在使用的区域)映射到经度 - 纬度坐标。这是很多数据。 – Kevin 2013-04-28 05:48:00

+0

然而,TomTom,Navigon等地理编码提供商通过将离线地理编码数据与其Android应用捆绑在一起,并将其安装在Android设备上完成了这一工作。我没有看到离线地理编码数据有什么大惊小怪。通过互联网连接使用反向地理编码仅适用于那些使用大数据计划的人。那些使用有限数据计划的人通过离线数据选项会更好。 – 2015-06-11 09:14:18

+0

这笔交易有三件事。首先,它需要很大的空间才能达到真正的准确程度 - 我们正在谈论演出。你在这些应用程序中有一个有限的子集。其次,准确性下载版本不是最新的。第三,他问了一个特定的地理编码器。那个没有离线模式。如果你想提供一个,你必须使用其他服务,而不是Google的。 – 2015-06-11 15:36:42