Je souhaite afficher l'emplacement d'une adresse dans Google Maps.
Comment obtenir la latitude et la longitude d'une adresse à l'aide de l'API Google Maps ?
Je souhaite afficher l'emplacement d'une adresse dans Google Maps.
Comment obtenir la latitude et la longitude d'une adresse à l'aide de l'API Google Maps ?
public GeoPoint getLocationFromAddress(String strAddress){
Geocoder coder = new Geocoder(this);
List<Address> address;
GeoPoint p1 = null;
try {
address = coder.getFromLocationName(strAddress,5);
if (address==null) {
return null;
}
Address location=address.get(0);
location.getLatitude();
location.getLongitude();
p1 = new GeoPoint((double) (location.getLatitude() * 1E6),
(double) (location.getLongitude() * 1E6));
return p1;
}
}
strAddress
est une chaîne de caractères contenant l'adresse. Le site address
contient les adresses converties.
Vous devez avoir les bonnes permissions pour pouvoir accéder au service. <uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission Android:name="Android.permission.INTERNET" />
Quelle version d'Android api vous construisez l'application vous devez avoir google api disponible j'ai construit avec google api 8. vérifiez que le dossier google api est là dans votre projet. et dans votre fichier manifest ajouter utilise la bibliothèque com.google.Android.maps
La solution d'Ud_an avec les API mises à jour
Note : LatLng fait partie des services Google Play.
Obligatoire :
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET"/>
Mise à jour : Si vous avez le SDK 23 et plus, assurez-vous de prendre soin de la permission d'exécution pour l'emplacement.
public LatLng getLocationFromAddress(Context context,String strAddress) {
Geocoder coder = new Geocoder(context);
List<Address> address;
LatLng p1 = null;
try {
// May throw an IOException
address = coder.getFromLocationName(strAddress, 5);
if (address == null) {
return null;
}
Address location = address.get(0);
p1 = new LatLng(location.getLatitude(), location.getLongitude() );
} catch (IOException ex) {
ex.printStackTrace();
}
return p1;
}
Lorsque vous instanciez le Geocoder, vous devez passer le contexte Geocoder coder = new Geocoder(this) ; ou new Geocoder(getApplicationContext) not getActivity() comme indiqué dans la réponse.
@Quantumdroid le code ci-dessus est écrit en fragment. Sinon, vous avez tout à fait raison. C'est le contexte.
Si vous voulez placer votre adresse sur la carte de Google, vous pouvez utiliser les moyens suivants
Intent searchAddress = new Intent(Intent.ACTION_VIEW,Uri.parse("geo:0,0?q="+address));
startActivity(searchAddress);
OU
si vous avez besoin de connaître la longueur de votre adresse, utilisez alors Api Google Place suivant
créer une méthode qui renvoie un JSONObject avec la réponse de la Appel HTTP comme les suivants
public static JSONObject getLocationInfo(String address) {
StringBuilder stringBuilder = new StringBuilder();
try {
address = address.replaceAll(" ","%20");
HttpPost httppost = new HttpPost("http://maps.google.com/maps/api/geocode/json?address=" + address + "&sensor=false");
HttpClient client = new DefaultHttpClient();
HttpResponse response;
stringBuilder = new StringBuilder();
response = client.execute(httppost);
HttpEntity entity = response.getEntity();
InputStream stream = entity.getContent();
int b;
while ((b = stream.read()) != -1) {
stringBuilder.append((char) b);
}
} catch (ClientProtocolException e) {
} catch (IOException e) {
}
JSONObject jsonObject = new JSONObject();
try {
jsonObject = new JSONObject(stringBuilder.toString());
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return jsonObject;
}
passe maintenant que JSONObject à la méthode getLatLong() comme suit
public static boolean getLatLong(JSONObject jsonObject) {
try {
longitute = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
.getJSONObject("geometry").getJSONObject("location")
.getDouble("lng");
latitude = ((JSONArray)jsonObject.get("results")).getJSONObject(0)
.getJSONObject("geometry").getJSONObject("location")
.getDouble("lat");
} catch (JSONException e) {
return false;
}
return true;
}
J'espère que cela vous aidera, ainsi que d'autres personnes ! Merci !
Malheureusement, cette solution ne fonctionne pas avec la connexion mobile de certains opérateurs de téléphonie mobile : la demande renvoie toujours les informations suivantes SUR_LIMITE_DE_RECHERCHE . Ces opérateurs mobiles utilisent la surcharge NAT, en attribuant la même IP à de nombreux appareils...
Le code suivant fonctionnera pour google apiv2 :
public void 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
Où l'adresse est la chaîne (123 Testing Rd City State zip) que vous voulez convertir en LatLng.
C'est ainsi que vous pouvez trouver la latitude et la longitude de l'endroit où nous avons cliqué sur la carte.
public boolean onTouchEvent(MotionEvent event, 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();
}
return false;
}
cela fonctionne bien.
Pour obtenir l'adresse de l'emplacement, nous pouvons utiliser la classe geocoder.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
J'ai eu le même problème. Regardez ma solution ici. stackoverflow.com/a/19170557/2621050