`
hcmfys
  • 浏览: 356362 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

java 地图查看器

    博客分类:
  • java
阅读更多
 
/**
 * @(#)GisApp.java
 * hcmfys@163.com
 * GisApp application
 * @author
 * @version 1.00 2010/7/25
 */

import com.mapinfo.beans.tools.*;
import com.mapinfo.beans.vmapj.VisualMapJ;
import com.mapinfo.mapj.LabelProperties;
import com.mapinfo.mapj.Layer;
import com.mapinfo.mapj.Layers;
import com.mapinfo.mapj.MapJ;
import com.mapinfo.util.DoublePoint;

import javax.swing.*;
import javax.swing.filechooser.FileNameExtensionFilter;
import java.awt.*;
import java.awt.event.*;
import java.beans.PropertyVetoException;
import java.io.IOException;
import java.util.Enumeration;
import java.util.concurrent.atomic.AtomicReference;


public class GisApp extends JFrame {

    private VisualMapJ mapCtrl = null;
    private JStatusBar myBar = null;
    private MapToolBar toolBar;
    private JPopupMenu popMenu = null;
    private final int MOVE2LEFT = 1;
    private final int MOVE2RIGHT = 2;
    private final int MOVE2UP = 3;
    private final int MOVE2DOWN = 4;

    public GisApp() {

        this.setSize(1000, 468);
        this.setTitle("java gis ");
        initToolBar();
        initContextMenu();
        makeCenter(this);
        mapCtrl = new VisualMapJ();
        mapCtrl.addMouseWheelListener(new MouseWheelListener() {
            public void mouseWheelMoved(MouseWheelEvent e) {

                int type = e.getWheelRotation();
                int x = e.getX();
                int y = e.getY();
                try {
                    double zoom = mapCtrl.getMapJ().getZoom();
                    myBar.getStatus(1).setText(String.format("zoom=%f", zoom));
                    DoublePoint dp = mapCtrl.getMapJ().transformScreenToNumeric(new DoublePoint(x, y));
                    myBar.getStatus(1).setText(String.format("zoom=%f", zoom));
                    if (type == -1) {
                        zoom = zoom / 2;
                        mapCtrl.getMapJ().setZoomAndCenter(zoom, dp);
                        mapCtrl.repaint();
                    } else {
                        zoom = zoom * 2;
                        mapCtrl.getMapJ().setZoomAndCenter(zoom, dp);
                        mapCtrl.repaint();
                    }
                }
                catch (Exception ex) {
                }
            }
        }

        );
        mapCtrl.addMouseMotionListener(new

                MouseMotionAdapter() {
                    public void mouseMoved(MouseEvent e) {
                        int x = e.getX();
                        int y = e.getY();
                        try {
                            DoublePoint dp = mapCtrl.getMapJ().transformScreenToNumeric(new DoublePoint(x, y));
                            myBar.getStatus(0).setText(String.format("x=%f y=%f", dp.x, dp.y));
                            double zoom = mapCtrl.getMapJ().getZoom();
                            myBar.getStatus(1).setText(String.format("zoom=%f", zoom));
                        } catch (Exception e1) {
                            e1.printStackTrace();
                        }
                    }
                }

        );
        mapCtrl.addMouseListener(new

                MouseAdapter() {
                    public void mouseClicked(MouseEvent e) {
                        if (e.getButton() == e.BUTTON3) {
                            popMenu.show(GisApp.this, e.getX(), e.getY());
                        }
                    }
                }

        );

        setLayerAttribute(mapCtrl.getMapJ());
        this.setLayout(new BorderLayout());
        this.getContentPane().add(toolBar, BorderLayout.NORTH);
        this.getContentPane().add(mapCtrl, BorderLayout.CENTER);
        initStatusBar();
        this.setVisible(true);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }


    private void initStatusBar() {
        JPanel sPanel = new JPanel();
        sPanel.setSize(600, 30);
        int widths[] = {200, 150, 150, 160};
        myBar = new JStatusBar(widths, sPanel);
        this.getContentPane().add(sPanel, BorderLayout.SOUTH);
    }

    private void initToolBar() {
        toolBar = new MapToolBar();
        JButton btJb;
        toolBar.removeAllMapTools();
        toolBar.add(btJb = new JButton("open"));
        toolBar.add(new ZoomInMapTool());
        toolBar.add(new ZoomOutMapTool());
        toolBar.add(new PanMapTool());
        toolBar.add(new RecenterMapTool());
        toolBar.add(new RulerMapTool());
        toolBar.add(new InfoMapTool());
        toolBar.add(new RectangleSelectionMapTool());
        toolBar.add(new RadiusSelectionMapTool());
        btJb.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                JFileChooser chooser = new JFileChooser();
                FileNameExtensionFilter filter = new FileNameExtensionFilter("GST files", "gst");
                chooser.setFileFilter(filter);
                int returnVal = chooser.showOpenDialog(GisApp.this);
                if (returnVal == JFileChooser.APPROVE_OPTION) {
                    String fileName = chooser.getSelectedFile().getAbsolutePath();
                    String dir = chooser.getCurrentDirectory().getAbsolutePath();
                    try {
                        mapCtrl.getMapJ().loadGeoset(fileName, dir, null);
                        mapCtrl.repaint();
                        Enumeration toolList = toolBar.getMapTools();
                        while (toolList.hasMoreElements()) {
                            MapTool tool = (MapTool) toolList.nextElement();
                            try {
                                if (tool instanceof PanMapTool) {
                                    tool.setSelected(true);
                                    break;
                                }
                            } catch (PropertyVetoException e1) {
                                e1.printStackTrace();
                            }
                        }
                    } catch (IOException e1) {
                        e1.printStackTrace();
                    }
                }

            }
        });
    }

    private void makeCenter(Component c) {
        int x;
        int y;
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        this.setSize(screenSize.width, screenSize.height - toolBar.getHeight() - 1);
        x = screenSize.width / 2 - c.getWidth() / 2;
        y = screenSize.height / 2 - c.getHeight() / 2;
        c.setLocation(x, y);

    }

    private void zoomIn() {
        double zoom = 0;
        try {
            zoom = mapCtrl.getMapJ().getZoom();
            myBar.getStatus(1).setText(String.format("zoom=%f", zoom));
            zoom = zoom / 2;
            mapCtrl.getMapJ().setZoom(zoom);
            mapCtrl.repaint();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void zoomOut() {
        double zoom = 0;
        try {
            zoom = mapCtrl.getMapJ().getZoom();
            myBar.getStatus(1).setText(String.format("zoom=%f", zoom));
            zoom = zoom * 2;
            mapCtrl.getMapJ().setZoom(zoom);
            mapCtrl.repaint();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * @param curTool
     */
    private void selectTool(MapTool curTool) {
        Enumeration toolList = toolBar.getMapTools();
        while (toolList.hasMoreElements()) {
            MapTool tool = (MapTool) toolList.nextElement();
            try {
                if (tool.toString().equals(curTool.toString())) {
                    tool.setSelected(true);
                    break;
                }
            } catch (PropertyVetoException e1) {
                e1.printStackTrace();
            }
        }
    }

    /**
     * @param actionType
     */

    private void moveAction(int actionType) {
        try {
            double x = mapCtrl.getMapJ().getCenter().x;
            double y = mapCtrl.getMapJ().getCenter().y;
            double dx = mapCtrl.getMapJ().getBounds().width() / 2;
            double dy = mapCtrl.getMapJ().getBounds().height() / 2;
            switch (actionType) {
                case MOVE2LEFT:
                    x += dx;
                    break;
                case MOVE2RIGHT:
                    x -= dx;
                    break;
                case MOVE2UP:
                    y -= dy;
                    break;
                case MOVE2DOWN:
                    y += dy;
                    break;
                default:
                    break;
            }
            mapCtrl.getMapJ().setCenter(new DoublePoint(x, y));
            mapCtrl.repaint();

        } catch (Exception ex) {
        }
    }

    private void setLayerAttribute(MapJ mapj) {
        Layers lys = mapj.getLayers();
        int len = lys.size();
        for (int i = 0; i < len; i++) {
            Layer la = lys.elementAt(i);
            LabelProperties lp = new LabelProperties(la.getLabelProperties());
            com.mapinfo.graphics.Rendition re = lp.getRendition();
            re.setValue(com.mapinfo.graphics.Rendition.FONT_FAMILY, "宋体");
            lp.setRendition(re);
            la.setVisible(true);
        }
    }

    private void initContextMenu() {
        popMenu = new JPopupMenu();
        JMenuItem zoomIn = new JMenuItem("放大");
        zoomIn.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                zoomIn();
            }
        });
        popMenu.add(zoomIn);
        JMenuItem zoomOut = new JMenuItem("缩小");
        zoomOut.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                zoomOut();
            }
        });
        popMenu.add(zoomOut);
        popMenu.addSeparator();
        JMenuItem move2Left = new JMenuItem("向左移动");
        move2Left.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                moveAction(MOVE2LEFT);
            }
        });
        popMenu.add(move2Left);
        JMenuItem move2Right = new JMenuItem("向右移动");
        move2Right.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                moveAction(MOVE2RIGHT);
            }
        });
        popMenu.add(move2Right);
        JMenuItem move2Up = new JMenuItem("向上移动");
        move2Up.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                moveAction(MOVE2UP);
            }
        });
        popMenu.add(move2Up);
        JMenuItem move2Down = new JMenuItem("向下移动");
        move2Down.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                moveAction(MOVE2DOWN);
            }
        });
        popMenu.add(move2Down);
    }


    public static void main(String[] args) {
        GisApp app = new GisApp();
        /*
        ImageRequestComposer imageRC = ImageRequestComposer.create(mapj, 256, Color.blue, "image/gif");
        MapXtremeImageRenderer renderer =new MapXtremeImageRenderer("http://localhost:8080/mapxtreme45/servlet/mapxtreme");
        renderer.render(imageRC);
        renderer.toFile("e:/12.gif");
     */
    }
}

 

  • 大小: 32.4 KB
分享到:
评论

相关推荐

    java ME 游戏地图编辑器

    6. **缩放与平移**:为了方便查看和编辑大地图,编辑器通常会提供缩放和平移功能。 7. **预览功能**:在编辑过程中实时预览地图,确保设计效果符合预期。 8. **资源管理**:集成资源管理器,方便查找和管理使用的...

    java游戏地图编辑器

    Java游戏地图编辑器是一款专为游戏开发者和爱好者设计的工具,用于创建和编辑游戏中的地图。这个编辑器基于Java编程语言开发,具有跨平台的特性,可以在多种操作系统上运行,如Windows、Mac OS X和Linux。它提供了一...

    基于Java的地图工具 学习

    - **桌面应用**:在桌面环境中,OpenMap可以作为地图查看器,用于数据分析和报告制作。 - **移动应用**:虽然OpenMap主要针对桌面环境,但通过Java ME或Android的Java API,可以将其功能应用于移动设备。 **6. 社区...

    地图编辑器的实现Java版本

    6. **缩放和平移**:为了适应不同大小的屏幕和查看范围,地图编辑器必须支持缩放和平移操作。这通常通过双指缩放或滑动屏幕来实现。 7. **渲染优化**:由于J2ME平台资源有限,渲染效率至关重要。可以使用视口...

    JAVA 地图编辑器MAPWIN

    在地图编辑领域,理解如何使用JAVA地图编辑器如MAPWIN是非常重要的技能,这可以帮助专业人员在城市规划、地理信息分析、环境研究等多个领域进行高效的数据处理和可视化工作。通过深入学习和实践,用户能够充分利用...

    JavaRPG游戏-地图编辑器

    "JavaRPG游戏-地图编辑器"正是这样一个专为Java RPG游戏设计的地图编辑软件。 该编辑器的主要功能可能包括以下几点: 1. **图形化界面**:地图编辑器通常配备了一个用户友好的图形界面,使得开发者可以通过拖拽、...

    Minecraft(我的世界)地图编辑器

    1. **Minecraft地图编辑器**:地图编辑器,通常称为MCEdit,是为《我的世界》设计的一款强大的第三方工具,它允许玩家编辑和修改游戏内的地图数据。通过地图编辑器,用户可以轻松地进行地形改造、结构创建、物品布置...

    电子地图 java项目

    在本项目中,“电子地图 java项目”是一个使用Java编程语言实现的软件模块,旨在提供一个交互式的地图界面,用户可以通过该界面查看地理位置、导航、搜索地点等。该项目不仅有助于提升开发者对Java技术的理解,也是...

    2DJAVA地图编辑器

    "2DJAVA地图编辑器"是一款专为手机游戏设计的地图编辑工具,支持2D和2.5D(即伪3D)地图的制作。这款编辑器允许开发者和游戏设计师们轻松创建、编辑并管理游戏中的地形、物体和交互元素,为玩家提供丰富多彩的游戏...

    地图下载器_java包

    这个项目可能是一个用Java实现的程序,能够从特定的地图服务提供商下载地图数据,供用户离线查看或者进行其他地理信息相关的分析。 在Java编程中,主要涉及到以下几个关键知识点: 1. **网络编程**:地图数据的...

    java js 不规则区域地图 中国 省份 加亮图

    具体的内容需要解压后查看,通常会包括JSON或XML文件存储地图数据,CSS文件定义样式,以及可能的图片或SVG文件用于图形渲染。 总结来说,实现"java js 不规则区域地图 中国 省份 加亮图"这一功能,开发者需要掌握...

    地图 地图编辑器

    1. **源代码**:可能包含了地图编辑器的完整源代码,用某种编程语言(如C++, Java, Python或JavaScript)编写,用于展示地图编辑器的实现逻辑。 2. **文档**:可能包括用户手册、开发者指南或API参考,帮助用户理解...

    游戏试做,推箱子带地图编辑器

    2. **用户交互**:玩家需要能够移动角色和查看地图状态,因此需要设计友好的用户界面,包括键盘控制、地图显示和提示信息。 3. **地图编辑器设计**:地图编辑器应包含画布、工具栏、属性设置等元素,让玩家可以自由...

    java源码包---java 源码 大量 实例

     Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码截图如上所示。 Java 数字签名、数字证书生成源码 2个目标文件 摘要:JAVA源码,...

    MinedMap:Minecraft地图渲染器和查看器

    采矿地图 渲染您的世界的精美地图! 将它们放在网络服务器上,然后在浏览器...一个查看器,用于在基于的浏览器中显示和导航地图。 地图渲染器受到极大启发,但已从头开始以C ++实现,以实现最高性能。 查看者希望地图

    Java读取ArcGIS切片包数据

    在IT行业中,尤其是在地理信息系统(GIS)开发领域,Java是一种常用的语言,用于处理各种类型的数据,包括空间数据...通过上述步骤,开发者可以实现自定义的GIS应用,比如离线地图查看器或者结合3D元素的复杂模拟系统。

    tiled地图编辑器

    只需双击即可启动,无需复杂的安装过程,这使得Tiled地图编辑器能在任何支持Java的平台上快速运行,极大地拓宽了其适用范围。 `mapwin和Tiled游戏地图编辑器使用指南.rar`包含了Tiled的使用教程。这份指南详细阐述...

    各种离线地图下载工具

    在没有网络连接的情况下,这些工具能够帮助用户提前下载地图数据,以便在需要时查看和使用。标题中的"各种离线地图下载工具"表明这是一类能够支持多种地图源的软件,能够满足用户对不同地图平台的需求。 描述中提到...

    GoogleMap瓦片地图下载器

    这款下载器使得用户能够在离线环境下查看和使用谷歌地图的部分功能。 在互联网上,地图数据通常被分割成小块的图像,称为瓦片(Tile),这种分块方式便于高效传输和加载。GoogleMap瓦片地图下载器能够下载这些瓦片...

    maptiles download万能地图瓦片下载器。

    1、资源丰富;内置700+地图瓦片资源,包括国内高德、百度、天地图;及国外arcgis 等主流地图; 2、地图瓦片范围可使用KML或gpx 自动裁切;...可预览查看; 6、内含瓦片下载后加载示例,瓦片资源预览及说明;

Global site tag (gtag.js) - Google Analytics