nginx在代理转发地图瓦片数据中的应用
最近有这样一个需求,需要将arcgis server发布的地图瓦片放在移动硬盘中,系统演示的时候,直接调用本地的地图瓦片,而非远程的,主要是为了系统演示的时候加快地图访问速度。
而且需要在任意电脑运行,这就要求不能安装笨重的arcgis server。
那么在不修改前端地图代码的情况下,如何做到这种效果呢?
在此,我们又想到了代理大佬nginx。
1、地图瓦片请求URL规律
地图瓦片可以用两种形式的url
1)rest风格
http://IP:PORT/arcgis/rest/services/myMapServer/MapServer/tile/{TileMatrix}/{TileRow}/{TileCol}
2) GET参数形式
http://IP:PORT/arcgis/rest/services/myMapServer/MapServer/WMTS?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&STYLE=Default&FORMAT=image%2Fpng&LAYER=myMapServer&TILEMATRIXSET=default028mm&TileMatrix={TileMatrix}&TileCol={TileCol}&TileRow={TileRow}
其中TileMatrix表示zoom层级,TileRow表示行号,TileCol表示列号,myMapServer是服务名称
2、arcgis server 瓦片命名规律
arcgis server 的瓦片默认存储在 arcgisserver\directories\arcgiscache\myMapServer\图层\_alllayers 目录下
其目录结构为:
zoom层级文件夹命名规则:"L" + 长度为2位前面补零的10进制TileMatrix
行号文件夹命名规则:“R” + 长度为8位前面补零的16进制TileRow
列号文件夹命名规则:“C” + 长度为8位前面补零的16进制TileCol




