/ / वर्तमान स्थान झूठी ऑन-स्क्रीन निर्देशांक में प्रदर्शित होता है - Android, Google-मैप्स

वर्तमान स्थान झूठी ऑन-स्क्रीन निर्देशांक पर प्रदर्शित - एंड्रॉइड, गूगल-मैप्स

मैं सिर्फ एक बुनियादी Android की भावना बनाने की कोशिश कर रहा हूँनेविगेशन से संबंधित प्रश्न, "मैं वर्तमान स्थान को कैसे प्रदर्शित कर सकता हूं"। मैंने अपने लंबे googling सत्रों से लेखों और ट्यूटोरियल के कोड का थोड़ा उपयोग किया है। एक साधारण ओवरले (सर्कल + टेक्स्ट संदेश) का प्रदर्शन काम करता है, फिर भी एक गलत ऑन-स्क्रीन स्थिति (भूमध्य रेखा पर जाहिरा तौर पर)।

मेरे कोड सेटअप में एक छोटा आंतरिक वर्ग शामिल है implements LocationListener, और उसका onLocationChanged ईवेंट हैंडलर इस विधि को कहता है:

protected void createAndShowCustomOverlay(Location newLocation)
{
double lat = newLocation.getLatitude();
double lng = newLocation.getLongitude();

// geoPointFromLatLng is an E6 converter :
// return new GeoPoint((int) (pLat * 1E6), (int) (pLng * 1E6));
GeoPoint geopoint = GeoFunctions.geoPointFromLatLng(lat, lng);

CustomOverlay overlay = new CustomOverlay(geopoint);

mapView.getOverlays().add(overlay);
mapView.getController().animateTo(geopoint);

mapView.postInvalidate();
}

इस बिंदु तक, यह सब ठीक लग रहा है, मैंने "चारों ओर डिबग किया है और गैर-रूपांतरित लैट / लैंग की जोड़ी ठीक है, ई 6 संस्करण भी ठीक है।

public class CustomOverlay extends Overlay
{

private static final int CIRCLERADIUS = 2;
private GeoPoint geopoint;

public CustomOverlay(GeoPoint point)
{
geopoint = point;
}

@Override
public void draw(Canvas canvas, MapView mapView, boolean shadow)
{
// Transfrom geoposition to Point on canvas
Projection projection = mapView.getProjection();
Point point = new Point();
projection.toPixels(geopoint, point);

// background
Paint background = new Paint();
background.setColor(Color.WHITE);
RectF rect = new RectF();
rect.set(point.x + 2 * CIRCLERADIUS, point.y - 4 * CIRCLERADIUS,
point.x + 90, point.y + 12);

// text "My Location"
Paint text = new Paint();
text.setAntiAlias(true);
text.setColor(Color.BLUE);
text.setTextSize(12);
text.setTypeface(Typeface.MONOSPACE);

// the circle to mark the spot
Paint circle = new Paint();
circle.setColor(Color.BLUE);
circle.setAntiAlias(true);

canvas.drawRoundRect(rect, 2, 2, background);
canvas.drawCircle(point.x, point.y, CIRCLERADIUS, circle);
canvas.drawText("My Location", point.x + 3 * CIRCLERADIUS, point.y + 3
* CIRCLERADIUS, text);
}
}

यह सबसे निश्चित रूप से एक तरह की प्रक्षेपण त्रुटि है, क्योंकि मेरे सभी भू ठीक हैं "डी कॉर्ड भूमध्य रेखा पर समाप्त होते हैं, इसलिए कुछ 0.0 मान चारों ओर फेंके जा रहे हैं।

यदि आवश्यक हो, तो मैं अन्य विवरण प्रदान कर सकता हूंएमुलेटर पर कोड चलाने पर, मैप्स एपीआई लेवल 8 (एंड्रॉइड 2.2) और मुझे टाइलें मिलती हैं और कस्टमऑवरले (सर्कल + टेक्स्ट) प्रदर्शित होता है, केवल एक वास्तव में गलत स्थिति पर (54.foo और 8.bar जैसे कॉर्ड बंद हैं) )।

कोडबेस थोड़ा पुराना हो सकता है, तो शायद एक प्रक्षेपण जैसे कि toPixels isn "टी की आवश्यकता अब और नहीं? कोई विचार नहीं है।

अग्रिम में धन्यवाद !

उत्तर:

उत्तर № 1 के लिए 1

हल किया गया, टेलनेट के माध्यम से भेजा गया "जियो फिक्स" कमांड एक (लैंग, लाट) जोड़ी चाहता है, न कि (लाट, लैंग) जोड़ी। असंगति अपने सबसे अच्छे रूप में! इनपुट के लिए धन्यवाद।


जवाब के लिए 0 № 2

यदि आप केवल वर्तमान स्थान दिखाना चाहते हैं और इसे स्क्रीन पर छोटे ब्लिंकिंग सर्कुलेशन के साथ अपडेट करते रहना चाहते हैं जैसे कि एंड्रॉइड के लिए Google मैप्स करता है, तो एंड्रॉइड में इस सुविधा का डिफ़ॉल्ट कार्यान्वयन है।

    MyLocationOverlay myLocationOverlay = new MyLocationOverlay(context, mapView);
myLocationOverlay.enableMyLocation();
mapView.getOverlays().add(myLocationOverlay);

यह Android सब कुछ संभाल लेंगे।