「java加载瓦片」java加载瓦片地图
今天给各位分享java加载瓦片的知识,其中也会对java加载瓦片地图进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!
本文目录一览:
- 1、015Geoserver中使用GeoWebCache(GWC))
- 2、加载自定义的在线瓦片地图,速度很慢,怎么优化额
- 3、如何用cocos2d-x来做一个基于TileMap地图块的游戏
- 4、移动端使用openlayers加载手绘地图
- 5、openlayer怎么加载瓦片
- 6、天地图申请密钥后还是加载不了瓦片是什么情况
015Geoserver中使用GeoWebCache(GWC))
在geoserver1.7版本之后,geoserver本身集成了GeoWebCache模块。本文介绍如何使用。
GeoWebCache(GWC)是一个采用Java实现用于缓存WMS(Web Map Service)Tile的开源项目。当地图客户端请求一张新地图和Tile时,GeoWebCache将拦截这些调用然后返回缓存过的Tiles。如果找不到缓存再调用服务器上的Tiles,从而提高地图展示的速度。实现更好的用户体验。
a.GWC支持多种来源的瓦片,比如ArcGIS的瓦片。 (需要独立安装,集成的GeoWebCache不支持)
b.GWC支持多种请求,比如WMS、WMS-C、WMTS、TMS、Googl Maps KML和Virtual Earth。
c.GWC支持在第一次请求地图某范围时,将此范围内的地图按照配置的信息进行切图缓存。第二次同样请求此范围的地图时,直接读取缓存瓦片进行加速显示。此功能类似于AGS的动态出图。
d.GWC同时也支持预先将瓦片按照配置信息切完,地图加载时直接读取瓦片。此功能类似于AGS的瓦片缓存出图。
在GeoServer安装目录中找到web.xml文件,具体在目录D:\Program Files (x86)\GeoServer 2.11.3\webapps\geoserver\WEB-INF下
点击list选项,可以看到能够进行切图的服务
如果想实现类似于AGS中预先将所有瓦片全部进行切图的效果,可以点击要进行切图的图层下的Seed this layer:
image
点击Submit后,开始进行预切图,在页面中可以看到切图进程:
完成之后可以在缓存路径下看到切片内容。
geoserver可以实现动态缓存切片,具体是怎么回事呢?
当我们的WMS请求为一般性url,是不能自动开启瓦片缓存服务的,比如通过Layer Preview访问:
;version=1.1.0request=GetMaplayers=QQQQ%3AQWQWRRAAAAbbox=1.3206822745846782E7%2C3752719.2737657893%2C1.3207662961846782E7%2C3753671.107765789width=677height=768srs=EPSG%3A3857format=application/openlayers
而当我们在Tile Layers中访问时,是可以动态缓存的。
;format=image/png
当我们在geoserver中发布好服务后,是可以选择是否预先静态切片的。如果我们预先静态切片了。切片内容会存放在我们配置的路径下。通过Tile Layers来访问,访问的是一个个切片。如果我们没有预先切片,我们也可以通过Tile Layers来访问,这时也是一个个切片,但这个切片是动态生成的。生成后也会存放在我们配置的路径下。但要注意一点,这种访问,第一次是比较慢的。
点击Gridsets选项创建切图方案,点击Create a new gridset可以创建新的切图方案,也可以点击现成的切图方案右侧的Create a copy复制一个方案,并在此基础上进行修改
在切图级别设置功能区可以添加删除一些切图等级,点击保存保存切图方案
点击保存之后,在gwc目录下可以看见新增的一个后缀为.bak的配置文件,就是切图方案的配置文件
加载自定义的在线瓦片地图,速度很慢,怎么优化额
1打开腾讯电脑管家界面→清理垃圾→一键清理
2玩游戏的时候让管家进入免打扰模式释放内存。
3在最新的管家版本内置游戏加速模块,请打开。在电脑加速处可以找到
4打开管家的工具箱,点开网速保护,开启游戏优先。
如何用cocos2d-x来做一个基于TileMap地图块的游戏
创建一个工程框架
我们将首先创建一个框架工程,以确保我们拥有下面工程中所需的所有文件。
先下载并运行helloworld(具体参见教程“如何用cocos2d-x来开发简单的Uphone游戏:(一) 下载安装和HelloWorld ”)。
接下来,下载游戏所需要的zip资源文件(TileGameResource.zip)。该zip文件包含以下内容
• 一个我们将作为游戏主角的精灵。这个和教程“如何用cocos2d-x来开发简单的Uphone游戏:(二) 移动的精灵”很像!
• 声音特效,用cxfr工具制作(by Wenderlich)。
• 一些背景音乐,用Garage Band制作(by Wenderlich,更多信息见post)。
• 地图块 - 这实际上是要用地图编辑器做的,但现在就把它和其他东西一起包含进来会更容易一些。
• 一些其他“特殊”的地图块,我们将在下面介绍。
好了,这些资源将在后面适当的时候添加到我们的游戏中,现在就是我们制作地图和享受乐趣的时刻了!
Cocos2DX支持由开源项目地图块图编辑器(Tiled Map Editor,国外网站,需要FQ)制作并保存为TMX格式的地图。
如果你访问上面的链接,你会看到有两个版本的编辑器 – 一种是用Qt应用程序框架编写的,另一种是用Java编写的。有两个版本的原因是因为这个编辑器最先是用Java编写的,后来他们又将它移植到Qt上来。
你要用哪个版本主要是取决于你。在本教程中,我们将介绍使用Qt版本,因为从现在开始这是编辑器的发展主线,但有些人又喜欢用Java版本,因为并不是所有的旧功能都已经被移植过来了。
不管怎样 - 如果你想跟着学习,那就下载Qt版本,然后安装运行。转到文件\新建,在对话框中填写如下:
在新建地图对话框的Orientation选项,你可以选择Orthogonal(正交视图,采用的游戏Legend of Zelda)或者Isometric(等轴视图,采用的游戏Disgaea),这里,我们选择Orthogonal。
下面你得到设定地图大小。记住这是以地图块为单位,不是像素点。我们要做一张比较小的地图,因此就选择50×50。
最后设定地图块的宽度和高度。在这里你选择多大的尺寸是依赖于你的美工制作的地图块的大小的。在本教程中,我们用的是编辑器中附带的示例地图块集,每个地图块都是32×32大小的,因此选择32×32。
接下来,我们就在编辑器中加入地图块集。点击菜单栏的“Map”选项,选择“New Tileset…”,然后填写对话框:
图片可以点击Browse按钮得到,点击后导航到你的地图编辑器目录下的examples文件夹,将tmw_desert_spacing.png加到工程中.
宽度和高度32×32不用改,那个就是地图块的宽高。对于margin and spacing(边际和间距),还没有确切解释它们意思的文献,但它们应该这么理解:
• 边缘,指的是一个地图块的外面一圈,在这个边缘里面是实际的地图块内容。
• 间隔,即两个地图块之间的间距(像素单位)。
如果你看一看tmw_desert_spacing.png,你会发现每个地图块有一个1像素的黑边界,这就解释了边际和间距为什么设置作为1。
一旦你点击OK,你就将在Tilesets窗口看见地图块集。Ok,现在你也能开始画地图了! 点击在工具栏的“Stamp”图标,点击一个地图块,然后在地图上任意一个你想要的地方点击填充地图块。
继续完成你的地图吧——但一定要发挥你的想象力噢! 但请在地图上至少画一两个建筑物,因为待会我们会让我们的精灵走进你造的建筑。
这里有几个制图的小窍门,可以记住:
• 你可以在Tileset中拖动鼠标,同时选择几个地图块,然后填充到地图上。
• 你可以使用工具栏上的油漆桶按钮来填充一整片具有同样背景的地图,当然,用来填充的地图块是你在Tileset选择的。
• 你可以通过“查看\放大...”和“查看\缩小...”放大和缩小地图。
一旦你绘制完地图,在图层窗口中单击当前图层(现在这个图层就是“tile layer 1”),将名称改为“background”。然后点击“File\Save”,将文件保存到你的TileMap项目资源文件夹,并命名该文件“tilemap.tmx”。
移动端使用openlayers加载手绘地图
参考资料:
openlayers 文档地址:
绘图人员绘制完地图并配准后,发布到 GeoServer(一款基于 java 的开源 GIS 工具集),需在 GeoServer 上设置好投影坐标系(EPSG:3857即墨卡托坐标系,EPSG:4326即WGS84坐标系)、地图瓦片格式、坐标轴范围、地图原点、地图层级、分辨率等参数,一般由后台人员设置。
1、项目引入 openlayers
首先npm 安装 openlayers
注意,在 vue 中必须逐一声明所需的 openlayers 库的对象和方法才能正常使用
2、加载手绘地图
手绘地图以 WMTS (Web Map Tile Service, Web 地图瓦片形式)加载,先创建一个类型为 WMTS 的图层资源,再将其放入创建的 Map 对象的图层资源集合中。
以上,实现加载手绘地图后,移动至指定经纬度。
这样就完成了手绘地图底图的加载,后续如何为地图添加标注(含聚合标注)、覆盖物及路线等,可以查看我的另一篇文章:
openlayer怎么加载瓦片
1、先给个类图简单的介绍下
我们在客户端看到的瓦片其实是一个图片列表 也就是上面的grid 类 ,每张图片都是通过http从后来请求过来的图片也就是方法getURL(bound),
每张图片都有自己的url 也就是他的请求地址,而且grid的列表的每个单元格都有边框也就是bound,那要获取每个单元格中正确的图片都是通过bound来计
算而获取到相应的图片,如想要加载自己瓦片就需要重写grid中的getURL(bound)方法,这也就是最下排6个不同类型的瓦片根据自己的瓦片特点及地图服务
的特点编写的类,如果你有自己的瓦片却跟上面的几种都不相同也不相似,那你可以选择重写grid类,如果你的瓦片操作跟下面的6中服务相同或者类似,那
可以根据自己工作考虑重写那面6个类中的其中某一个中的getURL(bound)的方法。在计算的过程中能涉及到多个参数将在下篇来详细介绍,在这给几个重写
getURL(bound)的例子, 第一个例子是网上的不过在工作中验证过,绝对可用,写的还不错给大家个参考。
1、重写grid类中的getURL(bound)方法加载本地图片(天地图)
[html] view plain copy print?
OpenLayers.Layer.TiandituLayer = OpenLayers.Class(OpenLayers.Layer.Grid,
{
TileType : null,
mirrorUrls : null,
topLevel : null,
bottomLevel : null,
topLevelIndex : 0,
bottomLevelIndex : 20,
topTileFromX : -180,
topTileFromY : 90,
topTileToX : 180,
topTileToY : -90,
isBaseLayer : true,
initialize : function(name, url, options) {
options.topLevel = options.topLevel ? options.topLevel
: this.topLevelIndex;
options.bottomLevel = options.bottomLevel ? options.bottomLevel
: this.bottomLevelIndex;
options.maxResolution = this
.getResolutionForLevel(options.topLevel);
options.minResolution = this
.getResolutionForLevel(options.bottomLevel);
var newArguments = [ name, url, {}, options ];
OpenLayers.Layer.Grid.prototype.initialize.apply(this,
newArguments);
},
clone : function(obj) {
if (obj == null) {
obj = new OpenLayers.Layer.TDTLayer(this.name, this.url,
this.options);
}
obj = OpenLayers.Layer.Grid.prototype.clone
.apply(this, [ obj ]);
return obj;
},
getURL : function(bounds) {
var level = this.getLevelForResolution(this.map.getResolution());
var coef = 360 / Math.pow(2, level);
var Row = this.topTileFromX this.topTileToX ? Math.round((bounds.left - this.topTileFromX) / coef) : Math.round((this.topTileFromX - bounds.right) / coef);
var Col = this.topTileFromY this.topTileToY ? Math.round((bounds.bottom - this.topTileFromY) / coef): Math.round((this.topTileFromY - bounds.top) / coef);
var type = this.TileType;
if (type == "EMap") {
if (level = 2 level = 10) {
type = "A0512_EMap";
} else if (level == 11 || level == 12) {
type = "B0627_EMap1112";
} else if (level = 13 level = 18) {
type = "siwei0608";
}
}else if(type=="RMap"){
if (level = 2 level = 7) {
type = "sbsm0210";
} else if (level = 8 level = 10) {
type = "sbsm0210";
} else if (level = 11 level = 14) {
type = "e11";
}else if (level = 15 level = 18) {
type = "sbsm1518";
}
}
var url = this.url;
if (this.mirrorUrls != null) {
url = this.selectUrl(Row, this.mirrorUrls);
}
return this.getFullRequestString({
T : type,
X : Row,
Y : Col,
L : level
}, url);
},
selectUrl : function(a, b) {
return b[a % b.length]
},
getLevelForResolution : function(res) {
var ratio = this.getMaxResolution() / res;
if (ratio 1)
return 0;
for ( var level = 0; ratio / 2 = 1;) {
level++;
ratio /= 2;
}
return level;
},
getResolutionForLevel : function(level) {
return 360 / 256 / Math.pow(2, level);
},
getMaxResolution : function() {
return this.getResolutionForLevel(this.topLevelIndex)
},
getMinResolution : function() {
return this.getResolutionForLevel(this.bottomLevelIndex)
},
addTile : function(bounds, position) {
var url = this.getURL(bounds);
return new OpenLayers.Tile.Image(this, position, bounds, url,
this.tileSize);
},
CLASS_NAME : "OpenLayers.Layer.TiandituLayer"
});
天地图申请密钥后还是加载不了瓦片是什么情况
未开启权限和设置错误。
1、天地图未打开加载权限会导致即使申请密钥后也还是无法加载瓦片的情况,打开设置权限即可解决。
2、设置的数据错误也会导致无法加载瓦片的情况,需重新进行天地图的数据设置才可。
java加载瓦片的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java加载瓦片地图、java加载瓦片的信息别忘了在本站进行查找喔。
发布于:2022-11-26,除非注明,否则均为
原创文章,转载请注明出处。