如何下载地图选定部分的 OSM 图块

2023-12-25

我想使用 Openlayer OSM 图层以单个缩放级别离线下载地图的选定部分的地图。我有地图的四个角,即地图的显示部分。

但需要获取所有图块图像或四个角之间的图块。我回顾了一些例子:

Openlayers获取鼠标下图块的图片url https://stackoverflow.com/questions/48760785/openlayers-get-the-image-url-of-the-tile-under-the-mouse

https://gis.stackexchange.com/questions/167792/how-to-retrieve-the-tile-url-in-openlayers-3 https://gis.stackexchange.com/questions/167792/how-to-retrieve-the-tile-url-in-openlayers-3

但我需要在客户单击按钮时下载图块。谁能帮帮我吗。


下面是一个将图块保存为数据 url 以供以后使用的简单示例。如果您需要保存的图块在关闭并重新打开浏览器后保持可用,请将 sessionStorage 替换为 localStorage。

// load OSM zoom level 8 tiles for Switzerland to data urls

var extent = ol.proj.transformExtent([5.9,45.8,10.55,47.85],'EPSG:4326','EPSG:3857');
var zoom = 8;

var source = new ol.source.OSM();

source.getTileGrid().forEachTileCoord(extent, zoom, function(tileCoord) {
    var img = document.createElement("img");
    img.onload = function() {
        var canvas = document.createElement("canvas");
        canvas.width = source.getTileGrid().getTileSize(zoom);
        canvas.height = source.getTileGrid().getTileSize(zoom);
        var ctx = canvas.getContext("2d");
        ctx.drawImage(img, 0, 0);
        sessionStorage.setItem('OSM_' + tileCoord[0] + '_' + tileCoord[1] + '_' + (-tileCoord[2]-1), canvas.toDataURL());
        img.remove();
        canvas.remove();
    };
    img.crossOrigin = "Anonymous";
    img.src = source.getTileUrlFunction()(tileCoord);
});

// wait a few seconds to ensure data urls are ready, then create a map to use them

