Get Even More Visitors To Your Blog, Upgrade To A Business Listing >>

Integrating AJAX with ArcGIS Server - II

Now lets take a look at AGSMap class mentioned earlier. Given below is the complete code for this class. Since I have added comments in between the code describing each part of the code, this should be self explanatory.


package com.esri.arcgis.sample;

import com.esri.arcgis.server.IServerConnection;
import com.esri.arcgis.server.ServerConnection;
import com.esri.arcgis.server.IServerObjectManager;
import com.esri.arcgis.server.IServerContext;

import com.esri.arcgis.carto.IMapServer;
import com.esri.arcgis.carto.IMapServerProxy;
import com.esri.arcgis.carto.IMapDescription;
import com.esri.arcgis.carto.IMapServerObjects;
import com.esri.arcgis.carto.IMapServerObjectsProxy;
import com.esri.arcgis.carto.IMap;
import com.esri.arcgis.carto.IMapProxy;
import com.esri.arcgis.carto.IMapDescriptionProxy;
import com.esri.arcgis.carto.MapDescription;
import com.esri.arcgis.carto.IImageDescription;
import com.esri.arcgis.carto.IImageDescriptionProxy;
import com.esri.arcgis.carto.ImageDescription;
import com.esri.arcgis.carto.IImageType;
import com.esri.arcgis.carto.IImageTypeProxy;
import com.esri.arcgis.carto.ImageType;
import com.esri.arcgis.carto.IImageDisplay;
import com.esri.arcgis.carto.IImageDisplayProxy;
import com.esri.arcgis.carto.ImageDisplay;
import com.esri.arcgis.carto.IMapImage;
import com.esri.arcgis.carto.IMapImageProxy;
import com.esri.arcgis.carto.MapImage;
import com.esri.arcgis.carto.IMapExtent;
import com.esri.arcgis.carto.IMapExtentProxy;
import com.esri.arcgis.carto.MapExtent;
import com.esri.arcgis.carto.IMapArea;
import com.esri.arcgis.carto.IMapAreaProxy;
import com.esri.arcgis.carto.esriImageFormat;
import com.esri.arcgis.carto.esriImageReturnType;
import com.esri.arcgis.carto.IImageResult;

import com.esri.arcgis.system.LongArray;
import com.esri.arcgis.system.ILongArray;
import com.esri.arcgis.system.ILongArrayProxy;

import com.esri.arcgis.geometry.IPoint;
import com.esri.arcgis.geometry.IPointCollection;
import com.esri.arcgis.geometry.IEnvelope;
import com.esri.arcgis.geometry.Envelope;
import com.esri.arcgis.geometry.IEnvelopeProxy;

import com.esri.arcgis.webcontrols.ags.data.*;

public class AgsMap {

public synchronized static String
getImageUrl(AGSWebContext context, int x, int y){
try{
//get IMapServer from AGSWebContext
IMapServer m_mapServer = context.getServer();
//QI to IMapServerObjects
IMapServerObjects m_mapServerObj =
new IMapServerObjectsProxy(m_mapServer);
// get IServerContext from AGSWebContext
IServerContext m_context = context.getServerContext();

IMap m_map = null;
//if there is a default map, get IMap
if (m_mapServer.getDefaultMapName() != null) {
m_map = new IMapProxy(m_mapServerObj.getMap(
m_mapServer.getDefaultMapName()));
} else return null;

//get Default MapDescription from AGSWebContext
IMapDescription m_mapDesc = context.getMapDescription(
m_mapServer.getDefaultMapName());
/*
create a new ImageType and set the properties
we are getting the image url, so make sure to
specify output directory in ArcCatalog
for the server object config being used in
this application
*/
IImageType m_imageType = new IImageTypeProxy(
m_context.createObject(ImageType.getClsid()));
m_imageType.setFormat(esriImageFormat.esriImagePNG);
m_imageType.setReturnType(
esriImageReturnType.esriImageReturnURL);

//create a new IImageDisplay
//set width and height same as that of the Map Control
//because we will be using it to convert pixel
//point to Map point
IImageDisplay m_imageDisplay = new IImageDisplayProxy(
m_context.createObject(ImageDisplay.getClsid()));
m_imageDisplay.setDeviceResolution(96D);
m_imageDisplay.setWidth(context.getWebMap().getWidth());
m_imageDisplay.setHeight(context.getWebMap().getHeight());

//set the above IImageDisplay and IImageType
// to IImageDescription
IImageDescription m_imageDesc = new IImageDescriptionProxy(
m_context.createObject(ImageDescription.getClsid()));
m_imageDesc.setDisplay(m_imageDisplay);
m_imageDesc.setType(m_imageType);

//convert pixel point into map point
//notice that we are using the above map
//description and image description
// in mapserver.toMapPoints method
ILongArray longArrayX = new ILongArrayProxy(
m_context.createObject(LongArray.getClsid()));
longArrayX.insert(0, x-10);
ILongArray longArrayY = new ILongArrayProxy(
m_context.createObject(LongArray.getClsid()));
longArrayY.insert(0, y+10);
longArrayX.insert(1,x+10);
longArrayY.insert(1,y-10);
IPointCollection pointColl = m_mapServer.toMapPoints(
m_mapDesc,
m_imageDesc.getDisplay(),
longArrayX,
longArrayY);
IPoint point1 = null;
IPoint point2 = null;
if (pointColl.getPointCount() > 0) {
point1 = pointColl.getPoint(0);
point2 = pointColl.getPoint(1);
}

//generate a small envelope based on map points
IEnvelope env = new IEnvelopeProxy(
m_context.createObject(Envelope.getClsid()));
env.setXMin(point1.getX());
env.setYMin(point1.getY());
env.setXMax(point2.getX());
env.setYMax(point2.getY());

//reset the Image size to 200X200
//this is the size of the magnified image
m_imageDesc.getDisplay().setWidth(200);
m_imageDesc.getDisplay().setHeight(200);

//set the new MapExtent based on the above envelope
IMapExtent mapExtent = new IMapExtentProxy(
m_context.createObject(MapExtent.getClsid()));
mapExtent.setExtent(env);

//create a new map description and set above
//extent and default LayerDescriptions to it
IMapDescription m_mapDesc1 = new IMapDescriptionProxy(
m_context.createObject(MapDescription.getClsid()));
IMapArea mapArea = new IMapAreaProxy(mapExtent);
m_mapDesc1.setMapArea(mapArea);
m_mapDesc1.setLayerDescriptions(
m_mapDesc.getLayerDescriptions());
m_mapDesc1.setName(m_mapServer.getDefaultMapName());

//export the map image and get its URL
IMapImage mapImage = m_mapServer.exportMapImage(
m_mapDesc1, m_imageDesc);
String url = mapImage.getURL();
//finally release the context
m_context.removeAll();
m_context.releaseContext();
return url;
}catch (Exception ex){
ex.printStackTrace();
return null;
}
}
}


This post first appeared on Geo Coding, please read the originial post: here

Share the post

Integrating AJAX with ArcGIS Server - II

×

Subscribe to Geo Coding

Get updates delivered right to your inbox!

Thank you for your subscription

×