Cai*_*ius 3 leaflet ngx-leaflet leaflet-draw
我leaflet + leaflet-draw + @ngx-leaflet + @ngx-leaflet-draw在 Angular 应用程序中使用。
我已经尝试了一切,版本更改,导入模块.forRoot()而不是,在我的angular.json文件中添加 js文件,删除 node_modules,重新安装它们,从头开始遵循@ngx-leaflet-draw 上的指南一百次。
无论我做什么,当我尝试绘制矩形时,它总是会引发此错误:
即使处理程序存在并且所有处理程序都可以完美运行,除了矩形(我唯一需要的一个)
如果不是这样,我什至不知道如何为您提供更具体的信息:
leaflet: 1.5.1leaflet-draw: 1.0.4@asymmetrik/ngx-leaflet: 6.0.1@asymmetrik/ngx-leaflet-draw: 5.0.1我被这个愚蠢的错误困住了,我不知道如何克服它。请帮忙!
这是演示的回购:https : //github.com/caiusCitiriga/leaflet-rect-drawer
有几个问题:
square不是平局选项。正确的选项是rectangle。此外,默认情况下启用所有处理程序。所以,你只需要关闭那些你不想要的。
所以,我认为你想要的是你的app.component.ts文件:
public drawOptions = {
position: 'topright',
draw: {
marker: {
icon: L.icon({
iconSize: [25, 41],
iconAnchor: [13, 41],
iconUrl: 'assets/marker-icon.png',
shadowUrl: 'assets/marker-shadow.png'
})
},
polygon: false,
circlemarker: false
}
};
Run Code Online (Sandbox Code Playgroud)
以上将确保启用标记、圆形、矩形和折线,而其他禁用。您要确保将传单资产 png 文件添加到文件中由 Angular CLI 导出的资产列表中angular.json。
Leaflet-draw 的构建有些奇怪,导致源映射无法工作。为了让它们工作,我不得不直接导入leaflet.draw-src.js文件。
在 的顶部app.component.ts,我添加了:
import * as L from 'leaflet';
import '../../node_modules/leaflet-draw/dist/leaflet.draw-src.js'; // add this
Run Code Online (Sandbox Code Playgroud)
这允许您在传单绘制代码中放置一个断点来弄清楚发生了什么。这样做后,看起来有一个名为的变量type在分配给它之前没有声明。代码在严格模式下运行,因此这将引发异常。这看起来是传单绘制中的一个错误。
首先,您可以禁用showArea,这将阻止问题代码运行。为此,请修改drawOptions:
public drawOptions = {
position: 'topright',
draw: {
marker: {
icon: L.icon({
iconSize: [25, 41],
iconAnchor: [13, 41],
iconUrl: 'assets/marker-icon.png',
shadowUrl: 'assets/marker-shadow.png'
})
},
rectangle: { showArea: false }, // disable showArea
polyline: true,
polygon: false,
circlemarker: false
}
};
Run Code Online (Sandbox Code Playgroud)
这不是一个很好的解决方案,因为您会失去 showArea 功能。
另一种解决方案是禁用 Typescript 编译器的严格模式。
为此,请编辑您的tsconfig.json和tsconfig.app.json文件,"noImplicitUseStrict": true在compilerOptions属性下添加。
这解决了问题,但现在您没有在严格模式下运行代码,这可能会导致其他问题。
传单绘制文件中存在打字问题
不幸的是,这个项目没有更多的支持
您可以更新节点包模块并解决问题,这是我的解决方案:
安装最后一个传单和传单绘制版本
为我 :
"leaflet": "^1.7.1",
"leaflet-draw": "^1.0.4",
Run Code Online (Sandbox Code Playgroud)
并安装补丁包:https://www.npmjs.com/package/patch-package
转到节点模块/传单绘制/dist/leaflet.draw.js
更新包
替换这部分代码:(我不能给你该行,因为它是一个缩小的文件,所以你必须按 ctrl+f 才能找到位置。)
{var a,n,o=L.Util.extend({},t,o)
Run Code Online (Sandbox Code Playgroud)
这样 :
{var type;var a,n,o=L.Util.extend({},t,o)
Run Code Online (Sandbox Code Playgroud)
节点模块包更新后,您必须创建节点模块补丁
为此,请使用 patch-package 命令:
npx patch-package leaflet-draw
Run Code Online (Sandbox Code Playgroud)
最后一件事是告诉 Angular 替换正确的 leaflet-draw 文件
为此,您必须进入 Angular package.json 并添加以下行:
"postinstall": "补丁包"
像这样:
"scripts": {
"postinstall": "patch-package",
"build": "ng build",
"lint": "ng lint",
"ng": "ng",
},
Run Code Online (Sandbox Code Playgroud)
删除您的节点模块包
进行新安装(npm install)
现在您可以使用矩形绘制功能
如果你只需要本地,你只需要更新leaflet-draw.js文件。
| 归档时间: |
|
| 查看次数: |
1228 次 |
| 最近记录: |