Convert latitude and longitude into esri arcGIS MapPoint

匿名 (未验证) 提交于 2019-12-03 02:25:01

问题:

I am having trouble in converting the latitude and longitude values into android esri arcGIS map Point. Here's my code to get latitude and longitude values from GPS coordinates:

LocationManager lm; String towers; double lat; double longi; TextView txt;              lm = (LocationManager) getSystemService(Context.LOCATION_SERVICE);             Criteria crit = new Criteria();             towers = lm.getBestProvider(crit, false);             Location location = lm.getLastKnownLocation(towers);              if(location != null)             {                 lat = location.getLatitude();                 longi = location.getLongitude();             }

now I have the latitude and longitude values. Now all I need is to convert these values into valid esri arcGIS MapPoint. Can anyone help me?

Thanks in advance.

回答1:

Assuming you're using the ESRI Android API? If so, create a graphics layer on your map. Then create a point object

com.esri.core.geometry.Point Point myPoint = new Point();

then set the x/y values:

myPoint.setX(longi); myPoint.setY(lat);

then add myPoint to the graphics object.

http://help.arcgis.com/en/arcgismobile/10.0/apis/android/api/index.html



回答2:

Yes, it is possible. But you don't use the locationmanager in ArcGis.

ArcGIS has the predefined method like LocationListener, that is: OnStatusChangedListener.

See the below code for converting location latitude and longitude into esri arcGIS MapPoint.

     mMapView.setOnStatusChangedListener(new OnStatusChangedListener() {              /**              *               */       private static final long serialVersionUID = 1L;        public void onStatusChanged(Object source, STATUS status) {       if (source == mMapView && status == STATUS.INITIALIZED) {       LocationService ls = mMapView.getLocationService();       ls.setAutoPan(false);       ls.setLocationListener(new LocationListener() {        boolean locationChanged = false;        // Zooms to the current location when first GPS fix       // arrives.       public void onLocationChanged(Location loc) {       if (!locationChanged) {       locationChanged = true;       double locy = loc.getLatitude();       double locx = loc.getLongitude();       Point wgspoint = new Point(locx, locy);       Point mapPoint = (Point) GeometryEngine.project(wgspoint,          SpatialReference.create(4326),        mMapView.getSpatialReference());        Unit mapUnit = mMapView.getSpatialReference().getUnit();       double zoomWidth = Unit.convertUnits(        SEARCH_RADIUS, Unit.create(LinearUnit.Code.MILE_US), mapUnit);       Envelope zoomExtent = new Envelope(mapPoint, zoomWidth, zoomWidth);        mMapView.setExtent(zoomExtent);        GraphicsLayer gLayer = new GraphicsLayer();       PictureMarkerSymbol symbol = new            PictureMarkerSymbol(getResources().getDrawable(R.drawable.twiz_car_red));       Graphic graphic = new Graphic(mapPoint, symbol);       //Graphic point=new Graphic(new Point(x, y),new           SimpleMarkerSymbol(Color.CYAN,20,STYLE.CIRCLE));          gLayer.addGraphic(graphic);       mMapView .addLayer(gLayer);           }       }        public void onProviderDisabled(String arg0) {              }       public void onProviderEnabled(String arg0) {             }        public void onStatusChanged(String arg0, int arg1,       Bundle arg2) {           }         });       ls.start();       }    } });


回答3:

I've borrowed some code from here

private Point ToGeographic(Point pnt) {     double mercatorX_lon = pnt.getX();     double mercatorY_lat = pnt.getY();     if (Math.abs(mercatorX_lon) < 180 && Math.abs(mercatorY_lat) < 90)         return pnt;      if ((Math.abs(mercatorX_lon) > 20037508.3427892) || (Math.abs(mercatorY_lat) > 20037508.3427892))         return pnt;      double x = mercatorX_lon;     double y = mercatorY_lat;     double num3 = x / 6378137.0;     double num4 = num3 * 57.295779513082323;     double num5 = Math.floor((double)((num4 + 180.0) / 360.0));     double num6 = num4 - (num5 * 360.0);     double num7 = 1.5707963267948966 - (2.0 * Math.atan(Math.exp((-1.0 * y) / 6378137.0)));     mercatorX_lon = num6;     mercatorY_lat = num7 * 57.295779513082323;     return new Point(mercatorX_lon, mercatorY_lat); }  private Point ToWebMercator(Point pnt) {     double mercatorX_lon = pnt.getX();     double mercatorY_lat = pnt.getY();     if ((Math.abs(mercatorX_lon) > 180 || Math.abs(mercatorY_lat) > 90))         return pnt;      double num = mercatorX_lon * 0.017453292519943295;     double x = 6378137.0 * num;     double a = mercatorY_lat * 0.017453292519943295;      mercatorX_lon = x;     mercatorY_lat = 3189068.5 * Math.log((1.0 + Math.sin(a)) / (1.0 - Math.sin(a)));     return new Point(mercatorX_lon, mercatorY_lat); }

I make no claims of efficiency, but it's a starting point at least.



回答4:

Disclaimer: I'm not an expert in this, but want to try to help. :)

There is now an ArcGIS Stack Exchange site. There's more information being added all the time and is a nice consolidated resource compared to what is out there disbursed on the interwebs.

For frameworks, I recommend GeoTools for Android.

As an aside, QGIS for Android is an interesting project from Marco Bernasocchi which you may find helpful as a reference.

Hope you can find what you're looking for!



回答5:

i made a function that converts the two parameters of a location point to arcgis point :

private Point ConvertMyLocationPoint(final double x, final double y) {         Point wgspoint = new Point(x, y);         Point mapPoint = (Point) GeometryEngine.project(wgspoint, SpatialReference.create(4326),                 mMapView.getSpatialReference());          return mapPoint;         }


回答6:

//convert longitude and latitude to map point X Y

- (AGSPoint *)agsPointFromLatitude:(double)latitude longitude:(double)longitude   {       double mercatorX = longitude * 0.017453292519943295 * 6378137.0;      double a = latitude * 0.017453292519943295;       double mercatorY = 3189068.5 * log((1.0 + sin(a))/(1.0 - sin(a)));       AGSPoint *obj = [AGSPoint pointWithX:mercatorX y:mercatorY spatialReference:    [AGSSpatialReference   wgs84SpatialReference]];             return obj;   }


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!