2013-03-07 12 views
15

मेरे पास एक Google मानचित्र ऐप है जो उपयोगकर्ताओं को लैट और लंबे मानों को पकड़ता है, और Google JSON प्रतिक्रिया के उपयोग के माध्यम से सुपरमार्केट ऑब्जेक्ट्स की एक श्रृंखला को उनके सापेक्ष लैट और लंबे मानों के साथ स्टोर करता है। मैं उस साइट पर एक ओवरले क्लास का उपयोग उस मार्केट पर एक मार्कर पर आधारित सुपरमार्केट पर निर्भर करता हूं जो उपलब्ध सुपरमार्केट दिखाता है।Google मानचित्र सटीकता समस्या

यह सब ठीक काम करता है, जहां मुझे लगता है कि मेरे ओवरले क्लास की सटीकता के साथ मामूली समस्या है। नक्शा मार्कर बहुत सटीक प्रतीत नहीं होता है, जिसमें मार्कर निर्दिष्ट भूरे रंग की गलत जगह पर इंगित कर रहा है और मेरे भूगर्भीय ऑब्जेक्ट से इसे लंबे समय तक पारित किया गया है। (कभी-कभी 11 मील दूर तक जहां से यह होना चाहिए)।

मैंने उपयोग अनुमतियों पर LOCATION_FINE को मेरे मैनिफेस्ट में घोषित करने का प्रयास किया है, लेकिन ऐसा कोई फर्क नहीं पड़ता है। क्या मुझे इसकी आवश्यकता है क्योंकि मैं जीपीएस की बजाय JSON प्रतिक्रिया का उपयोग कर रहा हूं?

एम्यूलेटर पर मानचित्र कितना सटीक है? मैं यहां स्ट्रॉ पर क्लचिंग कर सकता हूं लेकिन मैंने कई लोगों को यह कहते हुए सुना है कि एमुलेटर पर Google एपीआई का उपयोग करते समय यह सटीक नहीं है।

कोई जीपीएस इस्तेमाल नहीं किया जा रहा है।

EDIT

इस प्रश्न को जोड़ने के लिए। मेरे पास एक और सवाल है जो अधिक गहराई में जाता है। मेरा मानना ​​है कि यह मुद्दा मेरे अपडेट() विधि के भीतर है क्योंकि समस्या गलत ऑब्जेक्ट लेट है और मार्कर को लंबे मूल्य भेजे जा रहे हैं।

मैं अपना कोड पोस्ट करूंगा, बस यह देखने के लिए कि कोई भी कोई समस्या पा सकता है या नहीं।

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; 
    } 
} 
} 
+0

भू-नाम की परिभाषा क्या है? – Houf

+0

@Houf GeoName वह वर्ग है जिसका उपयोग क्लास 'परतों' के उपयोग के माध्यम से JSON प्रतिक्रियाओं को मैप करने के लिए किया जाता है। मैंने उपरोक्त कोड में कक्षा को जोड़ा है। जो मैं देख सकता हूं उससे मैं उस सरणी ऑब्जेक्ट की आईडी तक नहीं पहुंच पा रहा हूं जिसे मेरी सूचीदृश्य से क्लिक किया गया है। – user1352057

+0

मैं आपको कम से कम Google मानचित्र api v2 का उपयोग करने का सुझाव दूंगा – user2065529

उत्तर

3

इस सॉर्ट करने के लिए प्रबंधित।

किसी और के लिए जो JSON स्तरित प्रतिक्रिया का उपयोग कर रहा है। सुनिश्चित करें कि आप सही GeoPoint ऑब्जेक्ट क्लास से लैट और लंबे मानों तक पहुंच सकते हैं।

2

सादगी के लिए आप हाल ही के अपडेट के साथ Google मानचित्र एंड्रॉइड एपीआई v2 का उपयोग कर सकते हैं आपका कार्य आसान हो जाता है। https://developers.google.com/maps/documentation/android/start

आपको केवल GoogleMap ऑब्जेक्ट बनाने और उचित श्रोताओं को जोड़ने की आवश्यकता है।

संबंधित मुद्दे