javascript - 带有 map 代理脚本的 OpenLayers XYZ 示例

标签 javascript php openlayers

我一直想知道是否可以使用脚本从公共(public)资源加载 map 并使用 OpenLayers 显示它。它还将允许创建 map 切片缓存以允许更快的加载时间。 所以我的问题是如何使用来自本地托管脚本的 XYZ 源在 OpenLayers 中加载 map ?

最佳答案

这是我的快速解决方案:

首先,我创建了一个代理脚本来为我加载文件:

<?php

header('Content-type: image/png'); 

$x = $_GET['x'];
$y = $_GET['y'];
$z = $_GET['z'];

$urlBegin = 'https://b.tile.openstreetmap.org';
$urlEnd = '.png';

$fullUrl = "$urlBegin/$z/$x/$y$urlEnd";


$curl = curl_init();
curl_setopt_array($curl, [
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_URL => $fullUrl,
    CURLOPT_USERAGENT => 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.108 Safari/537.36'
]);
$content = curl_exec($curl);
curl_close($curl);

echo $content

?>

之后,我有一个简单的例子来加载这个代理脚本提供的 map :

<!DOCTYPE html>
<html>
<head>
<title>XYZ Example</title>
<link rel="stylesheet" href="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/css/ol.css">
</head>
<body>
<div id="map" class="map"></div>
<script src="https://cdn.rawgit.com/openlayers/openlayers.github.io/master/en/v5.3.0/build/ol.js"></script>
<script>

var map = new ol.Map({
    target: 'map',
    layers: [
        new ol.layer.Tile({
            source: new ol.source.XYZ({
                url: 'fetch_map.php?z={z}&x={x}&y={y}'
            })
        })
    ],
    view: new ol.View({
        center: [0, 0],
        zoom: 5
    })
});

</script>
</body>
</html>

如果您在浏览器中从外部源加载图 block 时遇到问题,这将非常有用。

关于javascript - 带有 map 代理脚本的 OpenLayers XYZ 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56893067/

相关文章:

javascript - 如果变量未定义则跳过 promise 之一

Javascript 树无法正常工作

javascript - 使用 jQuery 切换仅影响一个元素

php - 从 PHP 向 MYSQL 引入 NULL 字段

javascript - native 模块分辨率

php - CodeIgniter session set-cookie duplicated -- 如何解决

php - Windows 上 Symfony 5.0.1 控制台中已弃用的类警告

javascript - 对变量的更改会影响先前在 javascript 中保存的数组值

javascript - Jquery Slider UI 用于基于不透明度在 OpenLayers 中显示覆盖层

javascript - Openlayers 4 中的 LineString 方向箭头