首页 / 浏览问题 / 组件GIS / 问题详情
iObjects.Java导出地图为PNG前如何为地图追加一个标记
252EXP 2023年11月27日

目前准备了一个工作空间,里面存有一张地图

现在想要制作一个拓展服务,输入坐标后,打开这个工作空间里的这个地图,如何把地图中心店移动到指定的坐标后,

为地图添加一个图标,指向地图的中心点(图标的样式最好能自由指定)

最后,将背景地图和这个图标导出成图片。

其他部分目前没什么问题,但请问中间添加图标的这个步骤能否实现,如果能的话,请问应该如何准备工作空间以及实现。

想要实现的效果如下

1个回答

您好,根据您的描述,得到以下需求点:
1. 打开工作空间中的一个地图

2. 设置地图的显示范围

2. 添加一个图标在地图中心点

3. 将地图输出为PNG

请参考以下代码进行尝试(示例代码基于SuperMap iObjects Java  11.1.1版本编写):

/**
 * 输出PNG图片
 * @param x 地图中心点x值
 * @param y 地图中心点y值
 * @param scale 地图显示比例词
 * @param width 出图PNG像素宽
 * @param height 出图PNG像素高
 * @param svgIconPath 地图中心点图标的SVG文件路径
 * @param savePNGPath   地图保存PNG文件路径
 */
public void outToPNG(double x,double y,double scale,int width,int height, String svgIconPath, String savePNGPath){
    // 初始化地图对象
    String mapName  = m_workspace.getMaps().get(0);// 获取工作空间中第1个地图的名称. m_workspace变量是您的工作空间
    Map map = new Map(m_workspace);// 初始化地图对象
    map.open(mapName);// 通过地图名称打开地图

    // 设置输出PNG时,地图的显示范围
    map.setImageSize(new Dimension(width,height));// 设置出图时图片的大小,以像素为单位
    map.setScale(scale);// 设置地图的显示比例尺
    map.setCenter(new Point2D(x,y));// 设置地图的显示范围的中心点

    // 添加地图中心点图标
    //        1.添加图标到工作空间符号库
    SymbolMarker symbolMarker= new SymbolMarker();
    symbolMarker.fromSVG(svgIconPath);
    int symbolMarkerId= m_workspace.getResources().getMarkerLibrary().add(symbolMarker);

    //        2.初始化 图标样式
    GeoStyle geoStyle = new GeoStyle();
    geoStyle.setMarkerSymbolID(symbolMarkerId); // 设置符号ID为图标添加到工作空间后的ID
    geoStyle.setMarkerSize(new Size2D(25,25));// 设置图标大小

    //        3.添加图标到地图中心
    GeoPoint point= new GeoPoint(map.getCenter().getX(), map.getCenter().getY());
    point.setStyle(geoStyle);
    TrackingLayer trackingLayer = map.getTrackingLayer();
    int pointIndex = trackingLayer.add(point,"centerIcon");

    // 地图输出PNG图片
    map.outputMapToPNG(savePNGPath,true);// 输出地图

    // 移除地图中心图标
    trackingLayer.remove(pointIndex);
    // 移除工作空间中svg符号
    m_workspace.getResources().getMarkerLibrary().remove(symbolMarkerId);
}

希望能够帮助到您

285EXP 2023年11月27日
感谢解答
...