com.supermap.mapping.Map map = new com.supermap.mapping.Map(workspace);
String mapXML = workspace.getMaps().getMapXML(0);
map.fromXML(mapXML);
String cacheName = "CTH" +System.currentTimeMillis();
MapCacheBuilder mapCacheBuilder = new MapCacheBuilder();
mapCacheBuilder.setMap(map);
mapCacheBuilder.setBounds(map.getBounds());
mapCacheBuilder.setIndexBounds(mapCacheBuilder.getGlobalIndexBounds());
mapCacheBuilder.setStorageType(StorageType.Compact);
mapCacheBuilder.setOutputFolder("F:\\重点客户数据\\");
mapCacheBuilder.setCacheName(cacheName);
mapCacheBuilder.addSteppedListener(new SteppedListener() {
@Override
public void stepped(SteppedEvent steppedEvent) {
System.out.println(steppedEvent.getTitle() + ":" + steppedEvent.getMessage() + ":" + steppedEvent.getPercent() + "%");
});
boolean build = false;
mapCacheBuilder.computeOutputScales();
mapCacheBuilder.setIgnoreInvalidDrawing(true);
mapCacheBuilder.setTileFormat(TileFormat.JPG_PNG);
mapCacheBuilder.setTilingMode(MapTilingMode.GLOBAL);
HashMap<Double, String> scalesMaps = mapCacheBuilder.getGlobalLevelScales();
Integer minScales = 6;
Integer maxScales = 8;
double[] outputScales = getOutputScales(scalesMaps, minScales, maxScales);
HashMap<Double, String> doubleStringHashMap2 = new HashMap<>();
doubleStringHashMap2.put(outputScales[0],"6");
doubleStringHashMap2.put(outputScales[1],"7");
doubleStringHashMap2.put(outputScales[2],"8");
mapCacheBuilder.setOutputScales(outputScales);
mapCacheBuilder.setOutputScaleCaptions(doubleStringHashMap2);
mapCacheBuilder.resumable(false);
build = mapCacheBuilder.build();
if (build) {
System.out.println("切图成功"+cacheName);
System.out.println(System.currentTimeMillis());
} else {
System.out.println("切图失败");
mapCacheBuilder.dispose();
private static double[] getOutputScales(HashMap<Double, String> scalesMaps, Integer minScales, Integer maxScales) {
int arraylength = maxScales - minScales + 1;
double[] outputScales = new double[arraylength];
String[] values = new String[arraylength];
for (int i = 0; i < values.length; i++) {
values[i] = String.valueOf(minScales + i);
for (int i = 0; i < outputScales.length; i++) {
outputScales[i] = getMapKey(scalesMaps, values[i]);
return outputScales;
private static Double getMapKey(HashMap<Double, String> maps, String value) {
Double key = 0.0;
for (Map.Entry<Double, String> entry : maps.entrySet()) {
if (entry.getValue().equals(value)) {
key = entry.getKey();
return key;
以上就是生成地图瓦片的相关操作步骤,后续将会继续分享如何使用SuperMap iObjects Java进行多任务切图,相比单任务切图,多任务切图大大提升了切图效率,敬请期待!
GoogleMapsTileCutter
GoogleMapsTileCutter.jar {zoom} {threads} {full map} {output directory}
缩放和线程数应为大于零的整数。 完整地图应为完整地图的相对或绝对路径(仅.png!)。 输出目录在运行时不必存在。 只要父目录存在,就会创建它。
尺寸vs缩放级别vs瓷砖数
256x256
512x512
1024x1024
2048x2048
4096x4096
8192x8192
缩放级别所需的尺寸可以通过以下公式计算: 2^(zoom -1) * 256
您可以使用以下公式计算图块计数: 2^zoom * 2^zoom + x + 1其中, x是零以上所有缩放级别的所
最近的工作重心放在了后端地图渲染引擎上,因此接触到了mapnik,用了一段时间感觉它的功能相当丰富,具有很强的拓展性,生态也比较强大,想对学习过程做一个记录。OK,废话少说。
什么是Mapnik
Mapnik是一款开源的具有地图渲染功能的库,它能够为Postgis,Shapefile,Geojson,SQLite等在内的多种数据源...
本人正在努力持续不断为大家分享JAVA相关的各种实战经验,所有技术尽可能采用较新且成熟的技术架构,本期讲解的内容是地图有关的瓦片下载与合并技术,期待能够帮助到您。joMapTile: 一个基于java编写的地图瓦片下载及瓦片合并大图小工具。
矢量地图通常具有更高的精度和更好的交互性,可以支持各种地图操作,如放大、缩小、平移和选择。栅格地图通常具有更高的表现力和更广泛的应用领域,可以用于显示真实的地形和地貌信息,以及大面积的卫星影像等。瓦片地图数据的优点在于其能够支持快速、流畅的地图浏览和交互,并且可以实现大范围地图数据的高效存储和传输。矢量数据是由点、线、面等基本几何要素以及这些要素属性数据构成的地图数据,它通常用来表示地理现象的几何形状和属性信息。矢量数据和栅格数据是两种不同的地图数据类型,它们有各自不同的特点和适用范围,并不能混淆使用。
Java对点、线、面生成栅格瓦片jpg,并渲染呈现1. 效果图2. 原理3. 源码
这篇博客将介绍从前端HTML页面到后端预生成栅格瓦片jpg,并提供查询接口供前端html调用呈现效果图。
瓦片地图金字塔模型是一种多分辨率层次模型,从瓦片金字塔的底层到顶层,分辨率越来越低,但表示的地理范围不变。首先确定地图服务平台所要提供的缩放级别的数量N,把缩放级别最高、地图比例尺最大的地图图片作为金字塔的底层,即第0层,并对其进行分块,从地图图片的左上角开始,从左至右、从上到下进行切割,分割成相同大小(比如256x256像素)的正方形地图瓦片,形成第0层瓦片矩阵;在第0层地图图片的基础上,按每2x2像素合成为一个像素的方法生成第1层地图图片,并对其进行分块,分割成与下一层相同大小的正方形地图瓦
常见的在线地图服务,如 Google Maps、百度地图等,都是采用了栅格瓦片做底图,叠加矢量瓦片的做法。但是,随着地图的移动化和应用的逐渐深入,栅格瓦片占用带宽和存储都较大,不利于地图在移动设备的应用。通过Ajax请求瓦片地图服务或数据,根据瓦片地图的级数、行列号分别获取对应的瓦片地图,将其按照请求的空间范围组织好(即按照网格组织瓦片地图),从而形成一幅地图并显示在网页中。矢量瓦片数据以矢量形式存在。在Web端加载瓦片地图,一般有两种方式,一种为直接读取缓存加载,即读取磁盘中以目录方式存储的瓦片图片;
地图瓦片在项目中的应用非常常见,为了帮助大家快速用上合适的地图瓦片切图方案,我们整理了该文章,大家在项目中碰到问题,可Ctrl+F查找关键字来查找合适的解决方案。
内容包括:栅格|矢量瓦片原理介绍、不同缓存形式优劣对比及适用场景、项目切图案例分享、常见切图报错Q&A等。
这里介绍的切片缓存数据制作,主要针对Cesium相关平台,由于当前平台仅支持空间参考WKID为4326,3857的坐标系,因此,在进行切片之前,需要将坐标系设置为4326或3857,这里推荐使用3857坐标系(投影坐标系)。
2、坐标系设置
坐标系转换分为两种,一种是标准的坐标系统,另一种是地方的坐标系统。
对于地方坐标系统,需要自行分析转换参数,进行数据转换,或者找坐标转换单位进行数据...