{"id":7053,"date":"2018-01-19T07:30:47","date_gmt":"2018-01-19T10:30:47","guid":{"rendered":"http:\/\/www.fernandoquadro.com.br\/html\/?p=7053"},"modified":"2018-01-17T13:52:56","modified_gmt":"2018-01-17T16:52:56","slug":"testando-softwares-para-big-data-spatial-parte-5","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2018\/01\/19\/testando-softwares-para-big-data-spatial-parte-5\/","title":{"rendered":"Testando softwares para Big Data Spatial &#8211; Parte 5"},"content":{"rendered":"<p>Este \u00e9 o \u00faltimo post desta s\u00e9rie intitulado &#8220;Testando softwares para Big Data Spatial&#8221;. Para concluir este artigo, vamos fala um pouco sobre a disponibiliza\u00e7\u00e3o das informa\u00e7\u00f5es atrav\u00e9s de uma aplica\u00e7\u00e3o WebMap, que foi desenvolvida utilizando o Leaflet, mas poderia ter sido utilizada qualquer outra biblioteca para desenvolvimento de mapas na Web, como o OpenLayers, por exemplo.<\/p>\n<p><strong>1. Web Mapping com Leaflet<\/strong><\/p>\n<p>Este visualizador pode desenhar o mapa em dois estilos, desenhando um Heatmap (mapa de calor) ou desenhando uma camada tem\u00e1tica. Ele faz todas as observa\u00e7\u00f5es ou medidas de uma data \u00fanica, e at\u00e9 mesmo entre todas as datas dispon\u00edveis (Clique na imagem para ver o v\u00eddeo).<\/p>\n<p><a href=\"http:\/\/vimeo.com\/238173122\" rel=\"noopener\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/webmap_leaflet-1024x537.png\" alt=\"\" width=\"676\" height=\"355\" class=\"aligncenter size-large wp-image-7055\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/webmap_leaflet-1024x537.png 1024w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/webmap_leaflet-300x157.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/webmap_leaflet-768x403.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/webmap_leaflet-945x496.png 945w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/webmap_leaflet-600x315.png 600w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/webmap_leaflet.png 1673w\" sizes=\"auto, (max-width: 676px) 100vw, 676px\" \/><\/a><\/p>\n<p>Al\u00e9m disso, podemos verificar o desempenho com este visualizador, ele mistura o filtro espacial e temporal em uma consulta exclusiva. <\/p>\n<p>A op\u00e7\u00e3o mais f\u00e1cil, e talvez ideal, teria sido a aplica\u00e7\u00e3o do cliente executando solicita\u00e7\u00f5es <a href=\"http:\/\/docs.geoserver.org\/stable\/en\/user\/services\/wms\/reference.html\" rel=\"noopener\" target=\"_blank\">WMS GetMap<\/a>, mas vou executar solicita\u00e7\u00f5es ao GeoServer para buscar as geometrias para desenh\u00e1-las no cliente. Poder\u00edamos usar os pedidos <a href=\"http:\/\/docs.geoserver.org\/stable\/en\/user\/services\/wfs\/reference.html\" rel=\"noopener\" target=\"_blank\">WFS GetFeature<\/a> com os limites atuais do mapa (Ele gera um filtro BBOX espacial) e um filtro propertyIsEqual de uma data espec\u00edfica. Mas n\u00e3o devemos esquecer que estamos gerenciando grandes stores de dados que podem criar respostas GML ou JSON com grandes tamanhos e milhares e milhares de registros.<\/p>\n<p>Para evitar esse problema, foi desenvolvido um par de processos WPS, chamado &#8220;geowave: PackageFeatureLayer&#8221; e &#8220;geowave:PackageFeatureCollection&#8221;, que retornam a resposta em um fluxo bin\u00e1rio compactado. Voc\u00ea poderia usar outra l\u00f3gica de empacotamento, por exemplo, retornando uma imagem especial onde pixels codificam geometrias e atributos de recursos. Tudo \u00e9 para minimizar o tamanho da informa\u00e7\u00e3o e acelerar a digest\u00e3o dela na aplica\u00e7\u00e3o cliente.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_wps-869x1024.png\" alt=\"\" width=\"676\" height=\"797\" class=\"aligncenter size-large wp-image-7056\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_wps-869x1024.png 869w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_wps-255x300.png 255w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_wps-768x905.png 768w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_wps-945x1114.png 945w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_wps-600x707.png 600w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2018\/01\/geoserver_wps.png 1025w\" sizes=\"auto, (max-width: 676px) 100vw, 676px\" \/><\/p>\n<p>Os par\u00e2metros do WPS s\u00e3o: primeiro, o nome da camada no cat\u00e1logo GeoServer atual (A &#8220;SimpleFeatureCollection&#8221; para o processo geowave:PackageFeatureCollection&#8221;), BBOX e um filtro <a href=\"http:\/\/docs.geoserver.org\/latest\/en\/user\/tutorials\/cql\/cql_tutorial.html\" rel=\"noopener\" target=\"_blank\">CQL <\/a>opcional (neste caso, estou enviando algo semelhante ao &#8220;datetime_begin = 2017-06 -01 12:00:00&#8221;).<\/p>\n<p>N\u00e3o vou explicar o c\u00f3digo em detalhes, deixa o escopo deste guia. Se voc\u00ea quiser, voc\u00ea pode estud\u00e1-lo no link do github no final do artigo.<\/p>\n<p>O aplicativo cliente executa um <a href=\"https:\/\/www.w3schools.com\/html\/html5_webworkers.asp\" rel=\"noopener\" target=\"_blank\">WebWorker <\/a>executando uma solicita\u00e7\u00e3o WPS para nossa inst\u00e2ncia do GeoServer. O pedido executa o processo &#8220;geowave:PackageFeatureLayer&#8221; para minimizar o tamanho da resposta. Em seguida, o WebWorker descompacta o fluxo bin\u00e1rio, analisa-o para criar objetos javascript com pontos e atributos e, finalmente, devolv\u00ea-los ao segmento principal do navegador para desenhar. O aplicativo cliente processa esses objetos usando a biblioteca <a href=\"https:\/\/www.patrick-wied.at\/static\/heatmapjs\/\" rel=\"noopener\" target=\"_blank\">Heatmap.js<\/a> ou desenhando em um <a href=\"https:\/\/www.w3schools.com\/html\/html5_canvas.asp\" rel=\"noopener\" target=\"_blank\">Canvas HTML5<\/a> para criar uma camada tem\u00e1tica. Para este segundo estilo, o aplicativo cria algumas texturas on-the-fly dos \u00edcones coloridos para usar ao desenhar os pontos. Este truque permite que mapas mostrem milhares e milhares de pontos de forma bastante r\u00e1pida.<\/p>\n<p>Se nosso aplicativo cliente exigir desenhar milh\u00f5es de pontos, podemos mergulhar no <a href=\"https:\/\/es.wikipedia.org\/wiki\/WebGL\" rel=\"noopener\" target=\"_blank\">WebGL<\/a> e na \u00f3tima biblioteca do <a href=\"http:\/\/codeflow.org\/entries\/2013\/feb\/04\/high-performance-js-heatmaps\/\" rel=\"noopener\" target=\"_blank\">WebGL Heatmap<\/a> ou demonstra\u00e7\u00f5es fant\u00e1sticas de <a href=\"https:\/\/blog.mapbox.com\/how-i-built-a-wind-map-with-webgl-b63022b5537f\" rel=\"noopener\" target=\"_blank\">como construir um mapa com WebGL<\/a>.<\/p>\n<p>O c\u00f3digo-fonte do m\u00f3dulo WPS e o aplicativo cliente est\u00e3o <a href=\"https:\/\/github.com\/ahuarte47\/geobigdata\" rel=\"noopener\" target=\"_blank\">dispon\u00edveis aqui<\/a>. Espero que tenha gostado do artigo, e tenha consigo entender um pouco de como utilizar grandes volumes de dados (Big Data) com intelig\u00eancia geogr\u00e1fica (GIS).<\/p>\n<p><em>Este artigo e suas demais partes (<a href=\"http:\/\/www.fernandoquadro.com.br\/html\/2018\/01\/15\/testando-softwares-para-big-spatial-data-parte-1\/\" rel=\"noopener\" target=\"_blank\">1<\/a>, <a href=\"http:\/\/www.fernandoquadro.com.br\/html\/2018\/01\/16\/testando-softwares-para-big-data-spatial-parte-2\/\" rel=\"noopener\" target=\"_blank\">2<\/a>, <a href=\"http:\/\/www.fernandoquadro.com.br\/html\/2018\/01\/17\/testando-softwares-para-big-data-spatial-parte-3\/\" rel=\"noopener\" target=\"_blank\">3<\/a>, <a href=\"http:\/\/www.fernandoquadro.com.br\/html\/2018\/01\/18\/testando-softwares-para-big-data-spatial-parte-4\/\" rel=\"noopener\" target=\"_blank\">4<\/a>) \u00e9 uma tradu\u00e7\u00e3o livre do artigo originalmente escrito por <a href=\"https:\/\/www.linkedin.com\/pulse\/testing-big-spatial-data-software-hadoop-hbase-geowave-alvaro-huarte\/\" rel=\"noopener\" target=\"_blank\">Alvaro Huarte no seu perfil do LinkedIn<\/a>.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Este \u00e9 o \u00faltimo post desta s\u00e9rie intitulado &#8220;Testando softwares para Big Data Spatial&#8221;. Para concluir este artigo, vamos fala um pouco sobre a disponibiliza\u00e7\u00e3o das informa\u00e7\u00f5es atrav\u00e9s de uma aplica\u00e7\u00e3o WebMap, que foi desenvolvida utilizando o Leaflet, mas poderia&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2018\/01\/19\/testando-softwares-para-big-data-spatial-parte-5\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":7057,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[311,208,314,313],"class_list":["post-7053","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-big-data","tag-geoserver","tag-geowave","tag-hadoop"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7053","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=7053"}],"version-history":[{"count":7,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7053\/revisions"}],"predecessor-version":[{"id":7063,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7053\/revisions\/7063"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/7057"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=7053"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=7053"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=7053"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}