Leaflet是一个开源JavaScript库,适用于移动设备友好的跨浏览器交互式地图。对于R传单包,请使用r-leaflet标签。
如何使用 React-Leaflettilelayer 的访问令牌而不将其暴露在前端?
以下是需要访问令牌的 React Leaflet TileLayer 组件的样子: 这是需要访问令牌的 React Leaflet TileLayer 组件的样子: <TileLayer url='https://tile.jawg.io/jawg-sunny/{z}/{x}/{y}{r}.png?access-token=1234567890' attribution='<a href="https://jawg.io" title="Tiles Courtesy of Jawg Maps" target="_blank">© <b>Jawg</b>Maps</a> © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors' /> 但是即使我使用 .env 文件中的环境变量,例如 const jawgAccessToken = import.meta.env.VITE_JAWG_TOKEN <TileLayer url=`https://tile.jawg.io/jawg-sunny/{z}/{x}/{y}{r}.png?access-token=${jawgAccessToken}` attribution='<a href="https://jawg.io" title="Tiles Courtesy of Jawg Maps" target="_blank">© <b>Jawg</b>Maps</a> © <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors' /> 而不是硬编码它,它仍然会暴露,因为我的 React 组件位于前端。 如何在不暴露我的秘密令牌的情况下访问此瓦片层? 我正在考虑从前端到后端进行中继,例如将 TileLayer 组件中的 url 替换为后端的 url,其中我通过向 Jawg url 发出 GET 请求然后返回来处理 GET 请求到前端。但我怀疑这是否足够,而且这似乎是一个足够常见的问题(肯定其他人需要使用tilelayer访问令牌而不暴露它们?)我希望有人能够对此问题提供最佳实践答案。 谢谢! 看起来“最佳实践”答案是在创建访问令牌时添加 URL 限制
如何检测点是否位于具有立交桥的自然区域(或其他类型)多边形内部?
我试图弄清楚如何检测纬度/经度对(-25.70078,-54.44522)是否在自然区域多边形内。 有更好的解决方案吗? 到目前为止我有这样的事情: https://ov...
空白地图图块 - 错误 410 消失(Mapbox 和 Leaflet JS)
我正在使用Leaflet JS 和MapBox 来创建地图。我的浏览器显示如下: 地图根本不显示,我的地图图块是空白的。我在开发工具控制台中收到的错误是: 获取 https://...
React Leaflet 中带有弹出窗口的 1k+ 标记的性能问题
我有一个带有 React Leaflet 库的 React 应用程序,我正在地图上的一个小镇上为每个建筑物显示一个标记。我总共有大约 5k 个标记和一个仅显示
如何从 Visual Studio 2022 模板更新项目中的 Typescript 版本
我正在尝试使用 Leaflet Angular 库制作一个基本的 ASP.NET Core with Angular 项目,但是在为 Leaflet 添加 Typescript 定义后,由于大量语法,它无法编译,呃...
我遵循了这个例子:http://jsfiddle.net/abenrob/ZkC5M/。 当我单击标记时,我希望地图平移到该标记并将其放置在屏幕中心。我的代码如下,但是当我使用...
我遵循了这个例子:http://jsfiddle.net/abenrob/ZkC5M/。 当我单击标记时,我希望地图平移到该标记并将其放置在屏幕中心。我的代码如下,但是当我使用...
我想将 WMTS 加载到 R Leaflet 中。 我已经尝试了文件路径的多种变体,还尝试了“addWMSTiles()”,但到目前为止,没有任何内容加载到传单地图中。我可以加载...
如何获取可能是 LatLng 坐标的 LineString 或 MultiLineString 的要素的准确长度?
使用 leafletjs map.distance() 函数,我始终得到一个比应有值高约 40% 的值。这是因为我位于北纬56°吗? 使用 Overpass Turbo,我得到了 OpenStreetMap 导出...
Leafletjs - 如何获取可能是 LatLng 坐标的 LineString 或 MultiLineString 的要素的准确长度?
使用 leafletjs map.distance() 函数,我始终得到一个比应有值高约 40% 的值。这是因为我位于北纬56°吗? 使用 Overpass Turbo,我得到了 OpenStreetMap 导出...
我正在使用传单和 pointToLayer 函数显示 GeoJSON 层。到目前为止一切正常。 但我想根据 GeoJ 的属性以特定顺序显示我的点...
我有一个问题,在传单中获取像素坐标。任何帮助将不胜感激! 我想要实现的目标: 我想使用传单显示图像(没有图块 - 只是图像,非地理图...
我有一张传单地图,它给了我这个: 带有 GeoJSON 图层连接的传单地图...</desc> <question vote="0"> <p>我有一张传单地图,它给了我这个:</p> <p><a href="https://i.sstatic.net/rgs2PZkZ.png" rel="nofollow noreferrer"><img src="https://cdn.txt58.com/i/AWkuc3N0YXRpYy5uZXQvcmdzMlBaa1oucG5n" alt="enter image description here"/></a></p> <p></p><div data-babel-preset-ts="false" data-lang="js" data-hide="false" data-console="true" data-babel="false" data-babel-preset-react="false"> <div> <pre><code><!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Leaflet Map with GeoJSON Layer Control</title> <link rel="stylesheet" href="https://unpkg.com/<a href="/cdn-cgi/l/email-protection" data-cfemail="fd91989c9b919889bdccd3cad3cc">[email protected]</a>/dist/leaflet.css" /> <style> #map { height: 100vh; width: 100%; } </style> </head> <body> <div id="map"></div> <!-- Leaflet Library --> <script src="https://unpkg.com/<a href="/cdn-cgi/l/email-protection" data-cfemail="422e2723242e273602736c756c73">[email protected]</a>/dist/leaflet.js"></script> <!-- jQuery for fetching GeoJSON files --> <script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <script> // Initialize the map const map = L.map("map").setView([0, 0], 1); // Adjust coordinates and zoom level as needed // Add a base map layer const baseLayer = L.tileLayer( "https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png", { maxZoom: 19, attribution: "© OpenStreetMap", } ).addTo(map); </script> </body> </html></code></pre> </div> </div> <p></p> <p>我该怎么办:</p> <ul> <li>移除所有道路</li> <li>确保所有标签均为英语(不是像此快照中所示的阿拉伯语,也不是其他语言)</li> <li>仅标记和绘制国家/地区(以及美国各州)的边界</li> <li>显示水和土地</li> <li>不要显示地形信息,如树木/山脉/等..</li> </ul> <p>基本上,一张带有最少国家/州边界和标签的最小地图,就是这样(并删除除水和土地之外的所有地形信息)。</p> <p>如何使用 Leaflet 实现这一目标?</p> </question> <answer tick="false" vote="0"> <p>您可以使用自定义地图图块提供商,例如<pre><code>cartographic</code></pre>图块源(“CartoDB Positron”或“CartoDB Light”),该提供商专注于国家/州边界,无需额外地形。</p> <p>现在,这保留了标签和边界,但消除了道路和额外的地理特征。它默认为英文,仅显示陆地和水域,风格简约、干净。</p> <p>使用这种方法,您不需要对 Leaflet 设置进行太多修改;只需更改图块源和地图样式设置即可。</p> <p></p><div data-babel-preset-ts="false" data-lang="js" data-hide="false" data-console="true" data-babel="false" data-babel-preset-react="false"> <div> <pre><code><!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>Leaflet Minimal Country/State Map</title> <link rel="stylesheet" href="https://unpkg.com/<a href="/cdn-cgi/l/email-protection" data-cfemail="056960646369607145342b322b34">[email protected]</a>/dist/leaflet.css" /> <style> #map { height: 100vh; width: 100%; } </style> </head> <body> <div id="map"></div> <script src="https://unpkg.com/<a href="/cdn-cgi/l/email-protection" data-cfemail="94f8f1f5f2f8f1e0d4a5baa3baa5">[email protected]</a>/dist/leaflet.js"></script> <script> const map = L.map("map").setView([20, 0], 2); // cartoDB Positron base layer const baseLayer = L.tileLayer( "https://cartodb-basemaps-{s}.global.ssl.fastly.net/light_all/{z}/{x}/{y}.png", { maxZoom: 19, attribution: 'Map tiles by <a href="https://carto.com/attributions">CARTO</a>, under CC BY 3.0. Data by © OpenStreetMap contributors, ODbL', } ).addTo(map); </script> </body> </html></code></pre> </div> </div> <p></p> </answer> </body></html>
您可以通过 esri leaflet 要素图层 API 使用自托管(或其他非 arcGIS)数据吗?
我正在使用第三方应用程序,它允许用户将自定义地图图层添加到传单地图中。 我所能输入的只是地图图层的 url。 我查看了源代码,然后...
leaflet-src.js:1582未捕获(承诺中)TypeError:无法读取未定义的属性
这是我在将 Leaflet 标记添加到我的 Vue.js 应用程序时遇到的一个非常奇怪的错误。 下面是我正在使用的代码: 这是我在将 Leaflet 标记添加到我的 Vue.js 应用程序时遇到的一个非常奇怪的错误。 以下是我正在使用的代码: <LMarker v-for="listing in listings" :latlng="[listing.lat, listing.lon]" > <ChildVue /> </LMarker> 当我删除 ChildVue 时,代码可以完美运行。 当我重新添加到 ChildVue 时,我得到以下信息: leaflet-src.js:1582 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'lat') 这很奇怪,因为我的 ChildVue 目前看起来像这样,没有调用 lat: <template> <LPopup> <p>Hello world!</p> </LPopup> </template> <script> import { LPopup } from 'vue3-leaflet'; import 'leaflet/dist/leaflet.css'; export default { components: { LPopup }, }; </script> 为什么添加这个文件会导致这个错误? 另外,当我将 ChildVue.vue 的代码放入我的父级时,代码工作得很好...... 我发现的一个解决方案是将 LPopup 移动到父文件中。 这有效......但我不知道为什么这有效,而上述代码却无效。 解决方法: 家长: <LMarker v-for="listing in listings" :latlng="[listing.lat, listing.lon]" > <LPopup> <ChildVue /> </LPopup> </LMarker> 孩子: <template> <p>Hello world!</p> </template>
我在任何地方都找不到这个问题的答案,但是有没有一种好方法可以将“播放”按钮添加到传单范围滑块以自动滚动时间? 我有一个范围滑块来索引 y...
如何去除标记中的蓝色背景? 使用默认图标和自定义图标(具有透明背景的 png)会发生这种情况。 我做错了什么吗? 如何去除标记中的蓝色背景? 使用默认图标和自定义图标(具有透明背景的 png)会发生这种情况。 我做错了什么吗? <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@1/css/pico.min.css"> <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" /> <title>Map with OpenStreetMap</title> <style> #map { height: 400px; } </style> </head> <body> <div id="map"></div> <script src="https://unpkg.com/[email protected]/dist/leaflet.js"></script> <script> var map = L.map('map').setView([45.418393, 10.969487], 13); // Replace with your default map center L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© OpenStreetMap contributors' }).addTo(map); var marker = L.marker([45.410051797705904, 10.90330758434609]).addTo(map); </script> </body> </html> 我尝试了自定义图标,但仍然遇到同样的问题: var LogoPin = L.icon({ backgroundColor: 'transparent', iconUrl: './pin.png', shadowUrl: './shad.png', iconSize: [30, 47], // size of the icon [38,95] shadowSize: [50, 64], // size of the shadow*/ iconAnchor: [22, 94], // point of the icon which will correspond to marker's location shadowAnchor: [4, 62], // the same for the shadow*/ popupAnchor: [-3, -76] // point from which the popup should open relative to the iconAnchor }); L.marker([place.lat, place.lng], {icon: LogoPin}).addTo(map); 发现你正在使用pico.css(我相信适合你的特定目的) 供您参考,pico css 会将背景和边框颜色应用于许多元素,并且它会影响您的标记背景和边框 对于您的情况,如果您想删除标记周围的蓝色,方法之一是在 pico.css 下方添加以下内容: <style> [role=button],button,input[type=button],input[type=reset],input[type=submit]{ --background-color:none; --border-color:none; } [role=button]:is([aria-current],:hover,:active,:focus),button:is([aria-current],:hover,:active,:focus),input[type=button]:is([aria-current],:hover,:active,:focus),input[type=reset]:is([aria-current],:hover,:active,:focus),input[type=submit]:is([aria-current],:hover,:active,:focus){ --background-color:none; --border-color:none; } </style> 另一方面,如果您不需要阴影,请将其注释掉: // shadowUrl: '', // shadowSize: [50, 64], // shadowAnchor: [4, 62], 因此整个代码(标记周围没有背景颜色)但保留 pico.css 的使用将是 <!DOCTYPE html> <html lang="en"> <head> <base target="_top"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>Quick Start - Leaflet</title> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@picocss/pico@1/css/pico.min.css"> <link rel="shortcut icon" type="image/x-icon" href="docs/images/favicon.ico" /> <style> [role=button],button,input[type=button],input[type=reset],input[type=submit]{ --background-color:none; --border-color:none; } [role=button]:is([aria-current],:hover,:active,:focus),button:is([aria-current],:hover,:active,:focus),input[type=button]:is([aria-current],:hover,:active,:focus),input[type=reset]:is([aria-current],:hover,:active,:focus),input[type=submit]:is([aria-current],:hover,:active,:focus){ --background-color:none; --border-color:none; } </style> <link rel="stylesheet" href="https://unpkg.com/[email protected]/dist/leaflet.css" integrity="sha256-p4NxAoJBhIIN+hmNHrzRCf9tD/miZyoHS5obTRR9BMY=" crossorigin=""/> <script src="https://unpkg.com/[email protected]/dist/leaflet.js" integrity="sha256-20nQCchB9co0qIjJZRGuk2/Z9VM+kNiyxNV1lvTlZBo=" crossorigin=""></script> <style> html, body { height: 100%; margin: 0; } .leaflet-container { height: 400px; width: 600px; max-width: 100%; max-height: 100%; } </style> </head> <body> <div id="map" style="width: 600px; height: 400px;"></div> <script> const map = L.map('map').setView([51.505, -0.09], 13); const tiles = L.tileLayer('https://tile.openstreetmap.org/{z}/{x}/{y}.png', { maxZoom: 19, attribution: '© <a href="http://www.openstreetmap.org/copyright">OpenStreetMap</a>' }).addTo(map); // const marker = L.marker([51.5, -0.09]).addTo(map); const LeafIcon = L.Icon.extend({ options: { // shadowUrl: '', iconSize: [32, 32], // shadowSize: [50, 64], iconAnchor: [22, 94], // shadowAnchor: [4, 62], popupAnchor: [-3, -76] } }); const greenIcon = new LeafIcon({iconUrl: 'https://developers.google.com/maps/documentation/javascript/examples/full/images/library_maps.png'}); const mGreen = L.marker([51.5, -0.09], {icon: greenIcon}).bindPopup('StackOverflow.com is good').addTo(map); </script> </body> </html> 上述代码的结果
`在测试中不能使用 'in' 运算符在 null 中搜索 '_leaflet_id'
我正在使用 Vitest 1.4.0 和testing-library/react 14.2.1 实现集成测试,它呈现主应用程序组件。只需调用测试库 render() 函数,我就会得到这个呃...
我创建了一个带有页面导航栏和多个菜单选项的闪亮应用程序。一种选择是“密度图”,基本上是带有 addCircleMarkers 的传单。我想比较不同时间段的密度图,所以我
我创建了一个带有页面导航栏和多个菜单选项的闪亮应用程序。一种选择是“密度图”,基本上是带有 addCircleMarkers 的传单。我想比较不同时间段的密度图,所以我