Arcgis:如何获取设备位置

时间:2013-11-19 03:25:30

标签: android map arcgis esri

我试图在我的应用程序中实现这些代码,但它不起作用,我不知道我哪里出错了。

基本上,当我启动设备位置的样本时。它没有告诉我我当前的位置在哪里,我没有看到任何类似于我当前位置的蓝点。

我看到的唯一一件事是地图。只是一个简单的缩小地图。

如果有人可以帮助我了解如何使用地图上显示的蓝点来获取当前位置,我将非常感激。

这是我的MainActivity.class

public class HelloWorld extends Activity {
MapView mMapView = null;
ArcGISTiledMapServiceLayer tileLayer;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    // Retrieve the map and initial extent from XML layout


        mMapView = (MapView) findViewById(R.id.map);

         mMapView.addLayer(new ArcGISTiledMapServiceLayer(
             "http://services.arcgisonline.com/ArcGIS/rest/services/World_Street_Map/MapServer"));

         mMapView.setOnStatusChangedListener(new OnStatusChangedListener() {

           public void onStatusChanged(Object source, STATUS status) {
             if (source == mMapView && status == STATUS.INITIALIZED) {
               LocationService ls = mMapView.getLocationService();
               ls.setAutoPan(false);

               ls.start();
             }

           }

         });



    }


protected void onPause() {
    super.onPause();
    mMapView.pause();
   }

@Override
protected void onResume() {
    super.onResume(); 
    mMapView.unpause();
}   

}

2 个答案:

答案 0 :(得分:4)

这是一个代码,每1秒通过提供商和GPS绘制我的位置。 让我们首先声明变量:

private GraphicsLayer myGraphicalLayer;
MapView mMapView;
    ArcGISLocalTiledLayer baseLayer;
private LocationManager mlocManager;
    private LocationListener mlocListener;

在onCreate函数WE CALL LocationListener:

mlocManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
        mlocListener = new MyLocationListener();
        mlocManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 1000, 0, mlocListener);
        mlocManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 1000, 0, mlocListener);
// loading the map
        mMapView = (MapView) findViewById(R.id.localMap);
        baseLayer = new ArcGISLocalTiledLayer(basemapurl);
        mMapView.addLayer(baseLayer);
// defining my position layer
        myGraphicalLayer = new GraphicsLayer();

然后绘制我的位置的函数:

private void SetMyLocationPoint(final double x, final double y) {
        PictureMarkerSymbol myPin = new PictureMarkerSymbol(getResources().getDrawable(
                R.drawable.mylocation_icon));

        Point wgspoint = new Point(x, y);
        Point mapPoint = (Point) GeometryEngine.project(wgspoint, SpatialReference.create(4326),
                mMapView.getSpatialReference());

        Graphic myPinGraphic = new Graphic(mapPoint, myPin);

        try {
            myGraphicalLayer.removeAll();
        } catch (Exception e) {
            e.printStackTrace();
        }

        myGraphicalLayer.addGraphic(myPinGraphic);
        myGraphicalLayer.setVisible(true);
        mMapView.addLayer(myGraphicalLayer);

    }

创建实现MyLocationListener的内部类以获得即时位置,并让它像这样调用名为SetMyLocationPoint的函数:

public class MyLocationListener implements LocationListener {

        @Override
        public void onLocationChanged(Location loc) {
            SetMyLocationPoint(loc.getLongitude(), loc.getLatitude());
        }

        @Override
        public void onProviderDisabled(String provider) {
            Toast.makeText(getApplicationContext(), "provider enabled", Toast.LENGTH_SHORT)
                    .show();
        }

        @Override
        public void onProviderEnabled(String provider) {
            Toast.makeText(getApplicationContext(), "provider disabled", Toast.LENGTH_SHORT)
                    .show();
        }

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

答案 1 :(得分:2)

您需要使用自己的位置管理器或位置客户端来获取设备的当前位置,然后您必须在地图上添加该点。

您的地图应位于MapFragment。 从片段中获取googleMap对象,然后在其上添加自定义蓝点。

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

    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,
            5000, 5, listener);

}

private LocationListener listener = new LocationListener() {

    @Override
    public void onLocationChanged(Location location) {
        // TODO Auto-generated method stub

        Log.e("Google", "Location Changed");

        if (location == null)
            return;
        Log.e("latitude", location.getLatitude() + "");
        Log.e("longitude", location.getLongitude() + "");

        }

    }

    @Override
    public void onProviderDisabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onProviderEnabled(String provider) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {
        // TODO Auto-generated method stub

    }
};

上面的代码会为您提供onLocationChanged方法中的位置。

注意:我使用 GPS_PROVIDER 来获取位置。 还有其他方法可以获得当前位置。