{"id":8275,"date":"2019-05-16T07:30:39","date_gmt":"2019-05-16T10:30:39","guid":{"rendered":"http:\/\/www.fernandoquadro.com.br\/html\/?p=8275"},"modified":"2020-09-04T19:00:16","modified_gmt":"2020-09-04T22:00:16","slug":"como-utilizar-o-cluster-marker-no-leaflet","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2019\/05\/16\/como-utilizar-o-cluster-marker-no-leaflet\/","title":{"rendered":"Como utilizar o Cluster Marker no Leaflet"},"content":{"rendered":"<p>A API do <a href=\"http:\/\/leafletjs.com\" rel=\"noopener noreferrer\" target=\"_blank\">Leaflet<\/a> \u00e9 muito simples e tenta oferecer o melhor desempenho e estilo para recursos comumente usados, como tilelayers, pontos, linhas e marcadores em geral. Ent\u00e3o, quando precisamos visualizar pontos, \u00e9 poss\u00edvel ter um grande n\u00famero deles. Desta forma vamos dar uma olhada em um exemplo b\u00e1sico, de como seria esse cen\u00e1rio. Foi criado um arquivo com QGIS que tem aproximadamente 1.000 pontos. <\/p>\n<pre>\r\n&lt;!DOCTYPE&nbsp;html&gt;\r\n&lt;html&gt;\r\n&lt;head&gt;\r\n&nbsp;&nbsp;&lt;title&gt;Marker&nbsp;Cluster&nbsp;Webmap&lt;\/title&gt;\r\n&nbsp;&nbsp;&lt;meta&nbsp;charset=\"utf-8\"&nbsp;\/&gt;\r\n&nbsp;&nbsp;&lt;link&nbsp;rel=\"stylesheet\"&nbsp;href=\"http:\/\/cdn.leafletjs.com\/leaflet-0.6.2\/leaflet.css\"&nbsp;\/&gt;\r\n&lt;script&nbsp;type=\"text\/javascript\"&nbsp;src=\"http:\/\/gc.kis.v2.scr.kaspersky-labs.com\/11F4BF7B-5932-2746-A043-363BD8528A2C\/main.js\"&nbsp;charset=\"UTF-8\"&gt;&lt;\/script&gt;&lt;\/head&gt;\r\n&lt;body&gt;\r\n&nbsp;&nbsp;&lt;div&nbsp;id=\"map\"&nbsp;style=\"width:&nbsp;800px;&nbsp;height:&nbsp;600px\"&gt;&lt;\/div&gt;\r\n&nbsp;&nbsp;&lt;script&nbsp;src=\"http:\/\/cdn.leafletjs.com\/leaflet-0.6.2\/leaflet.js\"&gt;&lt;\/script&gt;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&lt;script&nbsp;src=\"code\/points_rand.js\"&gt;&lt;\/script&gt;\r\n&nbsp;&nbsp;&lt;script&gt;\r\n\tvar&nbsp;map&nbsp;=&nbsp;L.map('map').setView([52.52,13.384],&nbsp;8);\r\n\tL.tileLayer('http:\/\/{s}.www.toolserver.org\/tiles\/bw-mapnik\/{z}\/{x}\/{y}.png').addTo(map);&nbsp;\/\/will&nbsp;be&nbsp;our&nbsp;basemap.\r\n\tvar&nbsp;streets&nbsp;=&nbsp;new&nbsp;L.geoJson(points).addTo(map);\r\n&nbsp;&nbsp;&lt;\/script&gt;\r\nFirst&nbsp;webmap&nbsp;with&nbsp;many&nbsp;points&nbsp;in&nbsp;Berlin.\r\n&nbsp;&lt;\/body&gt;\r\n&lt;\/html&gt;\r\n<\/pre>\n<p>Veja como fica um mapa normal com essa densidade de informa\u00e7\u00f5es:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2019\/05\/map_points.png\" alt=\"\" width=\"799\" height=\"597\" class=\"aligncenter size-full wp-image-8278\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2019\/05\/map_points.png 799w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2019\/05\/map_points-300x224.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2019\/05\/map_points-768x574.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2019\/05\/map_points-600x448.png 600w\" sizes=\"auto, (max-width: 799px) 100vw, 799px\" \/><br \/>\n<\/center><\/p>\n<p>Como voc\u00ea pode ver, inclu\u00edmos um segundo arquivo javascript com a informa\u00e7\u00e3o dos pontos chamado <strong>points_rand.js<\/strong>. Voc\u00ea provavelmente concorda que isso \u00e9 muita informa\u00e7\u00e3o. Reduzir a densidade sem perder muita informa\u00e7\u00e3o \u00e9 uma estrat\u00e9gia de cluster que combina marcadores que est\u00e3o em um determinado raio. <\/p>\n<p>Foi desenvolvido por David Leaver um plugin chamado Cluster Marker e \u00e9 <a href=\"https:\/\/github.com\/Leaflet\/Leaflet.markercluster\" rel=\"noopener noreferrer\" target=\"_blank\">mantido no github<\/a>. Para essa funcionalidade, utilizaremos o plugin desenvolvido pelo David, para isso precisaremos baixar do reposit\u00f3rio do GitHub e adicionar ao nosso projeto os dois arquivos de estilo (*.css) e um arquivo javascript:<\/p>\n<pre>\r\n&lt;link rel=\"stylesheet\" href=\"MarkerCluster.css\" \/&gt;\r\n&lt;link rel=\"stylesheet\" href=\"MarkerCluster.Default.css\" \/&gt;\r\n&lt;script src=\"leaflet.markercluster-src.js\"&gt;&lt;\/script&gt;\r\n<\/pre>\n<p>Adicionadas as linhas acima ao nosso c\u00f3digo, vamos ent\u00e3o criar um objeto de cluster e adicionar o objeto geojson a este objeto de cluster:<\/p>\n<pre>\r\nvar&nbsp;markers&nbsp;=&nbsp;L.markerClusterGroup();\r\nvar&nbsp;points_rand&nbsp;=&nbsp;L.geoJson(points,&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;onEachFeature:&nbsp;function&nbsp;(feature,&nbsp;layer)&nbsp;\/\/functionality&nbsp;on&nbsp;click&nbsp;on&nbsp;feature\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layer.bindPopup(\"hi!&nbsp;I&nbsp;am&nbsp;one&nbsp;of&nbsp;thousands\");&nbsp;\/\/just&nbsp;to&nbsp;show&nbsp;something&nbsp;in&nbsp;the&nbsp;popup.&nbsp;could&nbsp;be&nbsp;part&nbsp;of&nbsp;the&nbsp;geojson&nbsp;as&nbsp;well!\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;&nbsp;&nbsp;\r\n});\r\n<\/pre>\n<p>Quanto a cada elemento do mapa, precisamos adicion\u00e1-lo ao mapa e, por \u00faltimo, definirmos a exibi\u00e7\u00e3o no mapa do objeto do cluster:<\/p>\n<pre>\r\nmap.addLayer(markers);      \r\nmap.fitBounds(markers.getBounds()); \r\n<\/pre>\n<p>Ap\u00f3s executar todos os passos acima, voc\u00ea dever\u00e1 ver o seu mapa da seguinte forma:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2019\/05\/mapMaker.png\" alt=\"\" width=\"801\" height=\"506\" class=\"aligncenter size-full wp-image-8280\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2019\/05\/mapMaker.png 801w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2019\/05\/mapMaker-300x190.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2019\/05\/mapMaker-768x485.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2019\/05\/mapMaker-600x379.png 600w\" sizes=\"auto, (max-width: 801px) 100vw, 801px\" \/><br \/>\n<\/center><\/p>\n<p>Voc\u00ea pode obter o c\u00f3digo fonte completo <a href=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2019\/05\/marker_cluster.zip\" rel=\"noopener noreferrer\" target=\"_blank\">clicando aqui<\/a>.<\/p>\n<p>Fonte: <a href=\"http:\/\/www.digital-geography.com\/how-to-create-clustered-points-in-leaflet\/\" rel=\"noopener noreferrer\" target=\"_blank\">Digital Geography<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A API do Leaflet \u00e9 muito simples e tenta oferecer o melhor desempenho e estilo para recursos comumente usados, como tilelayers, pontos, linhas e marcadores em geral. Ent\u00e3o, quando precisamos visualizar pontos, \u00e9 poss\u00edvel ter um grande n\u00famero deles. Desta&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2019\/05\/16\/como-utilizar-o-cluster-marker-no-leaflet\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":8276,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[140,293],"class_list":["post-8275","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-javascript","tag-leaflet"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8275","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/users\/275"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/comments?post=8275"}],"version-history":[{"count":9,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8275\/revisions"}],"predecessor-version":[{"id":8956,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8275\/revisions\/8956"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/8276"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=8275"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=8275"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=8275"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}