OpenStreetMap modification du code pour concevoir un trajet
BunoCS Messages postés 15495 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 23 octobre 2024 - 3 mai 2024 à 09:49
- OpenStreetMap modification du code pour concevoir un trajet
- Voici du code ascii : - Guide
- Suivi de modification word - Guide
- Logiciel modification pdf gratuit - Guide
- Code puk bloqué - Guide
- Trajet google - Guide
7 réponses
22 avril 2024 à 09:30
Hello,
Plutôt que de stocker les coordonnés de toutes les communes (de France ? International ?), je te conseille d'utiliser un webservice qui te fourni déjà ce type d'information. Celle-ci, par exemple, peut peut-être répondre à ton besoin:
https://adresse.data.gouv.fr/api-doc/adresse
22 avril 2024 à 19:40
Bonjour Bruno,
Effectivement ça pourrait être plus simple.
Pour schématiser, j'ai une mapView et le nom d'une ville que je stock dans une Constants. La ville est modifiable par l'utilisateur à son bon vouloir via une activity prévue à cet effet.
Le but de mon appli est que lorsque l'utilisateur ouvre la carte, la vue ce centre automatiquement sur la ville stockée donc si je comprend bien il faudrait envoyer une requete vers le site https://adresse.data.gouv.fr/api-doc/adresse pour obtenir ce GeoJson:
{
"type":"FeatureCollection",
"version":"draft",
"features":[
{
"type":"Feature",
"geometry":{
"type":"Point",
"coordinates":[
2.290084,
49.897443
]
},
"properties":{
"label":"8 Boulevard du Port 80000 Amiens",
"score":0.49159121588068583,
"housenumber":"8",
"id":"80021_6590_00008",
"type":"housenumber",
"name":"8 Boulevard du Port",
"postcode":"80000",
"citycode":"80021",
"x":648952.58,
"y":6977867.25,
"city":"Amiens",
"context":"80, Somme, Hauts-de-France",
"importance":0.6706612694243868,
"street":"Boulevard du Port"
}
}
],
"attribution":"BAN",
"licence":"ODbL 1.0",
"query":"8 bd du port",
"limit":1
}
mais après comment utiliser ces données dans mon appli pour que ça fasse ce que je veux (ex: extraire les coordonnées GPS)?
En parallèle je me suis renseigné ailleurs (pour être honnête) et on m'a fait télécharger ADMIN EXPRESS mais je n'ai aucune idée de comment l'utiliser.
Ca te parle?
23 avril 2024 à 11:41
mais après comment utiliser ces données dans mon appli pour que ça fasse ce que je veux (ex: extraire les coordonnées GPS)?
Il faut parser le JSON que tu reçois (regarde GSON) pour récupérer les données GPS dont tu as besoin, dans le noeud "geometry". Je vois qu'il y a une lib qui ferait le job: https://github.com/filosganga/geogson
En parallèle je me suis renseigné ailleurs (pour être honnête) et on m'a fait télécharger ADMIN EXPRESS mais je n'ai aucune idée de comment l'utiliser.
Jamais utilisé pour ma part. J'imagine que l'on t'a demandé de télécharger ce jeu de données pour pouvoir l'embarquer dans l'app et ainsi éviter un appel webservice. Perso, je préfère faire appel à un webservice.
Modifié le 24 avril 2024 à 16:15
Bonjour Bruno,
merci pour ce lien. J'ai récupéré les différents fichiers (26) maintenant il faut que j'essaie de comprendre comment ça fonctionne.
J'ai essayer de trouver des infos sur comment Geocoder mais sur ce site https://developer.android.com/reference/android/location/Geocoder beaucoup de chose sont déconseillé en API 33.
Je suppose que le point de départ pour faire ma requête vers le site est mon activité Map.
J'apprécierai beaucoup ton aide (encore).
Merci d'avance.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question30 avril 2024 à 17:07
bonjour,
voici où j'en suis.
J'ai inséré un .Json dans un fichier Assets
[ ... { "insee_code": "98613", "city_code": "uvea", "zip_code": "98600", "label": "uvea", "latitude": "-13.281862538", "longitude": "-176.161927918", "department_name": "wallis-et-futuna", "department_number": "986", "region_name": "wallis-et-futuna", "region_geojson_name": "Wallis-et-Futuna" } ... ]
j'utilise ce code qui fonctionne plutôt bien mais je rencontre un petit soucis.
TextView txtCities=findViewById(R.id.txtCities); TextView txtSize=findViewById(R.id.txtSize); EditText edtCities=findViewById(R.id.edtCities); try{ //file name should same as in assets folder with .json extension //load json InputStream jsonFile=getAssets().open("cities.json"); int size= jsonFile.available(); byte[] buffer=new byte[size]; jsonFile.read(buffer); jsonFile.close(); //now we will fetch json file String json,city_code; int max,zip_code; String latitude,longitude; json= new String(buffer, StandardCharsets.UTF_8); JSONArray jsonArray=new JSONArray(json); max=jsonArray.length(); //now fetch each json object for (int i = 0; i < max; i++) { JSONObject jsonObject = jsonArray.getJSONObject(i); zip_code = jsonObject.getString("zip_code"); city_code = jsonObject.getString("city_code"); if (city_code.equals("montville")) { city_code = jsonObject.getString("city_code"); zip_code = jsonObject.getInt("zip_code"); latitude = (jsonObject.getString("latitude")); longitude = (jsonObject.getString("longitude")); txtCities.setText("city_code: " + city_code + "\n" + "zip_code: " + zip_code + "\n" + "latitude: " + latitude + "\n" + "longitude: " + longitude); txtSize.setText("Size_max: " + max +"\n"+ "Size_i: " + i); break; } } }catch (Exception e){ Log.e(TAG, "loadjson: error" + e ); }
j'ai mis une condition pour arrêter la recherche lorsque la cible est trouvée
if (city_code.equals("montville")) {
celle-ci ne fonctionne que si c'est écrit en dur comme au-dessus.
j'ai essayé comme ça mais ça ne fonctionne pas.
if (preferenceManager.getString(Constants.KEY_POSTAL).equals(zip_code)){
if ((city_code.equals(preferenceManager.getString(Constants.KEY_TOWN))) {
if ((edtCities.equals(city_code)) {
De plus le fichier .Json est assez lourd(17.38MB) du coup j'ai ce message:
The file size(17.38MB) exceeds the configured limit (2.56MB). Code insight features are not available.
Merci d'avance pour votre participation.
30 avril 2024 à 19:07
Re,
j'ai trouvé la solution pour utiliser le contenu de l'EditText:
String townName=binding.edtTown.getText().toString(); (edtCities.equals(city_code)){
il fallait juste faire un .getText().toString()
Par contre pour le poids du fichier est-ce que ça peut poser problème?
3 mai 2024 à 09:49
Hello,
Le poids du fichier peut effectivement poser problème. De mémoire, il est "difficile" de publier une app > 50Mo sur le store. De plus, ça me semble beaucoup trop lourd pour "juste" avoir une liste de villes. Tu dois avoir 75% d'infos inutiles...
Concernant la saisie, il faut que tu implémentes l'auto-complétion. C'est-à-dire que dès que l'utilisateur entre 2 ou 3 caractères, tu requêtes ta source de données pour ne lui proposer que les villes qui commencent par les caractères saisis.
Après une petite recherche, je te propose d'utiliser le endpoint /communes de cette API: https://api.gouv.fr/documentation/api-geo: il te suffit de mettre 3 lettres dans le champ "nom" pour avoir toutes les communes Françaises commençant par ces caractères.
A toi de voir.