import java.awt.BorderLayout;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;
import java.io.IOException;
import com.bbn.openmap.MapBean;
import com.bbn.openmap.PropertyHandler;
import com.bbn.openmap.gui.OpenMapFrame;
import com.bbn.openmap.layer.shape.ShapeLayer;
import com.bbn.openmap.proj.Orthographic;
import com.bbn.openmap.proj.coords.LatLonPoint;
/**
* <h1>MapFrame</h1>
* TODO
* <p>
*
* @author tfielder
* @since 2019-07-22
* <p>
*/
public class MapFrame extends OpenMapFrame
{
/* #Region Constants */
private static final long serialVersionUID = 1L;
public static final int SPLITPANE_DIVLOC = Integer.parseInt(System.getProperty("screenWidth")) / 3;
public static final int SPLITPANE_DIVSIZE = 5;
public static final String MAP_CONFIG_FILE = "map/openmap.properties";
private static final LatLonPoint DEFAULT_CENTER = new LatLonPoint.Double(0.0, 0.0);
private static final float DEFAULT_SCALE = 200000000.0f;
private static final float SCALE_DOWN = 0.8f;
private static final float SCALE_UP = 1.25f;
/* #Region Globals */
private LatLonPoint gPoint;
private boolean gDragging;
private DrawLayer gDrawLayer = new DrawLayer();
private int gDrawMode = 0;
/* #Region Constructors */
public MapFrame()
{
final MapBean map = new MapBean();
map.add(gDrawLayer);
PropertyHandler properties = null;
try
{
properties = new PropertyHandler.Builder().setPropertiesFile(System.getProperty("openmap.properties")).build();
}
catch (IOException ioEx)
{
Logging.logError(ioEx, "Failed to load map properties file");
}
ShapeLayer layer = new ShapeLayer();
if (properties != null)
{
layer.setProperties(properties.getProperties());
}
layer.setAddAsBackground(true);
map.add(layer);
map.setCenter(DEFAULT_CENTER);
map.setScale(DEFAULT_SCALE);
map.setDoubleBuffered(true);
map.addMouseListener(new MouseListener()
{
@Override
public void mouseClicked(MouseEvent event)
{
}
@Override
public void mouseEntered(MouseEvent event)
{
}
@Override
public void mouseExited(MouseEvent event)
{
}
@Override
public void mousePressed(MouseEvent event)
{
if (gDrawMode == 0)
{
gPoint = new LatLonPoint.Double(map.getCoordinates(event));
gDrawMode = event.getButton();
if (event.getButton() == MouseEvent.BUTTON1)
{
gDragging = true;
}
}
}
@Override
public void mouseReleased(MouseEvent event)
{
if (event.getButton() == gDrawMode)
{
gDragging = false;
gDrawLayer.clear();
gDrawMode = 0;
}
}
});
map.addMouseMotionListener(new MouseMotionListener()
{
@Override
public void mouseDragged(MouseEvent event)
{
map.setScale(map.getScale());
if (gDrawMode == 1)
{
if (gDragging)
{
LatLonPoint coords = new LatLonPoint.Double(map.getCoordinates(event));
map.setCenter(
new LatLonPoint.Double(
new LatLonPoint.Double(map.getCenter()).getLatitude()
- (coords.getLatitude() - gPoint.getLatitude()),
new LatLonPoint.Double(map.getCenter()).getLongitude()
- (coords.getLongitude() - gPoint.getLongitude())));
map.setScale(map.getScale());
}
}
if (gDrawMode > 1)
{
gDrawLayer.draw(gPoint, new LatLonPoint.Double(map.getCoordinates(event)), gDrawMode == 2);
}
map.setScale(map.getScale());
}
@Override
public void mouseMoved(MouseEvent event)
{
gDrawLayer.clear();
gDrawLayer.draw(new LatLonPoint.Double(map.getCoordinates(event)));
map.setScale(map.getScale());
}
});
map.addMouseWheelListener(new MouseWheelListener()
{
@Override
public void mouseWheelMoved(MouseWheelEvent event)
{
map.setScale(map.getScale() * (event.getPreciseWheelRotation() > 0.0 ? SCALE_UP : SCALE_DOWN));
}
});
map.setProjection(new Orthographic(new LatLonPoint.Double(map.getCenter()), map.getScale(), map.getWidth(), map.getHeight()));
getContentPane().add(map, BorderLayout.CENTER);
}
}
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import com.bbn.openmap.Layer;
import com.bbn.openmap.event.ProjectionEvent;
import com.bbn.openmap.omGraphics.OMCircle;
import com.bbn.openmap.omGraphics.OMGraphicList;
import com.bbn.openmap.omGraphics.OMLine;
import com.bbn.openmap.omGraphics.OMRect;
import com.bbn.openmap.omGraphics.OMText;
import com.bbn.openmap.proj.Length;
import com.bbn.openmap.proj.coords.LatLonPoint;
/**
* <h1>DrawLayer</h1>
* TODO
* <p>
*
* @author tfielder
* @since 2019-07-22
* <p>
*/
public class DrawLayer extends Layer
{
/* #Region Constants */
private static final long serialVersionUID = 1L;
/* #Region Globals */
protected OMGraphicList gGraphic;
/* #Region Constructors */
public DrawLayer()
{
gGraphic = new OMGraphicList();
}
/* #Region Methods */
public void clear()
{
gGraphic.clear();
repaint();
}
public void draw(LatLonPoint start, LatLonPoint end, boolean circle)
{
gGraphic.clear();
if (circle)
{
OMCircle shape =
new OMCircle(start.getLatitude(), start.getLongitude(), Length.DECIMAL_DEGREE.fromRadians(start.distance(end)));
shape.setStroke(new BasicStroke(2));
shape.setLinePaint(Color.RED);
gGraphic.add(shape);
OMLine radius =
new OMLine(
start.getLatitude(),
start.getLongitude(),
end.getLatitude(),
end.getLongitude(),
OMLine.LINETYPE_GREATCIRCLE);
radius.setStroke(new BasicStroke(2));
radius.setLinePaint(Color.RED);
gGraphic.add(radius);
OMText center =
new OMText(
start.getLatitude(),
start.getLongitude(),
0.0f,
0.0f,
String.format("%.2f, %.2f", start.getLatitude(), start.getLongitude()),
OMText.DEFAULT_FONT,
OMText.JUSTIFY_CENTER);
center.setLinePaint(Color.BLACK);
gGraphic.add(center);
OMText dist =
new OMText(
(start.getLatitude() + end.getLatitude()) / 2.0,
(start.getLongitude() + end.getLongitude()) / 2.0,
0.0f,
0.0f,
String.format("%.2fkm", Length.KM.fromRadians(start.distance(end))),
OMText.DEFAULT_FONT,
OMText.JUSTIFY_CENTER);
dist.setLinePaint(Color.BLACK);
gGraphic.add(dist);
}
else
{
OMRect shape =
new OMRect(
start.getLatitude(),
start.getLongitude(),
end.getLatitude(),
end.getLongitude(),
OMRect.LINETYPE_GREATCIRCLE);
shape.setStroke(new BasicStroke(2));
shape.setLinePaint(Color.RED);
gGraphic.add(shape);
OMText text =
new OMText(
start.getLatitude(),
start.getLongitude(),
0.0f,
-5.0f,
String.format("%.2f, %.2f", start.getLatitude(), start.getLongitude()),
OMText.DEFAULT_FONT,
OMText.JUSTIFY_CENTER);
text.setLinePaint(Color.BLACK);
gGraphic.add(text);
text =
new OMText(
end.getLatitude(),
end.getLongitude(),
-50.0f,
15.0f,
String.format("%.2f, %.2f", end.getLatitude(), end.getLongitude()),
OMText.DEFAULT_FONT,
OMText.JUSTIFY_CENTER);
text.setLinePaint(Color.BLACK);
gGraphic.add(text);
}
repaint();
}
public void draw(LatLonPoint center)
{
gGraphic.clear();
OMText text =
new OMText(
center.getLatitude(),
center.getLongitude(),
0.0f,
-5.0f,
String.format("%.2f, %.2f", center.getLatitude(), center.getLongitude()),
OMText.DEFAULT_FONT,
OMText.JUSTIFY_CENTER);
text.setLinePaint(Color.BLACK);
gGraphic.add(text);
repaint();
}
@Override
public void paint(Graphics g)
{
gGraphic.render(g);
}
/**
* <h1>projectionChanged</h1>
* TODO
* <p>
*
* @see com.bbn.openmap.event.ProjectionListener#projectionChanged(com.bbn.openmap.event.ProjectionEvent)
*/
@Override
public void projectionChanged(ProjectionEvent event)
{
gGraphic.project(event.getProjection(), true);
repaint();
}
}prettyName=Political Solid
lineColor=000000
fillColor=BDDE83
shapeFile=map/shape/dcwpo-browse.shp
spatialIndex=map/shape/dcwpo-browse.ssx