奥维互动地图谷歌图源,通过自建Cloudflare Workers反代实现墙内访问

更新了!!

更新了新的免费反代方式“Vercel”,教程地址https://www.imut.xyz/642/

悲报!!

2022年5月9日0时起,Cloudflare Workers 在全国范围内遭到了 DNS 污染,目前Workers专用域名“*.workers.dev”在国内已无法正常访问,本方法也因此暂时作废,谢谢各位一路以来的支持。

附上污染监测截图:

前言

奥维互动地图作为一款非常好用的地图软件,一直广受测绘人员、地理爱好者们的喜爱,尤其是旧版本中提供的Google卫星图功能,但是由于相关政策原因,不得不撤下了相关的地图源,只能由用户手动添加地图源。由于墙内封锁的原因,Google卫星图无法直连,导致用户只能安装代理软件才能使用第三方的Google地图,本篇教程就是教大家如何使用免费的Cloudflare Workers对Google图源进行反代,实现本地免代理访问。

所需资源

你只需要一个Cloudflare的账号,注册地址https://dash.cloudflare.com/sign-up,以及看完本教程的耐心。

1.创建CF Worker工作区

首先,我们需要进入Cloudflare的控制台https://dash.cloudflare.com/,点击左侧侧边栏的Workers一栏进入Cloudflare Workers的主界面。

在这里填入你想要的二级域名,检测没有重复后即可使用,下一个页面的计划版本,我们选择免费即可,免费版本每天会提供十万次的调用次数,北京时间8:00重置。随后会要求你验证邮箱(也可能没有),打开注册邮箱验证即可。

2.搭建反代服务

创建工作区后点击“创建服务”,新建一个应用,填写一个工作区的名字,这一步填写的名字就是我们反代所用的地址的一部分,不要太写长(,其他部分默认即可。

随后我们单击快速编辑修改反代服务的代码,此处代码为一段简单的JSPROXY,如果以后想要访问其他的非直连网站,修改“const”定义的网址即可

快速编辑的界面布置,我们进需要知道在左侧填写代码即可,直接复制下方提供的代码覆盖原有的代码点击保存并部署即可

具体代码如下:

const upstream = 'mt1.google.cn'
const blocked_ip_address = ['0.0.0.0', '127.0.0.1']
const replace_dict = {
	'$upstream': '$custom_domain',
	'//mt1.google.cn': ''
}
addEventListener('fetch', event =>{
	event.respondWith(fetchAndApply(event.request));
})
async function fetchAndApply(request) {
	const ip_address = request.headers.get('cf-connecting-ip');
	const user_agent = request.headers.get('user-agent');
	let response = null;
	let url = new URL(request.url);
	let url_host = url.host;
	if (url.protocol == 'http:') {
		url.protocol = 'https:'
        response = Response.redirect(url.href);
		return response;
	}
	url.host = upstream;
	if (blocked_ip_address.includes(ip_address)) {
		response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', {
			status: 403
		});
	} else {
		let method = request.method;
		let request_headers = request.headers;
		let new_request_headers = new Headers(request_headers);
		new_request_headers.set('Host', upstream);
		new_request_headers.set('Referer', url.href);
		let original_response = await fetch(url.href, {
			method: method,
			headers: new_request_headers
		}) 
        let original_response_clone = original_response.clone();
		let original_text = null;
		let response_headers = original_response.headers;
		let new_response_headers = new Headers(response_headers);
		let status = original_response.status;
		new_response_headers.set('access-control-allow-origin', '*');
		new_response_headers.set('access-control-allow-credentials', true);
		new_response_headers.delete('content-security-policy');
		new_response_headers.delete('content-security-policy-report-only');
		new_response_headers.delete('clear-site-data');
		const content_type = new_response_headers.get('content-type');
		if (content_type.includes('text/html') && content_type.includes('UTF-8')) {
			original_text = await replace_response_text(original_response_clone, upstream, url_host);
		} else {
			original_text = original_response_clone.body
		}
		response = new Response(original_text, {
			status,
			headers: new_response_headers
		})
	}
	return response;
}
async function replace_response_text(response, upstream, host_name) {
	let text = await response.text() 
    var i, j;
	for (i in replace_dict) {
		j = replace_dict[i]
		if (i == '$upstream') {
			i = upstream
		} else if (i == '$custom_domain') {
			i = host_name
		}
		if (j == '$upstream') {
			j = upstream
		} else if (j == '$custom_domain') {
			j = host_name
		}
		let re = new RegExp(i, 'g') 
        text = text.replace(re, j);
	}
	return text;
}
async function device_status(user_agent_info) {
	var agents = ["Android", "iPhone", "SymbianOS", "Windows Phone", "iPad", "iPod"];
	var flag = true;
	for (var v = 0; v < agents.length; v++) { if (user_agent_info.indexOf(agents[v]) > 0) {
			flag = false;
			break;
		}
	}
	return flag;
}

