Как преобразовать точку Android esri arcGIS в широту и долготу

Я пытаюсь получить широту и долготу прикосновения к Android esri arcGIS MapView.

        map.setOnSingleTapListener(new OnSingleTapListener() {

            private static final long serialVersionUID = 1L;

            public void onSingleTap(float x, float y) {
                System.out.println("x:" + x);
                System.out.println("y:" + y);
                // How to get Latitude Longitude coordinates of the point (x,y)?

            }
        });

Как получить координаты широты и долготы точки (x, y)?


person wildnove    schedule 18.04.2013    source источник


Ответы (4)


Самый простой способ:

Point p=map.toMapPoint(arg0, arg1);
System.out.println("X="+p.getX());
System.out.println("Y="+p.getY());

Переменная p будет иметь координаты, отображенные в MapView.

person Manuel Pires    schedule 21.05.2013
comment
Если я использую этот код, я не получу точное значение широты и долготы. - person NandaKumar; 10.06.2013
comment
Если вы хотите использовать WGS84, который дает вам широту и долготу, вам нужно сделать проекцию вашей точки. Пример: SpatialReference sp = SpatialReference.create(/*spatial number*/); Point aux = (Point) GeometryEngine.project(p, map.getSpatialReference(), sp);. Вы можете искать свою пространственную привязку на spatialreference.org. - person Manuel Pires; 10.06.2013
comment
Спасибо, Мануэль Пирес, я получил ответ - person NandaKumar; 11.06.2013

Если вы хотите преобразовать точку карты в широту/долготу, вам просто нужно следовать этому

Point mapPoint = mMapView.toMapPoint(point.getX(), point.getY());
//Here point is your MotionEvent point
SpatialReference spacRef = SpatialReference.create(4326);
//4326 is for Geographic coordinate systems (GCSs) 
Point ltLn = (Point)
GeometryEngine.project(mapPoint,mMapView.getSpatialReference(), spacRef ); 
//mMapView is your current mapview object

ltLn.getY() даст широту, а ltLn.getX() даст долготу

person yash    schedule 16.12.2015

Я устал от этого решения в kotlin, и оно работает, как и ожидалось.

       val sp = SpatialReference.create(4326)
       // where Location is the Point
       val locationPoint = GeometryEngine.project(location, sp) as Point
       val lat = locationPoint.x
       val lng = locationPoint.y
person Sandeep Dhami    schedule 24.06.2019
comment
Широта locationPoint.y, а долгота locationPoint.x, в противном случае это сработало для меня. - person Chris Shaw; 25.03.2020

map.setOnSingleTapListener(new OnSingleTapListener() {

            private static final long serialVersionUID = 1L;

            public void onSingleTap(float x, float y) {
                System.out.println("x:" + x);
                System.out.println("y:" + y);


Point p=map.toMapPoint(x,y );

 SpatialReference sp = SpatialReference.create(/*spatial number*/);
 Point aux = (Point) GeometryEngine.project(p, map.getSpatialReference(), sp);

System.out.println("latitude="+aux.getX());
System.out.println("longitude="+aux.getY());

            }
        });

для пространственного номера spacereference.org

person kiran    schedule 18.06.2013