`
hcmfys
  • 浏览: 347179 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

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

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

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

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

    vstools-java:Vagrant Story 的工具集,包括不完整的模型和地图查看器

    它包含一个部分工作的模型和地图查看器。 它是用Java编写的,主要是因为开发速度快,部署容易。 一切都在进行中。要求查看器使用 jMonkey3 作为 3D 引擎。 当然,您还需要一份 Vagrant Story 的副本才能查看其文件...

    java源码包4

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

    java源码包3

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

    java源码包2

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

    JAVA上百实例源码以及开源项目

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

    JAVA上百实例源码以及开源项目源代码

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

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码,文件操作,压缩包查看 Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码...

    probabilitymapviewer:概率图网页查看器

    概率图查看器 前身为分段器 概率图查看器是一个使用嵌入式 Web服务器的Web应用程序,该服务器对平铺的图像数据几乎实时地执行概率图生成。 概率图查看器设计为在... (在概率地图查看器通过--dm4collectionmode转换dm

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码,文件操作,压缩包查看 Java zip压缩包查看程序,应用弹出文件选择框,选择ZIP格式的压缩文件,可以像Winrar软件一样查看压缩文件内部的文件及文件夹,源码...

    Java课程设计项目魔塔小游戏

    进入游戏后按x可打开怪物属性查看器 目前已完成模块: 1.行走控制 2.地图加载 3.钥匙与门 4.主角设定 5.怪兽与战斗系统 6.多楼层切换 7.怪物属性查看器 计划中模块 1.地图编辑器 2.存档读档 3.主角属性...

    android_zappy:zappy 项目的 Android 客户端地图查看器

    android_zappy zappy 项目的 Android 客户端地图查看器 使用主机和端口登录 使用 IA 和资源进行预览

    JAVA后台管理系统源码

    4、Grid列表和表单,包含添加、删除、批量删除、修改、查看、图片查看和按条件查询列表等功能。 5、导入导出Excel数据,支持xlsx和xls文件。 6、资源管理(菜单管理)。 7、用户管理和部门管理。 8、权限管理。不仅...

    extMap:ArmA III的外部实时地图查看器

    extMap ArmA III的外部实时地图查看器笔记地图未包含在来源中要使其正常工作,您需要ArmA III游戏mod eferdi / extMap-mod,这是arma的一个小插件,可以将位置日期发送到本地extMap服务器去做自动变焦集成标记API

    百度地图开发java源码-logistics:河北工业大学-软件设计与编程实践-物流运输平台

    百度地图开发java源码 物流运输平台 如果本项目对你有所帮助,欢迎star。 声明:本系统不再维护,部分框架与组件已过时,仅供《河北工业大学》学生学习交流使用。 河北工业大学 勤慎公忠 软件设计与编程实践,软件...

    Java通用后台管理系统源码 JAVATYHTXT.rar

    Java通用后台管理系统源码 源码描述: 一、特色功能 1、采用Spring MVC的静态加载缓存功能,在首页将Javascript文件、CSS文件和图片等静态资源文件加载进来放进内存,极大提高ExtJS的加载速度。 2、三种皮肤主题:...

Global site tag (gtag.js) - Google Analytics