Преобразование широты и долготы в esri arcGIS MapPoint

У меня возникли проблемы с преобразованием значений широты и долготы в Android esri arcGIS map Point. Вот мой код для получения значений широты и долготы из координат GPS:

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

теперь у меня есть значения широты и долготы. Теперь все, что мне нужно, - это преобразовать эти значения в действительные esri arcGIS MapPoint. Может кто-нибудь мне помочь?

Заранее спасибо.


person user1111781    schedule 10.01.2012    source источник


Ответы (6)


Предполагая, что вы используете ESRI Android API? Если да, создайте графический слой на своей карте. Затем создайте точечный объект

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

затем установите значения x / y:

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

затем добавьте myPoint к графическому объекту.

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

person Luke    schedule 20.01.2012

Да, это возможно. Но вы не используете диспетчер местоположения в ArcGis.

В ArcGIS есть предопределенный метод, такой как LocationListener, а именно: OnStatusChangedListener.

См. Приведенный ниже код для преобразования широты и долготы местоположения в 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();

     }
   }
});
person Hareesh    schedule 31.10.2012

Я позаимствовал код из здесь

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

Я не претендую на эффективность, но, по крайней мере, это отправная точка.

person J. Hoffman    schedule 13.08.2013
comment
действительно оооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо - person ROR; 01.07.2014

Отказ от ответственности: я не эксперт в этом, но хочу попытаться помочь. :)

Теперь существует сайт ArcGIS Stack Exchange. Все время добавляется больше информации, и это хороший консолидированный ресурс по сравнению с тем, что там размещено в Интернете.

Для фреймворков я рекомендую GeoTools для Android.

Кстати, QGIS для Android - интересный проект Марко Бернасоччи, который вы можете найти полезно в качестве справки.

Надеюсь, вы найдете то, что ищете!

person Mat Nadrofsky    schedule 10.01.2012

Я сделал функцию, которая преобразует два параметра точки местоположения в точку 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;    
    }
person wissamOueisMobileApps    schedule 13.01.2015

// конвертируем долготу и широту в точку 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;
  }
person Sanjay    schedule 26.09.2014