ember-leaflet
v6.0.0
Published
Easy and declarative mapping for ember.
Readme
ember-leaflet

Compatibility
- Ember.js v4.12 or above
- Ember CLI v4.12 or above
- Leaflet v1
- Node.js v22 or above
Installation
To install Ember Leaflet run:
ember install ember-leafletThis will also add the leaflet package to your project.
Support, Questions, Collaboration
Join Ember on Discord
Usage
Documentation and examples are hosted at https://adopted-ember-addons.github.io/ember-leaflet/. Please file any issues if you see that something can be improved.
Production Builds
In your ember-cli-build.js add the following snippet:
let app = new EmberApp(defaults, {
// Add options here
fingerprint: {
exclude: [
'images/layers-2x.png',
'images/layers.png',
'images/marker-icon-2x.png',
'images/marker-icon.png',
'images/marker-shadow.png'
]
}
});ember-cli does fingerprinting (appending an md5 checksum to the end of every file) for production builds by default (http://ember-cli.com/user-guide/#fingerprinting-and-cdn-urls). Exclude the leaflet assets so that your production build produces them correctly.
Overview
Web apps frequently need to display geographic data, especially if it has a direct relationship with the real world. That isn't new, and has been done previously in all kinds of formats, particularly with raster and vector data.
Ember apps naturally may have the same requirements and until now, devs have been either using mapping libraries outside of ember scope, or using previous versions of ember-leaflet.
The problem was that both approaches were hard. Frequently existing libraries have regular javascript imperative APIs and html in mind. We all know and love how ember makes us flow the data in our app. Previous approaches simply didn't fit where ember really shines: templates, actions, routing, and above all, expressiveness.
Ember-leaflet allows you to express your maps right in your templates. Also, it is streamlined for ember in general. You have things like actions, components and the ability to use regular handlebars helpers like {{#if or {{#each.
We can't go wrong with delegating the mapping part to the battle tested, performant and lightweight Leaflet library.
So, let the mapping begin.
Examples
Think of your map as a set of layers inside a container. Your main container will be the <LeafletMap> component. This component creates the map container where your tiles, vectors and markers will be added to. Let's see an example of how it looks:
<LeafletMap @lat={{this.lat}} @lng={{this.lng}} @zoom={{this.zoom}} as |layers|>
<layers.tile @url='http://{s}.basemaps.cartocdn.com/light_all/{z}/{x}/{y}.png' />
<layers.marker @location={{this.emberConfLocation}} as |marker|>
<marker.popup>
<h3>The Oregon Convention Center</h3>
777 NE Martin Luther King Jr Blvd<br />
Portland, OR 97232
</marker.popup>
</layers.marker>
<layers.marker @location={{this.hotel}} as |marker|>
<marker.popup>
<h3>Hotel</h3>
</marker.popup>
</layers.marker>
</LeafletMap>Contributing
See the Contributing guide for details.
License
This project is licensed under the MIT License.
