Android 如何将GPS Lat Lng坐标转换为Arcgis X,Y值?

Android 如何将GPS Lat Lng坐标转换为Arcgis X,Y值?,android,gps,arcgis,Android,Gps,Arcgis,我正在使用arcgis开发一个应用程序,我想用标记在地图上显示当前位置。我正在从gps获取lat lng值。在地图上显示标记时,我遇到了问题,即标记显示在地图中,而不是在地图上显示当前位置。请任何人解决我的问题 我的主要课程与arcgis地图 GPSTracker gpsTracker=new GPSTracker(LaunchingMapActivity.this); double locx = gpsTracker.getLatitude(); double locy = gpsTracke

我正在使用arcgis开发一个应用程序,我想用标记在地图上显示当前位置。我正在从gps获取lat lng值。在地图上显示标记时,我遇到了问题,即标记显示在地图中,而不是在地图上显示当前位置。请任何人解决我的问题

我的主要课程与arcgis地图

GPSTracker gpsTracker=new GPSTracker(LaunchingMapActivity.this);
double locx = gpsTracker.getLatitude();
double locy = gpsTracker.getLongitude();
Log.e("locx",""+locx);
Log.e("locy",""+locy);
Point mapPoint=new Point(locx,locy);

Point wgspoint=mMapView.toMapPoint(mapPoint);

Point currentPoint=mMapView.toMapPoint(wgspoint);

                              Point mapPoint = (Point) GeometryEngine.project(currentPoint,  

                                      SpatialReference.create(4322),

                                      mMapView.getSpatialReference());

                                      Unit mapUnit = mMapView.getSpatialReference().getUnit();
                                      double SEARCH_RADIUS = 0;
                                    double zoomWidth = Unit.convertUnits(

                                      SEARCH_RADIUS, Unit.create(LinearUnit.Code.MILE_US),                                                    
                                    mapUnit);
                                      Envelope zoomExtent = new Envelope(mapPoint, zoomWidth,                 
                                    zoomWidth);

                             mMapView.setExtent(zoomExtent);

                                      gLayer = new GraphicsLayer();
                                      PictureMarkerSymbol symbol = new     





        PictureMarkerSymbol(getResources().getDrawable(R.drawable.markerpointblue));
                                      Graphic graphic = new Graphic(mapPoint, symbol);
                                      //Graphic point=new Graphic(new Point(x, y),new    
                                   //   SimpleMarkerSymbol(Color.CYAN,20,STYLE.CIRCLE);

                                    roadGeometiesList.add(graphic.getGeometry());
                                    Geometry[] geoArr = roadGeometiesList
                                            .toArray(new Geometry[roadGeometiesList.size()]);
                                    share.setGeoArr(geoArr);

                                     gLayer.addGraphic(graphic);
                                      mMapView .addLayer(gLayer);
}


底图的空间参考是什么? 在地图上打印点几何图形之前,可能需要重新投影点几何图形,以便它们与基础地图具有相同的空间参照

My GpsTracker

  package au.com.ipptechnologies.gps;

import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.os.IBinder;
import android.provider.Settings;
import android.util.Log;



public class GPSTracker extends Service implements LocationListener {

   private final Context mContext;

   // flag for GPS status
   boolean isGPSEnabled = false;

   // flag for network status
   boolean isNetworkEnabled = false;

   // flag for GPS status
   boolean canGetLocation = false;

   Location location; // location
   double latitude; // latitude
   double longitude; // longitude
   double speed;

   // The minimum distance to change Updates in meters
   private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters

   // The minimum time between updates in milliseconds
   private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute

   // Declaring a Location Manager
   protected LocationManager locationManager;

   public GPSTracker(Context context) {
       this.mContext = context;
       getLocation();
   }