3、nginx配置
nginx的工作就是:一旦发现有 前缀是 arcgis/rest/services/myMapServer 的HTTP请求,就先用正则表达式,找到URL重要的三个参数,TileMatrix、TileRow和TileCol
然后就按照上面列举的地图瓦片命名规则进行转换
这里我们用到了openresty,而非官网的nginx,openresty的优势在于可以用lua语言编写脚本,让nginx可能轻松编程。
下面是nginx配置中的核心代码
location /arcgis/rest/services/MapServer/ {
if ($request_uri ~* "TileMatrix=(.*)&TileCol=(.*)&TileRow=(.*)") {
set_by_lua $TileMatrix "return string.format('%02d', ngx.arg[1]);" $1;
set_by_lua $TileCol "return string.format('%08x', ngx.arg[1]);" $2;
set_by_lua $TileRow "return string.format('%08x', ngx.arg[1]);" $3;
}
rewrite ^.*.*$ /data/MapServer/图层/_alllayers/L$TileMatrix/R$TileRow/C$TileCol.png last;
}
其中:set_by_lua就是openresty中的语法,用lua语句块设置变量值,可以看到,用lua很方便的将行列号转换成了16进制的8字符串
然后再利用rewrite实现url重定位,直接指向瓦片的物理路径
nginx在代理转发地图瓦片数据中的应用的更多相关文章
- nginx反向代理转发后页面上的js css文件无法加载【原创】
故障现象:nginx做代理转发后,发现页面上的js css文件无法加载,页面样式乱了. 原因:没有配置静态资源 解决js css文件无法加载无法访问的问题 解决办法: 修改配置文件nginx.conf ...
- C++代码利用pthread线程池与curl批量下载地图瓦片数据
项目需求编写的程序,稳定性有待进一步测试. 适用场景:在网络地图上,比如天地图与谷歌地图,用户用鼠标在地图上拉一个矩形框,希望下载该矩形框内某一层级的瓦片数据,并将所有瓦片拼接成一个完整的,包含地理坐 ...
- Nginx 反向代理 如何在web应用中获取用户ip
转载:http://blog.csdn.net/bao19901210/article/details/52537279 问题背景: 在实际应用中,我们可能需要获取用户的ip地址,比如做异地登陆的判断 ...
- 【转】Nginx反向代理转发tomcat
http://blog.csdn.net/mlc1218559742/article/details/53117520 最近刚接触nginx,在网上查阅了相关资料,看到最多的形容nginx的词就是反向 ...
- Linux +Docker +Nginx 部署代理转发初探
很多开发人员仅仅只会码代码,如果让开发人员部署一些深入点的东西,或者做负载均衡等,很多开发人员估计就懵逼了,作为一个专业的开发还需要懂一些基本的运维知识:虽然说在互联网行业中,中小企业都有一个牛逼的运 ...
- nginx反向代理(proxy_pass)tomcat的过程中,session失效的问题解决
Nginx反向代理tomcat,很是方便,但是也有些细节的问题需要注意:今天遇到了这样一个问题,tomcat中路径“host/web1”,nginx中直接“host/”代理,这时候session就无法 ...
- 记阿里云SLB后配置Nginx反向代理百度地图API的坑
需求: 百度的原始请求:https://api.map.baidu.com/place/v2/suggestion?query=s®ion=sc&city_limit=true& ...
- nginx反向代理转发apache配置 之 cookie去哪儿了?
在公司接手了个微信项目,由于微信环境下访问网站需要使用对外开放的域名,所以有相关问题,都是直接运维同事帮忙处理. 原理是这样: 方案一: 1. 将域名解析指向测试服务器的地址: 2. 开放相关端口访问 ...
- 【Nginx】Nginx反向代理转发Host设置
#事故现场: 服务器A(Nginx服务器):192.168.2.126 服务器B(Web服务器):192.168.2.221 服务器A反向代理服务器B,A配置了upstream为: http { up ...
随机推荐
- 1.8 Double-Opening and Virtual Machine
Since plug-in will be replaced by RN as following years, what is the future of plug-in? the answer i ...
- NeuChar 平台使用及开发教程(二):设置平台账号
在上一篇<NeuChar 平台使用及开发教程(一):开始使用 NeuChar>中我们了解了 NeuChar 的角色和大体功能框架,并进行了注册,本文将介绍如何设置多账号,以便让 NeuCh ...
- python3 stack/ queue和deque模块
'''栈stack 先进后出FILO (first in last out)'''lst = []lst.append("张一山")lst.append("杨紫" ...
- js注入攻击
注入攻击一般指用户输入数据导致页面乃至整个网站.服务器异常的情况. 直接看一个例子: <html> <head> <title>Test</title> ...
- [Swift]LeetCode94. 二叉树的中序遍历 | Binary Tree Inorder Traversal
Given a binary tree, return the inorder traversal of its nodes' values. Example: Input: [1,null,2,3] ...
- [Swift]LeetCode593. 有效的正方形 | Valid Square
Given the coordinates of four points in 2D space, return whether the four points could construct a s ...
- presto中ldaps配置完整流程
最近开始转战presto,至于前面章节中的Hbase,我也会持续更新,喜欢我的可以关注我.关于这个流程,我看过阿里云的的一篇文章,但看后还是不知所云,就写下了这篇博客,大家感兴趣的可以访问那篇文章—— ...
- React 实现拖拽功能
实现效果:(可戳 https://codepen.io/wenr/pen/EGEQxp 查看) 因为工作中会用到 JIRA 所以想实现一下相似的功能,顺便学习一下 H5 的拖拽.不支持拖拽改变顺序,感 ...
- Linux 的文件权限和目录配置
1.Linux文件属性 用root用户登录linux后,执行 ls -al 命令查看文件.显示如下: 文件属性示意图如下: 第一列代表这个文件的类型和权限 第一个字符代表这个文件是:目录.文件或链接文 ...
- 使用ML.NET预测纽约出租车费
有了上一篇<.NET Core玩转机器学习>打基础,这一次我们以纽约出租车费的预测做为新的场景案例,来体验一下回归模型. 场景概述 我们的目标是预测纽约的出租车费,乍一看似乎仅仅取决于行程 ...