如果我想在地图上使用GPS加覆盖项目 [英] if i want to add overlay items on map using gps

查看:96
本文介绍了如果我想在地图上使用GPS加覆盖项目的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的code 在此输入code <

here is my code enter code here <

package ntryn.n;


import com.google.android.maps.MapActivity;
import com.google.android.maps.MapView;
import com.google.android.maps.MapController;
import com.google.android.maps.GeoPoint;


import android.content.Context;

import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;

import android.location.Geocoder;
import android.location.Address;

import com.google.android.maps.Overlay;
import android.graphics.Canvas;
import android.graphics.Point;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.Drawable;

import java.util.List;
import java.util.Locale;
import java.io.IOException;




import android.os.Bundle;
import android.widget.Toast;

public class ntryn extends MapActivity {
    private MapView mapView;
    private MapController mapController;

    private LocationManager locationManager;
    private LocationListener locationListener;
    List<Overlay> mapOverlays;
    Drawable drawable, drawable2 ;
    HelloItemizedOverlay itemizedoverlay;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);    

        locationListener = new GPSLocationListener();

        locationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 
            0, 
            0, 
            locationListener);

        mapView = (MapView) findViewById(R.id.mapView);

        // enable Street view by default
        mapView.setStreetView(true);

        // enable to show Satellite view
        // mapView.setSatellite(true);

        // enable to show Traffic on map
        // mapView.setTraffic(true);
        mapView.setBuiltInZoomControls(true);

        mapController = mapView.getController();
        mapController.setZoom(16); 

        mapController = mapView.getController();

        mapView.invalidate();

        GeoPoint p;
        String coordinates[] = {"30.084691643714909", "31.335958242416382"};
        double lat = Double.parseDouble(coordinates[0]);
        double lng = Double.parseDouble(coordinates[1]);

        p = new GeoPoint(
            (int) (lat * 1E6), 
            (int) (lng * 1E6));

        mapController.animateTo(p);
        mapController.setZoom(17); 

      //  HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable);
        MapOverlay mapOverlay = new MapOverlay();
        List<Overlay> listOfOverlays = mapView.getOverlays();
        listOfOverlays.clear();
        listOfOverlays.add(mapOverlay);        

        mapView.invalidate();
    }


    @Override
    protected boolean isRouteDisplayed() {
        return false;
    }

    private class GPSLocationListener implements LocationListener 
    {
        public void onLocationChanged(Location location) {
            if (location != null) {
                GeoPoint point = new GeoPoint(
                        (int) (location.getLatitude() * 1E6), 
                        (int) (location.getLongitude() * 1E6));

                /* Toast.makeText(getBaseContext(), 
                        "Latitude: " + location.getLatitude() + 
                        " Longitude: " + location.getLongitude(), 
                        Toast.LENGTH_SHORT).show();*/

                mapController.animateTo(point);
                mapController.setZoom(16);

           //     GeoPoint point1 = new GeoPoint{"30.084691643714909,31.335958242416382"};

                // add marker
                MapOverlay mapOverlay = new MapOverlay();
                mapOverlay.setPointToDraw(point);
                List<Overlay> listOfOverlays = mapView.getOverlays();
                listOfOverlays.clear();
                listOfOverlays.add(mapOverlay);

                String address = ConvertPointToLocation(point);
                Toast.makeText(getBaseContext(), address, Toast.LENGTH_SHORT).show();

                mapView.invalidate();
            }
        }

        public String ConvertPointToLocation(GeoPoint point) {   
            String address = "";
            Geocoder geoCoder = new Geocoder(
                    getBaseContext(), Locale.getDefault());
            try {
                List<Address> addresses = geoCoder.getFromLocation(
                    point.getLatitudeE6()  / 1E6, 
                    point.getLongitudeE6() / 1E6, 1);

                if (addresses.size() > 0) {
                    for (int index = 0; index < addresses.get(0).getMaxAddressLineIndex(); index++)
                        address += addresses.get(0).getAddressLine(index) + " ";
                }
            }
            catch (IOException e) {                
                e.printStackTrace();
            }   

            return address;
        } 

        public void onProviderDisabled(String provider) {
        }

        public void onProviderEnabled(String provider) {
        }

        public void onStatusChanged(String provider, int status, Bundle extras) {
        }
    }




    class MapOverlay extends Overlay
    {
        private GeoPoint pointToDraw;
        private GeoPoint p1;
        public void setPointToDraw(GeoPoint point) {
            pointToDraw = point;

        }

        public GeoPoint getPointToDraw() {
            return pointToDraw;
        }
        public void setp1(GeoPoint po1) {
            p1 = po1;

        }

        public GeoPoint getp1() {
            return p1;
        }


        @Override
        public boolean draw(Canvas canvas, MapView mapView, boolean shadow, long when) {
            super.draw(canvas, mapView, shadow);                   

            // convert point to pixels
            Point screenPts = new Point();
            mapView.getProjection().toPixels(pointToDraw, screenPts);

            // add marker
            Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.dotred);
            canvas.drawBitmap(bmp, screenPts.x, screenPts.y - 24, null); // 24 is the height of image        
            return true;
        }
    }



}

什么是错我做我想添加其他叠加,而不是一个,当我打开GPS在我的特定位置出现

whats wrong i'm doing i want to add other overlay rather than the one appear when i open the gps at my specific location

推荐答案

我会尝试的基础上的(小)的信息你给了回答。

I'll try to answer based on the (little) info you gave.

您code显示MapOverlay绘制一个位图在一个点上。

Your code shows a MapOverlay that draws a bitmap over one point.

  1. 在您的应用程序的的onCreate()方法创建MapOverlay并将其添加到YOUT图形页面,的叠加打印列表中,但你永远不会调用 setPointToDraw(),所以你最终有一个空的GeoPoint
  2. 您总是清除覆盖的列表之前addind一个新的,所以你总是最后一个叠加。
  3. 如果你想显示多点,你可以使用<一个href="http://$c$c.google.com/intl/es-419/android/add-ons/google-apis/reference/com/google/android/maps/ItemizedOverlay.html"相对=nofollow> ItemizedOverlay
  4. 如果你想显示用户的当前位置,你可以使用<一个href="http://$c$c.google.com/intl/es-419/android/add-ons/google-apis/reference/com/google/android/maps/MyLocationOverlay.html"相对=nofollow> MyLocationOverlay
  1. In the onCreate() method of your application you create MapOverlay and add it to the list of overlays of yout MapView, but you never call setPointToDraw() so you end up with a null GeoPoint
  2. You are always clearing the list of overlays before addind a new one, so you always end up with one overlay.
  3. If you want to display multiple points you can use ItemizedOverlay
  4. If you want to display the users current location you can use MyLocationOverlay

这篇关于如果我想在地图上使用GPS加覆盖项目的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