我在android应用程序中添加了地图,并希望通过地址在地图上添加标记。有可能的?
我已经尝试使用Geocoder
进行长时间的转换,但我收到错误Service not Available
。
我的代码:
Geocoder geocoder = new Geocoder(getBaseContext());
List<Address> addresses = null;
try {
addresses = geocoder.getFromLocationName(event.getPlace(), 20);
System.out.println(addresses);
// for (int i = 0; i < addresses.size(); i++) { // MULTIPLE MATCHES
//
// Address addr = addresses.get(i);
//
// double latitude = addr.getLatitude();
// double longitude = addr.getLongitude(); // DO SOMETHING WITH
// // VALUES
//
// System.out.println(latitude);
// System.out.println(longitude);
//
// }
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
答案 0 :(得分:12)
创建一个将地址转换为LatLng的方法:
public LatLng getLocationFromAddress(Context context, String strAddress)
{
Geocoder coder= new Geocoder(context);
List<Address> address;
LatLng p1 = null;
try
{
address = coder.getFromLocationName(strAddress, 5);
if(address==null)
{
return null;
}
Address location = address.get(0);
location.getLatitude();
location.getLongitude();
p1 = new LatLng(location.getLatitude(), location.getLongitude());
}
catch (Exception e)
{
e.printStackTrace();
}
return p1;
}
然后,
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
mapFragment.getMapAsync(this);
}
@Override
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
LatLng address = getLocationFromAddress(this, yourAddressString(eg. "Street Number, Street, Suburb, State, Postcode");
mMap.addMarker(new MarkerOptions().position(address).title("Marker in Sydney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(address));
}
答案 1 :(得分:2)
有可能。你的问题似乎是地理编码部分。
使用Geocoder的问题在于它需要一个未包含在核心android框架中的后端服务,如Android API for Geocoder中所述。您应该使用geocoder.isPresent()
来检查此功能是否可用。如果不是,则不能使用此方法。
地理编码也可以使用网址在Google地图中完成,如The Google Geocoding API中所述。例如(您需要API密钥):
提供可以解析的结果以检索标记的纬度和经度。
答案 2 :(得分:1)
Kotlin 版本:
import com.google.android.gms.maps.model.LatLng
fun getLocationByAddress(context: Context, strAddress: String?): LatLng? {
val coder = Geocoder(context)
try {
val address = coder.getFromLocationName(strAddress, 5) ?: return null
val location = address.first()
return LatLng(location.latitude, location.longitude)
} catch (e: Exception) {
Timber.e(e, "getLocationByAddress")
}
return null
}