   public Location getLocation() {
       try {
           locationManager = (LocationManager) mContext
                   .getSystemService(LOCATION_SERVICE);



           Criteria criteria = new Criteria();
           criteria.setPowerRequirement(Criteria.POWER_LOW); // Chose your desired power consumption level.
           criteria.setAccuracy(Criteria.ACCURACY_FINE); // Choose your accuracy requirement.
           criteria.setSpeedRequired(true); 
           criteria.setSpeedAccuracy(Criteria.ACCURACY_FINE);// Chose if speed for first location fix is required.
           criteria.setAltitudeRequired(false); // Choose if you use altitude.
           criteria.setBearingRequired(false); // Choose if you use bearing.
           criteria.setCostAllowed(false); // Choose if this provider can waste money :-)


           // getting GPS status
           isGPSEnabled = locationManager
                   .isProviderEnabled(LocationManager.GPS_PROVIDER);



           // getting network status
           isNetworkEnabled = locationManager
                   .isProviderEnabled(LocationManager.NETWORK_PROVIDER);


           if (!isGPSEnabled && !isNetworkEnabled) {
               // no network provider is enabled
           } else {
               this.canGetLocation = true;
               if (isNetworkEnabled) {
                   locationManager.requestLocationUpdates(
                           LocationManager.NETWORK_PROVIDER,
                           MIN_TIME_BW_UPDATES,
                           MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                   Log.d("Network", "Network");
                   if (locationManager != null) {
                       location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                      // locationManager.getBestProvider(criteria, true);
                       if (location != null) {
                           latitude = location.getLatitude();
                           longitude = location.getLongitude();
                       }
                   }
               }
               // if GPS Enabled get lat/long using GPS Services
               if (isGPSEnabled) {
                   if (location == null) {
                       locationManager.requestLocationUpdates(
                               LocationManager.GPS_PROVIDER,
                               MIN_TIME_BW_UPDATES,
                               MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
                       Log.d("GPS Enabled", "GPS Enabled");
                       if (locationManager != null) {
                           location = locationManager
                                   .getLastKnownLocation(LocationManager.GPS_PROVIDER);
                           if (location != null) {
                               latitude = location.getLatitude();
                               longitude = location.getLongitude();
                           }
                       }
                   }
               }
           }

       } catch (Exception e) {
       }
       return location;
   }

   /**
    * Stop using GPS listener Calling this function will stop using GPS in your
    * app.
    * */
   public void stopUsingGPS() {
       if (locationManager != null) {
           locationManager.removeUpdates(GPSTracker.this);
       }
   }

   /**
    * Function to get latitude
    * */
   public double getLatitude() {
       if (location != null) {
           latitude = location.getLatitude();

       }
       // return latitude
       return latitude;
   }

   /**
    * Function to get longitude
    * */
   public double getLongitude() {
       if (location != null) {
           longitude = location.getLongitude();
       }

       // return longitude
       return longitude;
   }
   public double getCurrentSpeed(){
     if (location != null) {
     if(location.hasSpeed()){

     Log.e("HasSpeed", ""+location.hasSpeed());
           speed = location.getSpeed();
     }
       }
     return speed;
   }

   /**
    * Function to check GPS/wifi enabled
    * 
    * @return boolean
    * */
   public boolean canGetLocation() {
       return this.canGetLocation;
   }

   /**
    * Function to show settings alert dialog On pressing Settings button will
    * lauch Settings Options
    * */
   public void showSettingsAlert() {
       AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext);

       // Setting DialogHelp Title
       alertDialog.setTitle("GPS is settings");

       // Setting DialogHelp Message
       alertDialog
               .setMessage("GPS is not enabled. Do you want to go to settings menu?");

       // On pressing Settings button
       alertDialog.setPositiveButton("Settings",
               new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int which) {
                       Intent intent = new Intent(
                               Settings.ACTION_LOCATION_SOURCE_SETTINGS);
                       mContext.startActivity(intent);
                   }
               });

       // on pressing cancel button
       alertDialog.setNegativeButton("Cancel",
               new DialogInterface.OnClickListener() {
                   public void onClick(DialogInterface dialog, int which) {
                       dialog.cancel();
                   }
               });

       // Showing Alert Message
       alertDialog.show();
   }

   @Override
   public void onLocationChanged(Location location) {
       float bestAccuracy = -1f;
       if (location.getAccuracy() != 0.0f
           && (location.getAccuracy() < bestAccuracy) || bestAccuracy == -1f) {
               locationManager.removeUpdates(this);
       }
       bestAccuracy = location.getAccuracy();
   }

   @Override
   public void onProviderDisabled(String provider) {
   }

   @Override
   public void onProviderEnabled(String provider) {
   }

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

   @Override
   public IBinder onBind(Intent arg0) {
       return null;
   }

   public float getAccurecy()
   {
       return location.getAccuracy();
   }

}