截至目前我们就已经完成了反代服务的搭建工作,请记好自己的反代域名,形如“xxx.xxx.workers.dev”

3.1.添加奥维自定义地图(手动导入)

我们一共会添加4个地图,这一步我使用PC版奥维互动地图进行演示,手机版大同小异

首先我们打开软件,选择自定义地图管理,添加地图

紧接着填写地图参数,我会在下面列出四个图源的参数,大家按照提示填写即可

主机名填写我们在cf worker中得到的应用地址形如“xxx.xxx.workers.dev”,图中仅供参考,无法使用!!!

除了红框标注部分需更改外,这四张地图的非标注部分完全相同,请按照下图示意填写!

图中没有被圈起来的地方,请按照图中填写,即协议“https”,最大级别“20”,投影类型“墨卡托中国”,图片格式“PNG”,端口号“443”。

url地址
谷歌路网小字体_反代 普通地图 256像素
/vt/imgtp=png32&lyrs=h@292000000&hl=zh-CN&gl=cn&x={$x}&y={$y}&z={$z}&s=Galileo
谷歌路网大字体_反代 普通地图 512像素
/vt/imgtp=png32&lyrs=h@292000000&hl=zh-CN&gl=cn&x={$x/2}&y={$y/2}&z={$z-1}&scale=2&s=Galileo
路网卫星图_反代 影像地图 256像素
/vt/lyrs=s@699&hl=zh-CN&gl=cn&src=app&x={$x}&y={$y}&z={$z}&s=
路网路网卫星图_反代 影像地图 256像素 需设置叠加层,看下一步
/vt/lyrs=s@699&hl=zh-CN&gl=cn&src=app&x={$x}&y={$y}&z={$z}&s=

最后一步,我们需要对路网卫星图设置叠加层,分别选中大小字体路网即可

3.2.添加奥维自定义地图(二维码导入)

有些同学感觉编写参数比较麻烦,我这里制作了4张二维码,扫描/导入即可完成大部分的工作。

因为反代域名每天访问有次数限制,所以我把主机名进行了修改,使用之前手动修改四个地图的主机名为cf workers的服务域名!!

尾声

到这一步,我们就完成了所有的工作,选中自定义地图即可查看我们添加进去的地图。

如果不熟悉相关操作,或者感觉步骤过于繁琐,本人可提供代搭建服务,有需要可以在评论留下联系方式(仅站长可见),或者发邮件到dapeng@imut.xyz

点赞
  1. AsdOPs说道:
    Google Chrome Windows 10
    博主 注册网站无限跳404 注册都没法注册 被墙了
    1. DaPengCH说道:
      Google Chrome Windows 10
      我这里网络测试联通电信都是正常的。可能和地区有很大关系
  2. gunboss说道:
    MIUI Browser Android 12
    按照作者的方法成功。期间由于自己的问题还单独加作者寻求帮助,作者很耐心地答疑处理问题,非常感谢
  3. 匿名说道:
    Google Chrome Windows 7
    感谢作者的教程,很有帮助 :good:
  4. 匿名说道:
    Google Chrome Windows 7
    workers.api.error.unauthorized (Code: 10023) 保存部署时报错,不能保存
    1. DaPengCH说道:
      Google Chrome Windows 10
      你好,可以邮件联系我,评论区也看不到具体是啥错误
  5. FSY说道:
    Google Chrome Windows 10
    上面都做成了,但在奥维里加载一直显示正在下载是什么情况呀?

发表评论

电子邮件地址不会被公开。必填项已用 * 标注