It shouldn't be a problem to send 15 or so points to a geometry service to be projected in a single call.
Below is an example that generates 50 "random" lat, lon points (if you run this locally, provide a URL for a proxy page) and sends them to a geometry service hosted by Esri to be projected to web mercator:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=7,IE=9" />
<meta name="viewport" content="initial-scale=1, maximum-scale=1,user-scalable=no"/>
<title></title>
<link rel="stylesheet" type="text/css" href="http://serverapi.arcgisonline.com/jsapi/arcgis/2.5/js/dojo/dijit/themes/tundra/tundra.css">
<script src="http://serverapi.arcgisonline.com/jsapi/arcgis/?v=2.5" type="text/javascript"></script>
<script type="text/javascript">
dojo.require("esri.map");
dojo.require("esri.tasks.geometry");
esri.config.defaults.io.proxyUrl = "URL TO YOUR PROXY PAGE";
var map, gsvc, pt;
function init() {
var ext, layer;
ext = esri.geometry.geographicToWebMercator(new esri.geometry.Extent(-144.13, 7.98, -52.76, 68.89, new esri.SpatialReference({wkid: 4326})));
map = new esri.Map("map", { "extent": ext });
layer = new esri.layers.ArcGISTiledMapServiceLayer("http://services.arcgisonline.com/ArcGIS/rest/services/Canvas/World_Light_Gray_Base/MapServer");
map.addLayer(layer);
gsvc = new esri.tasks.GeometryService("http://tasks.arcgisonline.com/ArcGIS/rest/services/Geometry/GeometryServer");
dojo.connect(map, "onClick", projectPoints);
}
function projectPoints(evt) {
var pts, symbol, graphic, outSR, coordsTable;
map.graphics.clear();
pts = createPoints(evt.mapPoint);
symbol = new esri.symbol.SimpleMarkerSymbol().setStyle(esri.symbol.SimpleMarkerSymbol.STYLE_DIAMOND);
graphic = new esri.Graphic(evt.mapPoint, symbol);
outSR = new esri.SpatialReference({ wkid: 102100 });
map.graphics.add(graphic);
gsvc.project(pts, outSR, function(projected) {
console.log("gsvc returned: ", projected);
coordsTable = "<table><thead><th>x</th><th>y</th></thead><tbody>";
dojo.forEach(projected, function(p) {
coordsTable += "<tr><td>" + p.x.toFixed() + "</td><td>" + p.y.toFixed() + "</td></tr>";
});
coordsTable += "</tbody></table>";
dojo.byId("outCoords").innerHTML = coordsTable;
});
}
function createPoints(mp) {
var ext, width, height, numGraphics, latLonPts, i, randx, randy, pt;
ext = map.extent;
width = ext.xmax - ext.xmin;
height = ext.ymax - ext.ymin;
numGraphics = 50;
latLonPts = [];
for ( i=0; i<numGraphics; i++ ) {
randx = (Math.random() * width) + ext.xmin;
randy = (Math.random() * height) + ext.ymin,
pt = esri.geometry.webMercatorToGeographic(new esri.geometry.Point(randx, randy, map.spatialReference));
latLonPts.push(pt);
}
return latLonPts;
}
dojo.ready(init);
</script>
</head>
<body class="tundra">
<b>Click a location on the map to Project from LatLng -> Web Mercator:</b>
<div id="map" style="width:600px; height:400px; border:1px solid #000;"></div>
<div id="outCoords"></div>
</body>
</html>
Can you post the code showing how you're talking to the geometry service?
Additionally, there are built-in client side methods to do geographic --> web mercator and web mercator --> geographic conversions. No geometry service necessary.