5 votos

¿Cómo calcular la distancia entre dos puntos con esri.geometry en la API de ArcGIS para JavaScript?

La función getLength(punto1, punto2) debería calcular distancias entre dos puntos.

Cuando intento calcular la distancia entre puntos que tienen 100 metros entre ellos

p1 = new esri.geometry.Point(3997030.6690969253, 7444299.320646087, new esri.SpatialReference({ wkid: 102113 }));
Object
p2 = new esri.geometry.Point(3996951.455397143, 7444142.154020177, new esri.SpatialReference({ wkid: 102113 }));
Object
esri.geometry.getLength(p1, p2)
176.00045037719127

Estoy obteniendo 176 lo cual es incorrecto. La proyección es Mercator Web (WKID 102113).


Se descubrió que getLength utiliza solo el teorema de Pitágoras para calcular la longitud. Por lo tanto, devuelve la longitud en metros de proyección. ¿Cómo obtener la distancia en metros reales?

0 votos

Intenta usar la herramienta geoprocesador para comprobar tu distancia (esri.tasks.GeometryService.lengths()), tal vez quieras tener la distancia geodésica entre esos puntos, y el método getLength está contando la longitud recta entre los puntos (es solo un tiro al aire).

0 votos

Es 100 metros. La diferencia entre los dos métodos no debería ser de 76 metros. Esto es probablemente porque getLength no entiende la proyección. O tal vez no entiendo algo.

1 votos

5voto

Paul Hargreaves Puntos 1022

Web Mercator Auxiliary Sphere es WKID 102100

http://resources.arcgis.com/en/help/arcgisonline-content/index.html#//011q00000002000000

var polyline = {
    "paths":[[[3997030.6690969253, 7444299.320646087], [3996951.455397143, 7444142.154020177]]],
    "spatialReference":{"wkid":102100}
};
console.log(JSON.stringify(polyline));
polyline = new esri.geometry.Polyline(polyline);
console.log(JSON.stringify(polyline));
polyline = esri.geometry.webMercatorToGeographic(polyline);
console.log(JSON.stringify(polyline));
console.log(esri.geometry.geodesicLengths([polyline], esri.Units.METERS));
//output 99.93917832865446

6.1 cm short, ¿suficientemente bueno para el trabajo del gobierno?

2voto

Vladimir Dyuzhev Puntos 101

Acabo de revisarlo.

esri.geometry.getLength(p1, p2) está contando la distancia de esta manera:

longitud = sqrt((p2_X - p1_X)^2 + (p2_Y - P1_Y)^2)

así que es la distancia entre dos puntos en línea recta. Si deseas contar la distancia entre dos puntos en una línea geodésica deberías usar el servicio de geometría como en este ejemplo

0 votos

El algoritmo parece estar equivocado. Pero su problema no es que vaya en línea recta, sino que ignora la proyección.

0 votos

Realmente no necesitas el servicio de geometría. Aunque sería interesante probar la diferencia entre la API de JavaScript y el servicio de geometría.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X