arcgissamples\scenario\map\InternetConnectionInfo.java
/* Copyright 2010 ESRI * * All rights reserved under the copyright laws of the United States * and applicable international laws, treaties, and conventions. * * You may freely redistribute and use this sample code, with or * without modification, provided you include the original copyright * notice and use restrictions. * * See the use restrictions. * */ package arcgissamples.scenario.map; import java.io.IOException; import java.util.Hashtable; import com.esri.arcgis.carto.IMapDescription; import com.esri.arcgis.carto.IMapServerInfo; import com.esri.arcgis.carto.ImageDescription; import com.esri.arcgis.carto.ImageDisplay; import com.esri.arcgis.carto.ImageType; import com.esri.arcgis.carto.MapExtent; import com.esri.arcgis.carto.MapServerIP; import com.esri.arcgis.carto.esriImageFormat; import com.esri.arcgis.carto.esriImageReturnType; import com.esri.arcgis.geometry.Envelope; import com.esri.arcgis.geometry.IPoint; import com.esri.arcgis.geometry.IPointCollection; import com.esri.arcgis.gisclient.AGSServerObjectName; import com.esri.arcgis.system.EngineInitializer; import com.esri.arcgis.system.LongArray; public class InternetConnectionInfo extends MapServerConnectionInfo { private Hashtable<String, IMapDescription> mapDescriptionTable = null; public InternetConnectionInfo() { } public void init() { try { if(serverObjectstable == null) return; //get name object AGSServerObjectName mapServerName = (AGSServerObjectName)serverObjectstable.get(mapConfigurationName); MapServerIP agsServerObject = (MapServerIP)mapServerName.open(); //get map server server = agsServerObject; resetMapInfo(); } catch (Exception e) { e.printStackTrace(); stop(); } } /**Returns mapdescription object for particular map * @param activeMap * @return IMapDescription */ public void setExtent(Envelope env) { try { MapExtent mapExtent = new MapExtent(); mapExtent.setExtent(env); getMapDescription(activeMap).setMapArea(mapExtent); } catch (IOException e) { e.printStackTrace(); } } /**Returns the current extent * @return */ public Envelope getExtent() { try { return (Envelope) getMapDescription(activeMap).getMapArea().getExtent(); } catch (IOException ex) { return null; } } /**Method to reset the map information. * Normally used when new map configuration is selected */ public void resetMapInfo() { try { if (mapDescriptionTable == null) { mapDescriptionTable = new Hashtable<String, IMapDescription>(); } mapDescriptionTable.clear(); activeMap = server.getDefaultMapName(); for (int i = 0; i < server.getMapCount(); i++) { String name = server.getMapName(i); IMapServerInfo info = server.getServerInfo(name); IMapDescription mapDescription = info.getDefaultMapDescription(); mapDescriptionTable.put(name, mapDescription); } } catch (IOException ex) { } } /** Creates new envelope * */ public Envelope createNewEnvelope() { Envelope envelope = null; try { envelope = new Envelope(); } catch (IOException ex) { } return envelope; } /* @param activeMap * @return IMapDescription */ public IMapDescription getMapDescription(String activeMap) { return ( (IMapDescription) mapDescriptionTable.get(activeMap)); } /**Sets the extent and exports the map image. * @param envelope * @return String containg the url */ public byte[] exportImage(Envelope envelope) { this.setExtent(envelope); return exportImage(); } /**Exports the map image. * @param envelope * @return String containg image location */ public synchronized byte[] exportImage() { try { if(imageDescription == null) imageDescription = new ImageDescription(); if(imageType == null) { imageType = new ImageType(); } if(imageDisplay == null) { imageDisplay= new ImageDisplay(); } imageDisplay.setDeviceResolution(dpi); imageDisplay.setHeight(imageHeight); imageDisplay.setWidth(imageWidth); imageType.setFormat(esriImageFormat.esriImageJPG); imageDescription.setDisplay(imageDisplay); imageType.setReturnType(esriImageReturnType.esriImageReturnMimeData); imageDescription.setType(imageType); mapImage = server.exportMapImage(getMapDescription(activeMap), imageDescription); return mapImage.getMimeData(); } catch (IOException ex) { ex.printStackTrace(); return null; } } /**Converts an Envelope screen location to a map coordinate with Envelope as input * @param rect Envelope * @return IEnvelope with the transformed points */ public Envelope transformScreenToMap(Envelope1 rect) { com.esri.arcgis.geometry.Envelope env = null; try { env = new com.esri.arcgis.geometry.Envelope(); LongArray longArrayX, longArrayY; IPointCollection p1; longArrayX = new LongArray(); longArrayY = new LongArray(); longArrayX.add((int)rect.x); longArrayY.add((int)rect.y); longArrayX.add((int)(rect.x + rect.width)); longArrayY.add((int)(rect.y + rect.height)); p1 = server.toMapPoints(getMapDescription(activeMap), imageDisplay, longArrayX, longArrayY); env.setXMin(p1.getPoint(0).getX()); env.setYMin(p1.getPoint(1).getY()); env.setXMax(p1.getPoint(1).getX()); env.setYMax(p1.getPoint(0).getY()); }catch (IOException ex) {} return env; } /**Converts an Envelope screen location to a map coordinate * @param int x * @param int y * @return IPoint */ public IPoint transformScreenToMap(int x, int y) { try { LongArray longArray1 = new LongArray(); longArray1.add(x); LongArray longArray2 = new LongArray(); longArray2.add(y); IPointCollection p = server.toMapPoints(getMapDescription(activeMap), imageDisplay, longArray1, longArray2); return p.getPoint(0); } catch (IOException ex) { return null; } } /** In case of pooled objects, creates servercontext, loads the mapDescriptions * and imagedescription.For non pooled objects resets the mapdescription * Applicable only in case of LAN Connection */ public void activate() { //do nothing } /**Releases context and save mapdescription and imagedescription objects * Applicable only in case of LAN Connection */ public void passivate() { //do nothing } /**Stops the map server. Frees all the resources used by the server. */ public void stop() { try { if (mapDescriptionTable != null) mapDescriptionTable.clear(); if(serverObjectstable != null) serverObjectstable.clear(); EngineInitializer.trackObjectsInCurrentThread(); EngineInitializer.releaseAllInCurrentThread(); } catch (Exception e) { } } }