I'm using leaflet + leaflet-draw + @ngx-leaflet + @ngx-leaflet-draw in an Angular application.
I've tried everything, versions change, importing the modules .forRoot() and not, adding the js files in my angular.json file, remove node_modules, reinstall them, followed the guide on @ngx-leaflet-draw from scratch a hundred times.
No matter what I do, when I try to draw a rectangle it always throws this error:

Even though the handlers are present and ALL of them works perfectly except for the rectangle one (the only one I need)

I don't even know how to provide you with more specific informations if not for this:
leaflet: 1.5.1leaflet-draw: 1.0.4@asymmetrik/ngx-leaflet: 6.0.1@asymmetrik/ngx-leaflet-draw: 5.0.1I'm stuck on this stupid error and I don't know how to get over it. Please help!
here's a repo for demo: https://github.com/caiusCitiriga/leaflet-rect-drawer
There are a couple of issues:
square is not a draw option. The correct option is rectangle. Additionally, all of the handlers are enabled by default. So, you only need to turn off the ones you don't want.
So, I think what you want is in your app.component.ts file:
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
}
};
The above will make sure that marker, circle, rectangle, and polyline are enabled and the others are disabled. You want to make sure to add the leaflet assets png files to the list of assets being exported by Angular CLI in your angular.json file.
There's something weird about leaflet-draw's build that's causing the source maps to not work. To get them working, I had to directly import the leaflet.draw-src.js file.
At the top of app.component.ts, I added:
import * as L from 'leaflet';
import '../../node_modules/leaflet-draw/dist/leaflet.draw-src.js'; // add this
That allows you to put a breakpoint in the leaflet-draw code to figure out what's going on. Upon doing that, it looks like there's a variable called type that isn't declared before it's assigned to. The code is being run in strict mode, so this will throw an exception. This looks to be a bug in leaflet-draw.
First, you can disable showArea, which will prevent the problem code from running. To do this, modify the 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
}
};
This isn't a great solution, cause you lose the showArea functionality.
The other solution is to disable strict mode for the Typescript compiler.
To do this, edit your tsconfig.json and tsconfig.app.json files, adding "noImplicitUseStrict": true under the compilerOptions property.
This solves the problem, but now you're not running your code in strict mode, which can lead to other issues.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With