Геокод Android: через несколько часов геокод не распознает растущее число названий городов - PullRequest
0 голосов
/ 20 марта 2019

Я использую Geocode, чтобы получить LatLng строкового массива названий городов.Проблема в том, что, во-первых, все названия городов просто отлично, но через несколько часов он не получает сначала один город, потом два ... и теперь я нахожусь по четырем городам, которые он не распознает.Я меняю название города на один маленький город рядом с исходными координатами, но проблема сохраняется, и она растет.Я оставляю вам мой MapsActivity и мой геокод:

(мне уже приходилось менять Барселону на Бадалона и Толедо на Азукайку, и теперь у меня проблемы с Севильей и Леоном) MapsActivity:

package dam.javazquez.tuvotocuenta.util;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.BitmapDescriptorFactory;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;

import java.io.IOException;

import dam.javazquez.tuvotocuenta.R;

public class MapsActivity extends FragmentActivity implements OnMapReadyCallback {

    String[] provincias = new String[]{"Álava", "Albacete", "Alicante", "Almería", "Asturias", "Ávila", "Badajoz",
            "Badalona", "Burgos", "Cáceres", "Cádiz", "Cantabria", "Castellón", "Ciudad Real", "Córdoba",
            "La Coruña", "Cuenca", "Gerona", "Granada", "Guadalajara", "Guipúzcoa", "Huelva", "Huesca",
            "Islas Baleares", "Jaén", "León", "Lérida", "Lugo", "Madrid", "Málaga", "Murcia", "Navarra", "Orense",
            "Palencia", "Las Palmas", "Pontevedra", "La Rioja", "Salamanca", "Segovia", "Sevilla", "Soria",
            "Tarragona", "Santa Cruz de Tenerife", "Teruel", "Azucaica", "Valencia", "Valladolid", "Vizcaya",
            "Zamora", "Zaragoza"};
    private GoogleMap mMap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_maps);
        // Obtain the SupportMapFragment and get notified when the map is ready to be used.
        SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map);
        mapFragment.getMapAsync(this);
    }

    /*
    PASOS:
    1. Geocodizar todas las capitales de provincia, recorriendo el array de ciudades
    2. En cada iteración, crear un marker en la localización
    3. Hacer la consulta de agrupamiento por partido en una ciudad, ordenarlos de mayor a menor count
     */

    /**
     * Manipulates the map once available.
     * This callback is triggered when the map is ready to be used.
     * This is where we can add markers or lines, add listeners or move the camera. In this case,
     * we just add a marker near Sydney, Australia.
     * If Google Play services is not installed on the device, the user will be prompted to install
     * it inside the SupportMapFragment. This method will only be triggered once the user has
     * installed Google Play services and returned to the app.
     */
    @Override
    public void onMapReady(GoogleMap googleMap) {
        mMap = googleMap;
        LatLng latLng = new LatLng(40.4167, -3.70325);
        // Add a marker in Sydney and move the camera
        LatLng sydney = new LatLng(-34, 151);
        mMap.addMarker(new MarkerOptions().position(sydney).title("Marker in Sydney"));

        for (String provincia : provincias) {
            try {
                String[] parts = Geocode.getLatLong(this, provincia).split(",");
                String lat = parts[0];
                String lon = parts[1];
                LatLng loc = new LatLng(Double.parseDouble(lat), Double.parseDouble(lon));
                if (provincia.equals("Sevilla") || provincia.equals("Huelva") || provincia.equals("Jaén")) {
                    mMap.addMarker(new MarkerOptions().position(loc).icon(BitmapDescriptorFactory.fromResource(R.drawable.psoe)).title(provincia));
                } else if (provincia.equals("Álava") || provincia.equals("Guipúzcoa") || provincia.equals("Vizcaya") || provincia.equals("Tarragona") || provincia.equals("Badalona")) {
                    if (provincia.equals("Badalona")) {
                        mMap.addMarker(new MarkerOptions().position(loc).icon(BitmapDescriptorFactory.fromResource(R.drawable.podemos)).title("Barcelona"));
                    }
                    mMap.addMarker(new MarkerOptions().position(loc).icon(BitmapDescriptorFactory.fromResource(R.drawable.podemos)).title(provincia));
                } else if (provincia.equals("Gerona") || provincia.equals("Lérida")) {
                    mMap.addMarker(new MarkerOptions().position(loc).icon(BitmapDescriptorFactory.fromResource(R.drawable.erc)).title(provincia));
                } else if (provincia.equals("Navarra")) {
                    mMap.addMarker(new MarkerOptions().position(loc).icon(BitmapDescriptorFactory.fromResource(R.drawable.upn)).title(provincia));
                } else {
                    if (provincia.equals("Azucaica")) {
                        mMap.addMarker(new MarkerOptions().position(loc).icon(BitmapDescriptorFactory.fromResource(R.drawable.pp)).title("Toledo"));
                    } else {
                        mMap.addMarker(new MarkerOptions().position(loc).icon(BitmapDescriptorFactory.fromResource(R.drawable.pp)).title(provincia));
                    }
                }
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
        mMap.moveCamera(CameraUpdateFactory.newLatLng(latLng));
        mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(latLng, 5));
    }
}

Геокод:

public class Geocode {

    public static String getLatLong(Context ctx,String address) throws IOException {
        Geocoder geocoder = new Geocoder(ctx);
        double latitude = 0;
        double longitude = 0;
        List<Address> addresses;
        addresses = geocoder.getFromLocationName(address, 1);
        if(addresses.size() >= 0) {
            latitude= addresses.get(0).getLatitude();
            longitude= addresses.get(0).getLongitude();
        }

        String result = latitude +","+ longitude;
        return result;
    }
}

Большое вам спасибо!

...