[JAVA][Geotools][添加图层相关的问题
【环境】
java1.5
geotools 2.3
【描述】
已经实现读取本地shp文件,以及多个shp叠加,进行地图浏览
现打算在指定的经纬度,添加基站或者车辆图标
【方案】
有2个思路:
一是利用经纬度 使用 类似 MaptoWindow的 函数获得图标在窗口的相对显示位置,然后使用canvas绘制上去
二是Geotools文档中提到的gridCoverage层,实现imageReader来提取相应的coverage图象
【问题】
请问大家在gis显示中添加图标的一般做法是什么?
在gis规范里有使用图标的标准吗?
第一个思路我在delphi+其他的gis中间件上实现了。在java+Geotools上还没做过。我已经看过了Feature以及FeatureType的说明,JTS文档也浏览了一遍,不知道这2个思路是否能够顺利实现,在网上寻找很久了,由于gis的知识有限,希望有做过朋友可以指点一二,如果能给个demo例子学习不甚感谢。
新人没分,抱着学习态度提问,请不吝指点。
—————————————————————————————————————————————————————————–
使用第一种方法已经解决。但总觉得不会是标准的解决方案。
把自己的方法和大家共享一下。
主要的方法是获得gis到客户区域的坐标
/**
* gisToClient
* 通过gis坐标获得界面坐标
* @param ClientEvent
* @return
*/
private Coordinate gisToClient(Coordinate gisEvent){
// 初始化返回值
Coordinate coord =null;
//获取当前map的边界
Rectangle rec = map.getComponent().getBounds();
Envelope env = map.getRenderingStrategy().getMapArea();
if (env!=null && rec!=null){
GeometryFactory geofact = new GeometryFactory();
coord = toGisCoord(gisEvent.x,gisEvent.y,env.getWidth(), env.getHeight(), rec,env);
Point point = geofact.createPoint(coord);
CoordinateReferenceSystem targetCRS = map.getRenderingStrategy().getContext
().getCoordinateReferenceSystem();
CoordinateReferenceSystem sourceCRS = DefaultGeographicCRS.WGS84;
try{
MathTransform transform = CRS.findMathTransform(sourceCRS, targetCRS);
Geometry targetGeometry = JTS.transform( point, transform);
coord = targetGeometry.getCoordinate();
}catch(Exception e){
System.out.println(“CRS transformSource to target ERROR”);
}
}
return coord;
}
然后重写jFrame的paint方法
/**
* 重载JFrame的paint实现图标绘画
*/
public void paint(Graphics g)
{
super.paint(g);
Image srcImage=null;
try {
srcImage = ImageIO.read(new File(“图标的绝对路径”));
} catch (IOException e) {
System.out.println(“image error”);
e.printStackTrace();
}
Coordinate x= gisToClient(new Coordinate(0,0));
g.drawImage(srcImage,(int)x.x, (int)x.y, 32, 32, null);
}
虽然可以做,但是觉得并不完善,暂时还不结贴,
不知道有没有标准gis实现这种图标显示的图层或者方法。
望指教。
转载自:https://blog.csdn.net/sxausgyy/article/details/8113047