Convert latitude and longitude to esri arcGIS MapPoint

I am having trouble converting latitude and longitude to an arcroid anchor point. Here is 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(); } 

I now have latitude and longitude values. Now I only need to convert these values ​​to a valid esri arcGIS MapPoint. Can anybody help me?

Thanks in advance.

+6
source share
6 answers

Suppose you are using the ESRI Android API? If so, create a graphics layer on your map. Then create a point feature

 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 graphic.

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

+6
source

Yes it is possible. But you are not using the location manager in ArcGis.

ArcGIS has a predefined method, such as LocationListener: OnStatusChangedListener.

See the code below to convert latitude and longitude locations to 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(); } } }); 
+6
source

I borrowed the code 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 do not pretend to be effective, but this is at least a starting point.

+5
source

Disclaimer: I am not an expert in this, but I want to help. :)

There is now an ArcGIS Stack Exchange site. There, information is being added more and more and is a good consolidated resource compared to what was spent on firewalls there.

For frameworks, I recommend GeoTools for Android.

As an aside, QGIS for Android is an interesting project from Marco Bernasocchi, which you can find as reference material.

Hope you can find what you are looking for!

+4
source

i made a function that converts two location point parameters to an 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; } 
+4
source

// convert longitude and latitude to point XX

 - (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; } 
0
source

Source: https://habr.com/ru/post/905614/


All Articles