openmap
1.简介
在第一个教程中,我们创建了一个基本的OpenMap GIS应用程序,该应用程序在JFrame
内显示从文件系统加载的具有一个形状图层的地图。 该教程基于com.bbn.openmap.app.example.SimpleMap
。 在第二个教程中,我们扩展了基本应用程序以使用MapHandler
,在第三个教程中,我们看到了它如何利用openmap.properties
将所有内容连接在一起。 在本教程中,我们将讨论地图图层。
2.地图图层概述
在教程1中,我们看到了如何将ShapeLayer
添加到MapBean
。 OpenMap支持大量的图层类型,可以将它们添加到MapBean
中,如图1所示。
BufferedLayerMapBean
是使用BufferedLayer
(请参见图1 )为某些图层创建图像的MapBean
。 它使用“ Layer
背景标志来确定应将哪些图层添加到此缓冲的图像。 任何不响应MouseEvent
的层都应指定为背景层,以减少其paint()
方法对应用程序的处理负担。
OMGraphicHandlerLayer
是基础层类,实现了需要交互和共享OMGraphic
的层的最常见功能。 GraticuleLayer
在内部创建其OMGraphic
,而ShapeLayer
从文件读取数据。 DTEDLayer
和RpfLayer
具有图像缓存。 有一些特殊的层允许您访问空间数据库以创建OMGraphic
。 可以在层内使用任何管理图形的技术。
作为基类, OMGraphicHandlerLayer
具有内置功能,可以更轻松地管理OMGraphic
中的OMGraphic
。 扩展OMGraphicHandlerLayer
,请实现prepare()
方法以返回OMGraphicList
其中包含适用于当前在图层中设置的投影的OMGraphic
。 收集,准备和生成OMGraphic
的所有工作都应在prepare()
方法中执行。 OMGraphicHandlerLayer
还具有内置的SwingWorker
对象,可用于在单独的线程中调用prepare()
。 可以通过调用doPrepare()
方法来启动SwingWorker
线程。 如果在调用doPrepare()
方法时SwingWorker
已经很忙,则在原始线程完成后,将启动一个新线程来调用prepare()
。 在prepare()
方法的默认实现中,当前列表只是使用当前投影生成并返回。
请参阅开发者指南,以获取有关如何使用这些层的更多信息。
OpenMap还提供了一些培训层( com.bbn.openmap.layer.learn
):
- 基本层
- 互动层
- SimpleAnimationLayer
- 投影响应层
以及测试图层( com.bbn.openmap.layer.test
):
- BoundsTestLayer
- GeoCrossDemoLayer
- GeoIntersectionLayer
- GeoTestLayer
- HelloWorldLayer
- 测试层
最后, com.bbn.openmap.layer.DemoLayer
是一个图层如何使用OMDrawingTool
编辑OMGraphic
。 它使用绘图工具在地图上创建区域,这些区域也用作过滤器,以控制哪些OMGraphic
也是可见的。
图层派生自java.awt.Component
,它们是可以添加到MapBean
的唯一组件。 因为Layer
s为Component
小号包含一个内MapBean
容器,的呈现Layer
小号到地图上由Java组件呈现机制控制。 该机制控制分层组件如何在彼此之上绘制。 为了确保按照正确的顺序将每个组件绘制到窗口中, Component
类包括一个方法,该方法允许其告知渲染机制它想被绘制。 此功能允许Layers彼此独立工作,并让MapBean
避免知道Layer
上正在发生什么。
OpenMap应用程序中的图层可以使用来自许多来源的数据:
- 通过计算
- 从本地硬盘驱动器的数据文件
- 来自URL的数据文件
- 从jar文件中包含的数据文件
- 使用从数据库(JDBC)检索的信息
- 使用从地图服务器接收的信息(图像或地图对象)
2.1创建图层
让我们从最简单的层开始。 从教程1开始,我们已经看到了如何创建ShapeLayer
并将其添加到MapBean
。 但是,自从教程3开始,我们就具备了openmap.properties
和MapHandler
。 这是您需要做的更改。
...
# These layers are turned on when the map is first started. Order
#