2012-01-10 8 views
6

Tengo problemas para convertir los valores de latitud y longitud en android esri arcGIS map Point. Aquí está mi código para obtener los valores de latitud y longitud de coordenadas GPS:Convertir latitud y longitud en esri arcGIS MapPoint

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(); 
      } 

ahora tienen los valores de latitud y longitud. Ahora todo lo que necesito es convertir estos valores en esri arcGIS MapPoint válido. ¿Alguien puede ayudarme?

Gracias de antemano.

Respuesta

4

Descargo de responsabilidad: No soy un experto en esto, pero quiero tratar de ayudar. :)

Ahora hay un sitio ArcGIS Stack Exchange. Se agrega más información todo el tiempo y es un buen recurso consolidado en comparación con lo que se desembolsa en los interwebs.

Para los marcos, recomiendo GeoTools para Android.

Como un lado, QGIS for Android es un proyecto interesante de Marco Bernasocchi que puede serle útil como referencia.

¡Espero que encuentres lo que estás buscando!

6

¿Asumiendo que está utilizando la API de ESRI Android? Si es así, crea una capa de gráficos en tu mapa. A continuación, crear un objeto de punto

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

continuación, establezca la valores X/Y:

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

luego añadir myPoint para el objeto gráfico.

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

6

Sí, es posible. Pero no usa el administrador de ubicación en ArcGis.

ArcGIS tiene el método predefinido como LocationListener, es decir: OnStatusChangedListener.

Vea el siguiente código para convertir latitud y longitud de ubicación en 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(); 

    } 
    } 
}); 
5

me ha pedido prestado algo de código de 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); 
} 

hago ninguna demanda de la eficiencia, pero es un punto de partida, al menos.

+0

realmente impresionante sooooooooooooooooooooo – ROR

0

// convertir longitud y latitud para mapear el punto 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; 
    } 
4

hice una función que convierte los dos parámetros de un punto de ubicación del punto de ArcGIS:

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;  
    } 
Cuestiones relacionadas