"He descubierto que a pesar de la proyección definida (wkid), las extensiones se devuelven en coordenadas de metros con un origen de lat/lon 0,0 (frente a la costa de África)".
Con la API de Javascript de ArcGIS, el primer servicio de mapas añadido establece un sistema de coordenadas para todo el mapa. Si has añadido uno de los servicios de mapas de ESRI para un mapa base, es probable que sea uno que se haya creado usando el wkid 102100, que se ajusta a lo que has descrito. Cuando pones tu servicio de mapas encima de él, tus servicios se reproyectan para que encajen encima de este servicio. Para arreglar esto, necesitas crear tu propio mapa base del servicio de mapas en mosaico proyectado en el wkid que quieres, o usar el servicio de geometría para reproyectar puntos, como has hecho.
"Utilizo un servicio de Geometría para proyectarlos, sin embargo cuando el usuario navega alrededor del mundo, las coordenadas no se reinician, sólo siguen sumando, resultando en extensiones 'NaN' devueltas".
Aquí hay una función que podrías usar para fijar la extensión de algo que puedes usar para tu servicio de geometría:
function fixExtent(extent) {
// hard-coded full extent of the world, using wkid 102100.
var full = new esri.geometry.Extent(-20037508.3427892430765884088807,-19971868.8804086,20037508.3427892430765884088807,19971868.8804086, new esri.SpatialReference({ wkid:102100 }));
// calculate the extent size so that it fits within the normal extent
var xwidth = full.xmax - full.xmin;
var newXMin = extent.xmin;
while (newXMin < full.xmin) {
newXMin += xwidth;
}
while (newXMin > full.xmax) {
newXMin -= xwidth;
}
var newXMax = extent.xmin;
while (newXMax < full.xmin) {
newXMax += xwidth;
}
while (newXMax > full.xmax) {
newXMax -= xwidth;
}
// return a new geometry that is within the range of the full extent
return new esri.geometry.Extent(newXMin, extent.ymin, newXMax, extent.ymax, extent.spatialReference);
}
No sé cómo funcionará esto si comparas una extensión que cruza la línea de fecha. Espero que esto ayude.