Для доступа к сервису вам необходимы соответствующие разрешения. # <uses-permission android: name = "android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android: name = "android.permission.INTERNET" />
Фло,
Какую версию api для Android вы создаете приложение, вам необходимо иметь доступный API Google. У меня есть сборка с помощью API Google. 8. Убедитесь, что в вашем проекте есть папка API Google. и в вашем файле манифеста add использует библиотеку com.google.android.maps
ud_an
1
Я уже дал это разрешение и включил библиотеку ... я могу получить представление карты ... он выдает
исключение
6
Посмотрите ответ @NayAneshGupte ниже, я не думаю, что GeoPointв новых библиотеках есть класс. Вместо этого используйте LatLng. stackoverflow.com/a/27834110/2968401
user2968401
81
Решение Ud_an с обновленным API
Примечание . Класс LatLng является частью сервисов Google Play.
Спасибо, у меня это сработало, вышеуказанное решение не работало.
Ризван Сохаиб
1
При создании экземпляра геокодера вы должны передать context Geocoder coder = new Geocoder (this); или новый геокодер (getApplicationContext), а не getActivity (), как указано в ответе.
The_Martian,
1
Код @Quantumdroid выше написан фрагментом. В остальном вы абсолютно правы. Это контекст.
Nayanesh Gupte
2
Красивое и чистое решение. Ни в одном из ответов не упоминается, что Geocoder использует синхронный доступ, поэтому настоятельно рекомендуется поместить его в фоновую службу, чтобы избежать блокировки пользовательского интерфейса.
The_Martian
1
Отличное решение. IOException будет вызываться при вводе неверного адреса / почтового индекса. Вы можете избежать этой ошибки с помощью простого if(address.size() <1){//show a Toast}else{//put rest of code here}
grantespo
51
Если вы хотите разместить свой адрес на карте Google, тогда простой способ использовать следующие
К сожалению, это решение не работает с мобильной связью некоторых операторов мобильной связи: запрос всегда возвращает OVER_QUERY_LIMIT . Эти операторы мобильной связи используют перегрузку NAT, назначая один и тот же IP-адрес многим устройствам ...
Умберто
@UmbySlipKnot Не могли бы вы подробнее рассказать о OVER_QUERY_LIMIT? Что это такое? Спасибо.
FariborZ
7
Следующий код будет работать для google apiv2:
publicvoid convertAddress(){if(address !=null&&!address.isEmpty()){try{List<Address> addressList = geoCoder.getFromLocationName(address,1);if(addressList !=null&& addressList.size()>0){double lat = addressList.get(0).getLatitude();double lng = addressList.get(0).getLongitude();}}catch(Exception e){
e.printStackTrace();}// end catch}// end if}// end convertAddress
Где адрес - это строка (zip-код города на улице 123 Testing Rd), которую вы хотите преобразовать в LatLng.
Вот как вы можете найти широту и долготу того места, где мы щелкнули по карте.
publicboolean onTouchEvent(MotionEventevent,MapView mapView){//---when user lifts his finger---if(event.getAction()==1){GeoPoint p = mapView.getProjection().fromPixels((int)event.getX(),(int)event.getY());Toast.makeText(getBaseContext(),
p.getLatitudeE6()/1E6+","+
p.getLongitudeE6()/1E6,Toast.LENGTH_SHORT).show();}returnfalse;}
это работает хорошо.
Чтобы получить адрес местоположения, мы можем использовать класс геокодера.
Он выбрасывает "java.io.IOException service not available", я уже дал это разрешение и включаю библиотеку ... я могу получить представление карты ... он выбрасывает это IOException в геокодер ...
Я просто добавил ловушку IOException после попытки, и она решила проблему
publicvoid goToLocationFromAddress(String strAddress){//Create coder with Activity context - thisGeocoder coder =newGeocoder(this);List<Address> address;try{//Get latLng from String
address = coder.getFromLocationName(strAddress,5);//check for nullif(address !=null){//Lets take first possibility from the all possibilities.try{Address location = address.get(0);LatLng latLng =newLatLng(location.getLatitude(), location.getLongitude());//Animate and Zoon on that map location
mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
mMap.animateCamera(CameraUpdateFactory.zoomTo(15));}catch(IndexOutOfBoundsException er){Toast.makeText(this,"Location isn't available",Toast.LENGTH_SHORT).show();}}}catch(IOException e){
e.printStackTrace();}}
Ответы:
strAddress
это строка, содержащая адрес.address
Переменная содержит преобразованные адреса.источник
GeoPoint
в новых библиотеках есть класс. Вместо этого используйтеLatLng
. stackoverflow.com/a/27834110/2968401Решение Ud_an с обновленным API
Примечание . Класс LatLng является частью сервисов Google Play.
Обязательно :
Обновление: если у вас есть целевой SDK 23 и выше, убедитесь, что вы позаботились о разрешении времени выполнения для определения местоположения.
источник
if(address.size() <1){//show a Toast}else{//put rest of code here}
Если вы хотите разместить свой адрес на карте Google, тогда простой способ использовать следующие
ИЛИ
если вам нужно получить долгую широту с вашего адреса, используйте Google Place Api, следуя
создать метод, который возвращает JSONObject с ответом HTTP-вызова, как показано ниже
теперь передайте этот JSONObject методу getLatLong (), как показано ниже
Я надеюсь, что это поможет вам и другим .. !! Спасибо..!!
источник
Следующий код будет работать для google apiv2:
Где адрес - это строка (zip-код города на улице 123 Testing Rd), которую вы хотите преобразовать в LatLng.
источник
Вот как вы можете найти широту и долготу того места, где мы щелкнули по карте.
это работает хорошо.
Чтобы получить адрес местоположения, мы можем использовать класс геокодера.
источник
Ответ на проблему Канды выше:
Я просто добавил ловушку IOException после попытки, и она решила проблему
источник
источник
источник