Reverse Geocoding и Россия

Ответить
kolipass
Сообщения: 50
Зарегистрирован: 16 апр 2012, 14:10

Reverse Geocoding и Россия

Сообщение kolipass » 27 апр 2012, 16:00

День добрый.В приложении имеется список городов. При включении он подгружается. Хочу при включении выбрать город. в котором сейчас находится аппарат(если это возможно).
написал класс

Код: Выделить всё

public class GeoLocation {
	String LOG_TAG = "GeoLocation";
	private LocationManager manager;
	Context mContext;
	private Geocoder geocoder;
	private LocationListener listener = new LocationListener() {
		public void onLocationChanged(Location argLocation) {
		}

		@Override
		public void onProviderDisabled(String arg0) {
		}

		@Override
		public void onProviderEnabled(String arg0) {
		}

		@Override
		public void onStatusChanged(String arg0, int arg1, Bundle arg2) {
		}

	};

	public GeoLocation(Context ApplicationContext) {
		Log.d(LOG_TAG, "GeoLocation create");
		mContext = ApplicationContext;
	}

	private String printLocation(Location loc) {
		String text = null;
		if (loc != null) {
			try {
				Log.d(LOG_TAG, loc.toString());
				List<Address> list = geocoder.getFromLocation(
						loc.getLatitude(), loc.getLongitude(), 1);
				Log.d(LOG_TAG, String.valueOf(list.size()));
				Address address = list.get(0);
				text = address.getLocality();
				Log.d(LOG_TAG, "  Locality:" + text);
			} catch (IOException e) {
				Log.d(LOG_TAG, e.getMessage());
			}
		} else {
			text = "NAN";
		}
		return text;
	}

	public String GetCurrentCity() {
		Log.d(LOG_TAG, "GGetCurrentCity");
		String city = "";
		Criteria criteria = new Criteria();
		criteria.setAccuracy(Criteria.ACCURACY_FINE);
		criteria.setPowerRequirement(Criteria.ACCURACY_FINE);
		criteria.setCostAllowed(true);
		manager = (LocationManager) mContext
				.getSystemService(Context.LOCATION_SERVICE);

		String BestProvider = manager.getBestProvider(criteria, true);
		if (BestProvider != null) {
			Log.d(LOG_TAG, BestProvider);
			manager.requestLocationUpdates(BestProvider, 0, 0, listener);

			Location loc = manager.getLastKnownLocation(BestProvider);			

			geocoder = new Geocoder(mContext);

			city = printLocation(loc);
		} else {
			city = null;
		}
		return city;

	}

}
все прекрасно, но в иркутске нет иркутска на руском Изображение в getLocality. Что можно предпринять?

Аватара пользователя
andev
Сообщения: 219
Зарегистрирован: 13 янв 2012, 17:56

Re: Reverse Geocoding и Россия

Сообщение andev » 27 апр 2012, 17:46

Проверил код, действительно работает )
уточните, пожалуйста, что вы хотите? Если проблема в том, что в заранее введенном списке имена городов на русском, а GetLocation отдает на английском, то самое элементарное - использовать второй английский список. Но это совсем уж очевидно. Уточните, пожалуйста, что не так?

kolipass
Сообщения: 50
Зарегистрирован: 16 апр 2012, 14:10

Re: Reverse Geocoding и Россия

Сообщение kolipass » 28 апр 2012, 08:49

Простите, что не уточнил. У меня API одного сайта возвращает названия городов строго на русском языке.
Reverse Geocoding возвращает не город, а близ лежащие известные ему адреса. В Адресе поле Locality может быть заполнено на английском или на местном. Может быть не заполнено вообще.
Гугл мапс для сайтов в своем API предлагает указывать локаль. Тут как-то так же реализовать можно? Или есть ли другие способы из координат получить название населенного пункта на русском?

kolipass
Сообщения: 50
Зарегистрирован: 16 апр 2012, 14:10

Re: Reverse Geocoding и Россия

Сообщение kolipass » 02 май 2012, 08:19

Решил проблему самым простым методом. Айпи сайта мне говорит координаты города. Вспоминая геометрию, нахожу самое короткое расстояние от тек. точки до города, его и использую. Лучше решения найти не смог

Ответить