setTimeout(function(){

    map = new ol.Map({
        target: 'map',
        layers: [
            new ol.layer.Tile({
                extent: extent,
                source: new ol.source.XYZ({
                    attributions: ol.source.OSM.ATTRIBUTION,
                    maxZoom: 8,
                    minZoom: 8,
                    tileUrlFunction: function(tileCoord) {
                        return sessionStorage.getItem('OSM_' + tileCoord[0] + '_' + tileCoord[1] + '_' + (-tileCoord[2]-1));
                    }
                }),
            })
        ],
        view: new ol.View({
            center: ol.extent.getCenter(extent),
            zoom: 8
        }),
        controls: ol.control.defaults({
            attributionOptions: { collapsible: false },
        })
    });

}, 3000);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何下载地图选定部分的 OSM 图块 的相关文章

  • Openstreetmap 反向地理编码

    有谁知道有哪些开源项目允许对 Open StreetMap 数据进行反向地理编码查找 我不想使用现有的托管网络服务 例如提名 https wiki openstreetmap org wiki Nominatim因为我的数据集很大 您可以安
  • 调用 setCenter 后 OpenLayers,地图仍处于 0,0 位置

    我尝试通过 setCenter 方法设置地图中心 但仍然不起作用 地图不动 我尝试使用从投影到地图投影的变换 但没有成功 这是代码的一部分 谢谢
  • 如何在android中使用openstreetmap通过纬度和经度获取城市名称[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 在我的应用程序中 我使用 osm 而不是谷歌地图 我有纬度和经度 所以从这里我将如何查询从 osm 数据库获取城市名称 请帮助我 我正在使
  • OpenLayers 通过 Popups 窃取点击事件

    为什么 FramedCloud 弹出窗口会窃取弹出窗口内的点击事件 current popup new OpenLayers Popup FramedCloud featurePopup f geometry getBounds getCe
  • 如何获取OSM节点或路径的城市和国家?

    我正在解析 OSM 数据的国家 地区摘录 我想要的是获取该点或方式所属的城市和国家的名称 这可能吗 我怎样才能获取这些信息 要检索此信息 您需要地理编码器 除非该节点具有相关的地址标签 https wiki openstreetmap or
  • 读取 .osm.pbf 或将 .osm.pbf 转换为 .osm

    我想从a中提取一些信息 osm pbf文件 我翻阅了OpenStreetMapX jl包但没有找到读取此数据的函数 我想知道是否有人知道读取这些数据的方法 或者有没有办法转换 osm pbf to osm文件 以便我发现只需使用get ma
  • 使用 OSMnx 提取约束多边形

    我正在使用 OSMnx 包来解决以下任务 地图上有一个由纬度和经度定义的点 X 我们需要检测包含该点 X 并受到相邻道路约束的多边形 所以基本上点 X 位于多边形内部 相邻道路将是该多边形的边界 到目前为止 我只设法在地图上绘制图形的可视化
  • 如何使用openlayers在浏览器中显示高分辨率图像

    我正在尝试使用 openlayers 5 在浏览器中显示高分辨率图像 我找到了一个有关如何使用 Zoomify 创建图像图块并使用 openlayers 地图渲染它的示例 但我无法将它用于我自己的形象 我对此完全陌生 我问的问题可能很琐碎
  • Overpass api 来查找坐标的速度限制?

    我收到车辆的坐标 我需要找出该车辆所在道路的速度限制 我知道你可以找到某个有界框的最大速度 如下所示 www overpass api de api xapi 最大速度 bbox 5 6283473 50 5348043 5 6285261
  • 为什么 MKTileOverlay 在 ios、swift4 中为 openstreet 地图一遍又一遍地重复相同的图块

    我正在将 OpenStreet 地图与我们自己的 iOS 地图服务器一起使用 对于 iOS 我找不到任何可以与我们的开放 StreetMap 服务器一起使用的第三方库 免费或付费 然后我决定使用 MKTileOverlay 来使用 MKMa
  • 创建 OpenLayer 圈时出现问题

    如何在openlayer地图中画一个圆 我尝试过不同的方式 但它不起作用 请帮助我编写代码 我使用了以下代码 但它创建了多边形 var p1 new OpenLayers Geometry Point 439000 114000 var p
  • 如何使用 Openlayers 文本图层编辑弹出窗口

    我正在使用 Openlayers 创建一个包含大约 1000 多个点的地图 目前 当我单击一个点的图标时 该点的描述会显示在弹出窗口中 要退出弹出窗口 我需要再次单击同一点的图标 有没有办法修改此代码 以便我可以按关闭按钮或单击地图上的任意
  • 使用 Ordnance Survey/Openlayers api 拖动标记

    我创建了一个网站使用 Ordnance Survey 我认为这称为 OpenSpace 生成的基于 OpenLayers 的 api 我已经有了它 因此您可以单击地图来添加标记 然后我希望能够单击标记并将其拖动到地图周围 有没有一种简单的方
  • Overpass API Android 示例?

    为了进行研究 我们必须开发一款基于位置的 Android 游戏 目前我们使用OSMDroid来显示地图 玩家必须收集资源 如木材 石头 这些资源当前以硬编码的经 纬度存储在我们的后端 并将通过 setMarker 添加到当前地图上 为了在全
  • Leafletjs GeoJSON 层不适用于来自自然地球的地图数据

    我正在使用 leafletjs 使用 OSM 瓷砖绘制地理地图 我使用以下 GeoJSON 作为地图层http code highcharts com mapdata 1 0 0 custom world js http code high
  • OpenLayers 中的复合(complex)功能

    我在玩了一下 OpenLayers 想知道是否有一种方法可以创建自定义 功能 我想要完成的是一个具有多个部分的功能 或者是否有一种方法可以将多个功能 绑定 在一起 我想要实现的目标是 我想在地图上的某个位置显示各种数量的数据 并且我想将其包
  • 打开图层地图,经纬度获取地址

    我正在尝试获取带有经度和纬度的地址 城市 邮政编码 街道地址 但我不知道如何获取 我正在使用开放图层 当我单击地图的一部分时 会获取该位置的经度和纬度 有人有解决方案吗 div class map div
  • 在 JMapViewer 中绘制折线 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 Java 中的 OpenStreetMap 和 JMapViewer 进行工作 我可以使用JMapViewer绘制多边形和矩形
  • 如何从 OpenStreetMap 道路中去除水?

    我想从 OpenStreetMap 获取旧金山的轮廓 有一个SF 的关系 http www openstreetmap org relation 111968 但它含有大量的水 这使得城市居民无法识别 OSM 中是否有更好的旧金山多边形 有
  • 开放层。如何刷新集群?

    我动态地将功能添加到集群中 但是 据我所知 集群不起作用 我的图层定义如下 var source new ol source Vector var cluster new ol source Cluster distance 10 sour

随机推荐

  • 嵌套 dokey 宏

    我只是想知道是否有一种方法可以从另一个 doskey 宏中调用一个 doskey 宏 我尝试了以下方法 但它不起作用 gt doskey cleanpix PATH cleanpix bat gt doskey cp cleanpix 我究
  • NativeBase 选项卡强制 RTL 问题 - 修复

    当我执行forceRtl 时 我遇到了本机基本选项卡的问题 一切正常 但只有本机基础在初始加载时不显示任何内容 所以我有一个临时解决方案 在native base src basic Tabs index js中 import I18nMa
  • SSAS 分区切片表达式

    我按最近 13 个月对多维数据集进行分区 然后使用旧分区来保存较早的月份 我已经成功创建了动态分区 但现在我需要为每个分区添加一个动态切片 我想我可以在分区切片表达式中使用它 Dim Date Month CStr Month Now la
  • Java 中的 var 关键字

    对于Java 10或 我们可以使用var关键字进行声明 在初始化时 编译器将推断类型 当我实例化类并将其分配给声明的变量时会发生什么var 是接口的实现吗 将推断哪种类型 接口还是实现 我的2美分来纠正问题和答案 The var is 不是
  • Leetcode 入室抢劫犯

    我正在尝试入室抢劫者 https leetcode com problems house robber leetcode 上的问题 dp 问题 来自一位 GTX 用户的解决方案看起来简单而优雅 int rob vector
  • 以客户身份通过​​ iOS 应用程序登录 BigCommerce API

    我正在为 BigCommerce com 上的商店开发 iOS 应用程序 我已成功从 BigCommerce API 检索产品列表 并且还使用该列表创建了一个新用户 创建用户 https developer bigcommerce com
  • Flutter:自动路由:RouteGuard 在 AutoTabsScaffold 中不起作用

    我正在尝试为我的 AutoTabsScaffold bottom nav 添加身份验证防护 但它不起作用 它可以在其他导航页面中工作 但不仅仅在我的登陆页面内 其中 AutoTabsScaffold 底部导航位于 我在这里遗漏了什么吗 us
  • Apache mod_rewrite 域到子域?

    我有这个地址http www example com http www example com并有这个页面http www example com world http www example com world 我可以用 mod rewr
  • android:什么时候使用onStart()、onStop()?

    我读过几篇描述两者之间区别的帖子onStart and onResume onStart 当活动变得可见时调用 onResume 当活动准备好与用户交互时调用 美好的 我总是只是添加代码onPause and onResume 并且从不关心
  • htaccess子域

    如何使用 htaccess 做到这一点 subdomain domain com gt domain com subdomain no redirect on client side domain com subdomain gt subd
  • jqGrid 在第一次加载时排序

    我的网格有以下代码 我使用与数据源位于同一目录中的 XML 文件 var handsetGrid products jqGrid url catalog xml datatype xml colNames SKU Name Brand De
  • 操作错误:没有这样的表

    所以我正在开发我的应用程序 并向我的模型添加了一个 slugfield 然后像往常一样继续makemigrations 并且出现了巨大的红色错误墙 Traceback most recent call last File C Users A
  • 在开始编码之前如何规划我的基于网络的项目? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我和我的朋友开始作为合作伙伴一起工作 我们决定制作一个又一个的 Kick as 网站 我们写下了大约 100 个想法 是的 我们首先在
  • 如何在 python 中解压非常大的文件?

    使用 python 2 4 和内置ZipFile库 我无法读取非常大的 zip 文件 大于 1 或 2 GB 因为它想要将未压缩文件的全部内容存储在内存中 是否有另一种方法可以做到这一点 使用第三方库或其他一些黑客 或者我必须 掏出 并以这
  • Enzyme:如何测试作为 prop 传递的 onSubmit 函数?

    我对酶还很陌生 我有两个正在测试的组件 form jsx const LoginForm style handleSubmit gt return
  • 时间:2019-05-09 标签:c#sizeofdecimal?

    不清楚十进制类型的 sizeof 字节大小是否会像 SQL Server 中那样因精度而变化 C 类型的精度变量是 十进制 吗 我不想打开不安全代码来仅对十进制类型调用 sizeof 你会如何处理这个问题 十进制关键字表示 128 位数据类
  • 是否可以将 REST 和消息传递结合起来用于微服务?

    我们拥有基于微服务架构的应用程序的第一个版本 我们使用 REST 进行外部和内部通信 现在我们想从CP CAP定理 切换到AP 并使用消息总线进行微服务之间的通信 关于如何基于Kafka RabbitMQ等创建事件总线的信息有很多 但我找不
  • 如何在 Python 中使用 M2Crypto 重新创建以下签名命令行 OpenSSL 调用?

    这在命令行中完美运行 我想在 Python 代码中使用 M2Crypto 执行相同的操作 openssl smime binary sign signer certificate pem inkey key pem in some file
  • BLE血糖仪

    我正在尝试从血糖仪获取数据 但无法在互联网上找到有关实施的良好资源 这是我到目前为止能够实现的 我正在使用 BluetoothAdapter LeScanCallback 接口扫描设备 Override public void onLeSc
  • 如何下载地图选定部分的 OSM 图块

    我想使用 Openlayer OSM 图层以单个缩放级别离线下载地图的选定部分的地图 我有地图的四个角 即地图的显示部分 但需要获取所有图块图像或四个角之间的图块 我回顾了一些例子 Openlayers获取鼠标下图块的图片url https