Ошибка в Google maps

У меня есть приложение Google maps, которое захватывает пользовательские значения lat и long, а с помощью ответа JSON Google хранит ряд объектов супермаркета с их относительными значениями lat и long. Я использую класс оверлея для размещения маркера на карте, зависящий от выбранного супермаркета, из списка, в котором отображаются доступные супермаркеты.

Все это прекрасно работает, и у меня, похоже, небольшая проблема с точностью моего класса наложения. Маркер карты, похоже, не очень точен, поскольку маркер указывает на неправильное место указанных латов и длинных точек, переданных ему от моего геоинформационного объекта. (Иногда до 11 миль от места, где это должно быть).

Я попытался объявить LOCATION_FINE в своем манифесте в разрешениях использования, но это, похоже, не имеет никакого значения. Нужно ли мне это, поскольку я использую ответ JSON, а не GPS?

Насколько точна карта на эмуляторе? Я могу сжимать соломинку здесь, но я слышал, что несколько человек говорили, что при использовании API Google на эмуляторе это не так точно.

GPS не используется.

РЕДАКТИРОВАТЬ

Чтобы добавить к этому вопросу. У меня есть другой вопрос, который углубляется. Я считаю, что проблема заключается в моем методе update (), поскольку проблема заключается в неправильном объекте lat, и длинные значения отправляются на маркер.

Я отправлю свой код, чтобы узнать, есть ли у кого-нибудь какие-либо проблемы.

Класс GeoName:

public class GeoName { private String id; private Geometry geometry; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public Geometry getGeometry() { return geometry; } public void setGeometry(Geometry geometry) { this.geometry = geometry; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 

Класс PostalCodeAdapter:

 package com.example.restfulweb; public class PostalCodeAdapter extends BaseAdapter { private Context ctx = null; Location l; Dialog d; Double Latt; Double Longg; private List<GeoName> names = new ArrayList<GeoName>(); public PostalCodeAdapter(Context ctx, List<GeoName> locations) { this.ctx = ctx; this.names = locations; } @Override public int getCount() { return names.size(); } @Override public Object getItem(int arg0) { return null; } @Override public long getItemId(int arg0) { return 0; } @Override public View getView(int arg0, View arg1, ViewGroup arg2) { LinearLayout layout = new LinearLayout(ctx); AbsListView.LayoutParams params = new AbsListView.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); layout.setLayoutParams(params); layout.setOrientation(LinearLayout.HORIZONTAL); GeoName location = this.names.get(arg0); Location l = location.getGeometry().getLocation(); Latt = l.getLat(); Longg = l.getLng(); TextView value = new TextView(this.ctx); value.setText(location.getName()); value.setMaxHeight(100); value.setTypeface(Typeface.DEFAULT, Typeface.NORMAL); value.setGravity(Gravity.CENTER); value.setOnClickListener(new CityClickListener(location)); layout.addView(value); return layout; } class CityClickListener implements OnClickListener { private GeoName geoName = null; CityClickListener(GeoName name) { this.geoName = name; } @Override public void onClick(View v) { AlertDialog.Builder builder = new AlertDialog.Builder(ctx); builder.setView(createView()); builder.setTitle("Details of " + geoName.getName()); builder.setCancelable(true); builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alert = builder.create(); alert.show(); updateMap(); } private void updateMap() { MapActivity mapAct = (MapActivity)ctx; MapView map = (MapView)mapAct.findViewById(R.id.map); map.setScrollBarStyle(MapView.SCROLLBARS_INSIDE_INSET); map.setBuiltInZoomControls(Boolean.TRUE); map.displayZoomControls(Boolean.TRUE); ********** ISSUE: THE PASSED LAT AND LONG VALUES ARE NOT BEING PASSED TO THE OVERLAY ********** GeoPoint point = new GeoPoint((int)(Latt* 1E6), (int)(Longg * 1E6)); MapController mc = map.getController(); mc.setZoom(17); mc.setCenter(point); mc.animateTo(point); List<Overlay> overlay = map.getOverlays(); overlay.clear(); Drawable marker = ctx.getResources().getDrawable(R.drawable.marker); MyItemizedOverlay overlays = new MyItemizedOverlay(marker, map, ctx); OverlayItem pointerConverted = new OverlayItem(point, geoName.getName(), null); overlay.add(overlays); overlays.addOverlay(pointerConverted); } private View createView() { LinearLayout l = new LinearLayout(ctx); l.setOrientation(LinearLayout.VERTICAL); LinearLayout.LayoutParams params = new LayoutParams(100, 300); l.setLayoutParams(params); TextView city = new TextView(ctx); city.setText("Supermarket: " + geoName.getName() + ""); city.setMaxHeight(100); city.setTypeface(Typeface.DEFAULT, Typeface.NORMAL); city.setGravity(Gravity.CENTER); //city.setTextColor(ctx.getResources().getColor(R.color.white)); TextView orientation = new TextView(ctx); //orientation.setText("Orientation : " + geoName.lat + " || " + geoName.lng); orientation.setMaxHeight(100); orientation.setTypeface(Typeface.DEFAULT, Typeface.NORMAL); orientation.setGravity(Gravity.CENTER); l.addView(city); l.addView(orientation); return l; } } } 

Solutions Collecting From Web of "Ошибка в Google maps"

Удалось это отсортировать.

Для всех, кто использует многоуровневый ответ JSON. Убедитесь, что вы получаете доступ к значениям lat и long из правильных классов объектов GeoPoint.

Для простоты вы можете использовать Google Maps Android API v2 с последними обновлениями, ваша задача упрощается. https://developers.google.com/maps/documentation/android/start

Вам просто нужно создать объект GoogleMap и добавить соответствующих слушателей.