Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Создание интерактивных карт с Leaflet

fwdays
March 05, 2013

Создание интерактивных карт с Leaflet

fwdays

March 05, 2013
Tweet

More Decks by fwdays

Other Decks in Programming

Transcript

  1. • 2.5 года разработки • 6335 строки кода • 2081

    коммита от 109 разных человек
  2. • 2.5 года разработки • 6335 строки кода • 2081

    коммита от 109 разных человек • 3935 stars, 690 forks
  3. • 2.5 года разработки • 6335 строки кода • 2081

    коммита от 109 разных человек • 3935 stars, 690 forks • issues: 167 открытых, 1310 закрытых
  4. • 2.5 года разработки • 6335 строки кода • 2081

    коммита от 109 разных человек • 3935 stars, 690 forks • issues: 167 открытых, 1310 закрытых • pull requests: 25 открытых, 480 закрытых
  5. количество возможностей Images Markers Popups Vectors XYZ tiles GeoJSON WMS

    Layer groups Inertial pan Scroll zoom Dblclick zoom Box zoom Keyboard nav Pinch zoom Dbltap zoom Marker drag Pan anim Zoom anim Zoom buttons Attribution Layer switcher Scale Map rotation Fractional zoom WebGL renderer TMS WMTS TileCache MapGuide MapServer KaMap KaMapCache MultiMap Google Yahoo WorldWind Virtual Earth Bing Zoomify UTFGrid OSM ArcGIS ArcIMS GML GeoRSS KML WFS WFST ArcXML Atom CQL SLD GPX OSM XML OWS Context WKT XLS XML Drawing Editing Graticule Measure Pan control Minimap Permalink Clustering
  6. качество возможностей XYZ tiles WMS Images Markers Popups Vectors GeoJSON

    Layer groups Inertial pan Scroll zoom Dblclick zoom Box zoom Keyboard nav Pinch zoom Dbltap zoom Marker drag Pan anim Zoom anim Zoom buttons Attribution Layer switcher Scale + сторонние плагины
  7. var map = L.map('map') .setView([51.505, -0.09], 13); L.tileLayer( 'http://{s}.tile.osm.org/{z}/{x}/{y}.png') .addTo(map);

    L.marker([51.5, -0.09]) .addTo(map) .bindPopup('Hello World!') .openPopup(); максимально простой API
  8. <div id="map"></div> body { padding: 0; margin: 0; } html,

    body, #map { height: 100%; } инициализация карты
  9. var map = L.map('map') .setView([51.505, -0.09], 13); •фабрики классов •методы

    по цепочке •координаты массивами синтаксический сахар
  10. • таскание карты с инерцией (мышью и пальцами) • зум

    скроллом мыши • зум двойным кликом
  11. • таскание карты с инерцией (мышью и пальцами) • зум

    скроллом мыши • зум двойным кликом • зум к области (shift-drag)
  12. • таскание карты с инерцией (мышью и пальцами) • зум

    скроллом мыши • зум двойным кликом • зум к области (shift-drag) • зум жестами пальцев
  13. • таскание карты с инерцией (мышью и пальцами) • зум

    скроллом мыши • зум двойным кликом • зум к области (shift-drag) • зум жестами пальцев • навигация клавиатурой
  14. • таскание карты с инерцией (мышью и пальцами) • зум

    скроллом мыши • зум двойным кликом • зум к области (shift-drag) • зум жестами пальцев • навигация клавиатурой • анимации
  15. • таскание карты с инерцией (мышью и пальцами) • зум

    скроллом мыши • зум двойным кликом • зум к области (shift-drag) • зум жестами пальцев • навигация клавиатурой • анимации • кнопки зума
  16. • таскание карты с инерцией (мышью и пальцами) • зум

    скроллом мыши • зум двойным кликом • зум к области (shift-drag) • зум жестами пальцев • навигация клавиатурой • анимации • кнопки зума • строка копирайта
  17. var map = L.map('map', { crs: L.CRS.EPSG3857 }); • EPSG

    3857 (Spherical Mercator) системы привязки координат
  18. var map = L.map('map', { crs: L.CRS.EPSG3857 }); • EPSG

    3857 (Spherical Mercator) • EPSG 3395 (True Mercator) системы привязки координат
  19. var map = L.map('map', { crs: L.CRS.EPSG3857 }); • EPSG

    3857 (Spherical Mercator) • EPSG 3395 (True Mercator) • EPSG 4326 (Equirectangular) системы привязки координат
  20. var map = L.map('map', { crs: L.CRS.EPSG3857 }); • EPSG

    3857 (Spherical Mercator) • EPSG 3395 (True Mercator) • EPSG 4326 (Equirectangular) • Simple (flat maps) системы привязки координат
  21. var map = L.map('map', { crs: L.CRS.EPSG3857 }); • EPSG

    3857 (Spherical Mercator) • EPSG 3395 (True Mercator) • EPSG 4326 (Equirectangular) • Simple (flat maps) • ... (Proj4Leaflet plugin) системы привязки координат
  22. var map = L.map('map', {crs: L.CRS.EPSG4326}); var bluemarble = L.tileLayer.wms(

    'http://maps.opengeo.org/geowebcache/service/wms', { layers: 'bluemarble', attribution: '(c) NASA Blue Marble' }).addTo(map); WMS-слой
  23. свои иконки для маркеров var greenIcon = L.icon({ iconUrl: 'leaf-green.png',

    shadowUrl: 'leaf-shadow.png', iconSize: [38, 95], shadowSize: [50, 64], iconAnchor: [22, 94], shadowAnchor: [4, 62], popupAnchor: [-3, -76] }); L.marker([51.504, -0.159], {icon: greenIcon}) .addTo(map);
  24. HTML-иконки var icon = L.divIcon({ html: '<div><span>' + num +

    '</span></div>', className: 'marker-cluster-' + size, iconSize: [40, 40] });
  25. L.polygon([...], { weight: 2, opacity: 1, color: 'white', dashArray: '3',

    fillOpacity: 0.7, fillColor: '#FC4E2A' }).addTo(map); векторные слои
  26. var geojsonFeature = { "type": "Feature", "properties": { "name": "Coors

    Field", "amenity": "Baseball Stadium" }, "geometry": { "type": "Point", "coordinates": [-104.99404, 39.75621] } }; L.geoJson(geojsonFeature).addTo(map); GeoJSON
  27. function addInteraction(feature, layer) { layer.on({ mouseover: highlightFeature, mouseout: resetHighlight, click:

    zoomToFeature }); } L.geoJson(statesData, { style: style onEachFeature: addInteraction }).addTo(map); GeoJSON
  28. события L.Map: click dblclick mousedown mouseup mouseover mouseout mousemove contextmenu

    focus blur preclick load viewreset movestart move moveend dragstart drag dragend zoomstart zoomend autopanstart layeradd layerremove baselayerchange locationfound locationerror popupopen popupclose