I am trying to use openmap as a servlet to generate (map)images. I would like to send it params such as lat, lon, scale, height, width, fillColor and lineColor(for land), and background color. I am trying various methods but I am not having much luck. First, I checked the FAQ and found this in section 10.4:
"...Next, you need to wrap those components in a servlet container. Code for this has been posted on the openmap-users mailing list:
http://openmap.bbn.com/mailArchives/openmap-users/2004-04/2809.html"
However, this link no longer works.
Next, I noticed that my distro had an IIS folder with a service for this very purpose, but I could not get it up an running properly (not being an asp or .NET guy, this probably isn't the method for me anyway). Then, I tried the SimpleHttpImageServer in package com.bbn.openmap.image. That worked fine, but it does not allow changes to fillColor and lineColor. The last method I tried was to write my own Servlet (see code at end of this message) using a MapBean. This code works, but gives the following exception. Any assistance is appreciated. Thanks.
AWT blocker activation interrupted:
java.lang.InterruptedException
at java.lang.Object.wait(Native Method)
at java.lang.Object.wait(Unknown Source)
at sun.awt.AWTAutoShutdown.activateBlockerThread(Unknown Source)
at sun.awt.AWTAutoShutdown.notifyThreadBusy(Unknown Source)
at java.awt.EventQueue.initDispatchThread(Unknown Source)
at java.awt.EventQueue.postEvent(Unknown Source)
at java.awt.EventQueue.postEventPrivate(Unknown Source)
at java.awt.EventQueue.postEvent(Unknown Source)
at java.awt.EventQueue.invokeLater(Unknown Source)
at javax.swing.SwingUtilities.invokeLater(Unknown Source)
at com.bbn.openmap.util.SwingWorker$2.run(SwingWorker.java:122)
at java.lang.Thread.run(Unknown Source)
So, sometimes I see land and sometimes I just see the background.
---------------------------------------------------------
import java.io.IOException;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bbn.openmap.Environment;
import com.bbn.openmap.MapBean;
import com.bbn.openmap.image.*;
import com.bbn.openmap.layer.shape.ShapeLayer;
import com.bbn.openmap.proj.Mercator;
import com.bbn.openmap.proj.Projection;
import com.bbn.openmap.proj.ProjectionFactory;
public class GetMapImage extends HttpServlet {
//private ImageServer generator;
public static final String LAT_PARAM_NAME = "lat";
public static final String LON_PARAM_NAME = "lon";
public static final String SCALE_PARAM_NAME = "scale";
public static final String WIDTH_PARAM_NAME = "width";
public static final String HEIGHT_PARAM_NAME = "height";
public static final String BG_COLOR_PARAM_NAME = "bg";
public static final String PROJECTION_PARAM_NAME = "projection";
public static final String LAND_BORDER_COLOR_PARAM = "lineColor";
public static final String LAND_FILL_COLOR_PARAM = "fillColor";
//ImageServer parameters with default values
private String lat = "0.0";
private String lon = "0.0";
private String scale = "250000000";
private String width = "350";
private String height = "350";
private String bg = "FF89C5F9"; // skyblue
private String lineColor = "000000"; // black
private String fillColor = "BDDE83"; // light green
private String projection = "com.bbn.openmap.proj.Mercator";
Projection defaultProjection;
protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
// LineColor and FillColor are handled separately from other variables
// ( since they are projection independent)
Object o = req.getParameter(LAND_BORDER_COLOR_PARAM);
if(o != null)
lineColor = (String)o;
o = req.getParameter(LAND_FILL_COLOR_PARAM);
if(o != null)
fillColor = (String)o;
setParams(req); //override default properties with custom properties (servlet request params)
defaultProjection = initProjection();//configProperties);
// Create a MapBean
MapBean mapBean = new MapBean();
Properties shapeLayerProps = new Properties();
shapeLayerProps.put("prettyName", "Political Solid");
shapeLayerProps.put("lineColor", lineColor); //lineColor
shapeLayerProps.put("fillColor", fillColor); //fillColor
shapeLayerProps.put("shapeFile", "D:\\openmap-4.6.2\\share\\data\\shape\\dcwpo-browse.shp");
shapeLayerProps.put("spatialIndex", "D:\\openmap-4.6.2\\share\\data\\shape\\dcwpo-browse.ssx");
shapeLayer.setProperties(shapeLayerProps);
// Add the political layer to the map
mapBean.add(shapeLayer);
mapBean.setProjection(defaultProjection);
AcmeGifFormatter f = new AcmeGifFormatter();
byte[] image = f.getImageFromMapBean(mapBean);
res.setContentType("image/gif");
res.setContentLength(image.length);
res.getOutputStream().write(image);
}
private Projection initProjection(){//Properties properties) {
String projectionName = Environment.get(Environment.Projection, Mercator.MercatorName);
Class projectionClass = ProjectionFactory.getProjClassForName(projection);
return ProjectionFactory.makeProjection(projectionClass, Float.parseFloat(lat),
Float.parseFloat(lon), Float.parseFloat(scale),
Integer.parseInt(width), Integer.parseInt(height));
}
private void setParams(HttpServletRequest req) {
String tempVal = req.getParameter(LAT_PARAM_NAME);
if(tempVal != null) {
lat = tempVal;
}
tempVal = req.getParameter(LON_PARAM_NAME);
if(tempVal != null) {
lon = tempVal;
}
tempVal = req.getParameter(SCALE_PARAM_NAME);
if(tempVal != null) {
scale = tempVal;
}
tempVal = req.getParameter(WIDTH_PARAM_NAME);
if(tempVal != null) {
width = tempVal;
}
tempVal = req.getParameter(HEIGHT_PARAM_NAME);
if(tempVal != null) {
height = tempVal;
}
tempVal = req.getParameter(BG_COLOR_PARAM_NAME);
if(tempVal != null) {
bg = tempVal;
}
tempVal = req.getParameter(PROJECTION_PARAM_NAME);
if(tempVal != null) {
projection = tempVal;
}
}
private Properties createProperties() {
Properties props = new Properties();
props.put("openmap.Latitude", lat);
props.put("openmap.Longitude", lon);
props.put("openmap.Scale", scale);
props.put("openmap.Projection", projection);
props.put("openmap.Width", width);
props.put("openmap.Height", height);
props.put("openmap.BackgroundColor" , bg);
props.put("openmap.Height", height);
props.put("openmap.Height", height);
return props;
}
}
____________________________________________
Philip V. Monte
Software Engineer
Code 2514, Warfare Interoperability Branch
NAVSEA Warfare Centers Division Newport
(401) 832-5325
--
[To unsubscribe to this list send an email to "majdart_at_bbn.com"
with the following text in the BODY of the message "unsubscribe openmap-users"]
Received on Tue Apr 18 2006 - 09:22:19 EDT