{"id":5354,"date":"2016-05-18T07:54:25","date_gmt":"2016-05-18T10:54:25","guid":{"rendered":"http:\/\/www.fernandoquadro.com.br\/html\/?p=5354"},"modified":"2016-08-12T16:41:31","modified_gmt":"2016-08-12T19:41:31","slug":"introducao-ao-openlayers-3-basico","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2016\/05\/18\/introducao-ao-openlayers-3-basico\/","title":{"rendered":"Introdu\u00e7\u00e3o ao OpenLayers 3: B\u00e1sico"},"content":{"rendered":"<p>Estamos iniciando hoje uma s\u00e9rie de posts que destina-se a dar uma vis\u00e3o geral sobre o<a href=\"http:\/\/www.openlayers.org\" target=\"_blank\"> OpenLayers 3 (OL3)<\/a> como uma solu\u00e7\u00e3o de mapeamento web. Os exemplos que ser\u00e3o apresentados sup\u00f5e que voc\u00ea tem um servidor HTTP em execu\u00e7\u00e3o localmente.<\/p>\n<p>Os posts ser\u00e3o divididos em m\u00f3dulos, e cada m\u00f3dulo tem por base as li\u00e7\u00f5es aprendidas nos m\u00f3dulos anteriores e \u00e9 projetado para construir de forma iterativa a base de conhecimento do leitor.<\/p>\n<p>No OpenLayers, um mapa \u00e9 um conjunto de camadas e controles para lidar com a intera\u00e7\u00e3o do usu\u00e1rio. Um mapa \u00e9 gerado com tr\u00eas ingredientes b\u00e1sicos: marca\u00e7\u00e3o, declara\u00e7\u00f5es de estilo e inicializa\u00e7\u00e3o.<\/p>\n<p>Vamos dar uma olhada em um exemplo totalmente funcional de um mapa com OpenLayers 3:<\/p>\n<pre>&lt;!doctype&nbsp;html&gt;\r\n&lt;html&nbsp;lang=\"en\"&gt;\r\n&nbsp;&nbsp;&lt;head&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;link&nbsp;rel=\"stylesheet\"&nbsp;href=\"ol3\/ol.css\"&nbsp;type=\"text\/css\"&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;style&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#map&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;256px;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;512px;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/style&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;title&gt;OpenLayers&nbsp;3&nbsp;example&lt;\/title&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;src=\"ol3\/ol.js\"&nbsp;type=\"text\/javascript\"&gt;&lt;\/script&gt;\r\n&nbsp;&nbsp;&lt;\/head&gt;\r\n&nbsp;&nbsp;&lt;body&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;h1&gt;My&nbsp;Map&lt;\/h1&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;div&nbsp;id=\"map\"&gt;&lt;\/div&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;script&nbsp;type=\"text\/javascript\"&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;map&nbsp;=&nbsp;new&nbsp;ol.Map({\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;target:&nbsp;'map',\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layers:&nbsp;[\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;ol.layer.Tile({\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;title:&nbsp;\"Global&nbsp;Imagery\",\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source:&nbsp;new&nbsp;ol.source.TileWMS({\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;'http:\/\/maps.opengeo.org\/geowebcache\/service\/wms',\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;params:&nbsp;{LAYERS:&nbsp;'bluemarble',&nbsp;VERSION:&nbsp;'1.1.1'}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;],\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;view:&nbsp;new&nbsp;ol.View({\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;projection:&nbsp;'EPSG:4326',\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;center:&nbsp;[0,&nbsp;0],\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zoom:&nbsp;0,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxResolution:&nbsp;0.703125\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;});\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/script&gt;\r\n&nbsp;&nbsp;&lt;\/body&gt;\r\n&lt;\/html&gt;<\/pre>\n<p>Agora:<\/p>\n<p>1. Baixe o arquivo <a href=\"https:\/\/github.com\/openlayers\/ol3-workshop\/archive\/resources.zip\" target=\"_blank\">resources.zip<\/a> e salve-o na raiz do seu servidor web.<br \/>\n2. Copie o texto acima em um novo arquivo chamado map.html , e guarde-o na raiz da pasta que voc\u00ea fez o download.<br \/>\n3. Abra o mapa em seu navegador: @servidor_url@\/map.html<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2016\/05\/map1-1.png\" alt=\"map1\" width=\"511\" height=\"253\" class=\"aligncenter size-full wp-image-5361\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2016\/05\/map1-1.png 511w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2016\/05\/map1-1-300x149.png 300w\" sizes=\"auto, (max-width: 511px) 100vw, 511px\" \/><\/p>\n<p>Ap\u00f3s criado com sucesso o nosso primeiro mapa, n\u00f3s vamos olhar para cada uma dessas partes com um pouco mais de detalhes.<\/p>\n<p>1. Markup<\/p>\n<p>A marca\u00e7\u00e3o para o mapa no exemplo anterior gera um \u00fanico elemento do documento:<\/p>\n<p><code>&lt;div id=\"map\" &gt;&lt;\/ div&gt;<\/code><\/p>\n<p>Este elemento <strong>&lt;div&gt;<\/strong> ir\u00e1 servir como cont\u00eainer para o nosso mapa. Neste caso, n\u00f3s damos ao elemento um ID para que possamos referenci\u00e1-lo como o destino de nosso mapa.<\/p>\n<p>2. Estilo<\/p>\n<p>OpenLayers vem com um estilo padr\u00e3o que especifica como os elementos relacionados com o mapa devem ser representados. N\u00f3s inclu\u00edmos esse estilo na p\u00e1gina map.html quando inserimos a seguinte linha de c\u00f3digo: <\/p>\n<pre>&lt;link rel = \"stylesheet\" href = \"OL3 \/ ol.css\" type = \"text \/ css\"&gt;<\/pre>\n<p>O OpenLayers n\u00e3o faz quaisquer suposi\u00e7\u00f5es sobre o tamanho de seu mapa. Devido a isso, seguindo o estilo padr\u00e3o, precisamos incluir pelo menos uma declara\u00e7\u00e3o de estilo para dar ao mapa um tamanho.<\/p>\n<pre>&lt;link&nbsp;rel=\"stylesheet\"&nbsp;href=\"ol3\/ol.css\"&nbsp;type=\"text\/css\"&gt;\r\n&lt;style&gt;\r\n&nbsp;&nbsp;#map&nbsp;{\r\n&nbsp;&nbsp;&nbsp;&nbsp;height:&nbsp;256px;\r\n&nbsp;&nbsp;&nbsp;&nbsp;width:&nbsp;512px;\r\n&nbsp;&nbsp;}\r\n&lt;\/style&gt;\r\n<\/pre>\n<p>Neste caso, estamos especificando a largura (512px) e a altura (256px). As declara\u00e7\u00f5es de estilo est\u00e3o inclu\u00eddas no elemento &lt;head&gt; do nosso documento. Na maioria dos casos, as declara\u00e7\u00f5es de estilo relacionados com o mapa ser\u00e1 uma parte de um arquivo de estilos (CSS).<\/p>\n<p>3. Inicializa\u00e7\u00e3o<\/p>\n<p>O pr\u00f3ximo passo na gera\u00e7\u00e3o de seu mapa \u00e9 incluir o c\u00f3digo de inicializa\u00e7\u00e3o. No nosso caso, n\u00f3s inclu\u00edmos um elemento<strong> &lt;script&gt;<\/strong> na parte inferior do nosso documento <strong>&lt;body&gt;<\/strong> para fazer o trabalho, veja:<\/p>\n<pre>&lt;script&gt;\r\n&nbsp;&nbsp;var&nbsp;map&nbsp;=&nbsp;new&nbsp;ol.Map({\r\n&nbsp;&nbsp;&nbsp;&nbsp;target:&nbsp;'map',\r\n&nbsp;&nbsp;&nbsp;&nbsp;layers:&nbsp;[\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;ol.layer.Tile({\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;source:&nbsp;new&nbsp;ol.source.TileWMS({\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;'http:\/\/maps.opengeo.org\/geowebcache\/service\/wms',\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;params:&nbsp;{LAYERS:&nbsp;'bluemarble',&nbsp;VERSION:&nbsp;'1.1.1'}\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;})\r\n&nbsp;&nbsp;&nbsp;&nbsp;],\r\n&nbsp;&nbsp;&nbsp;&nbsp;view:&nbsp;new&nbsp;ol.View({\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;projection:&nbsp;'EPSG:4326',\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;center:&nbsp;[0,&nbsp;0],\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;zoom:&nbsp;0,\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;maxResolution:&nbsp;0.703125\r\n&nbsp;&nbsp;&nbsp;&nbsp;})\r\n&nbsp;&nbsp;});\r\n&lt;\/script&gt;<\/pre>\n<p>Devemos ressaltar que a ordem dos passos \u00e9 importante. Antes do nosso script ser executado, a biblioteca OpenLayers deve ser carregada. No nosso exemplo, a biblioteca OpenLayers \u00e9 carregada no elemento <head> da seguinte forma: <strong>&lt;script src = &#8220;OL3 \/ ol.js&#8221;&gt; &lt;\/ script&gt;<\/strong>.<\/p>\n<p>Da mesma forma, o nosso c\u00f3digo de inicializa\u00e7\u00e3o do mapa (acima) n\u00e3o pode ser executado at\u00e9 que o elemento map, seja lido. Ao incluir o c\u00f3digo de inicializa\u00e7\u00e3o no final do documento &lt;body&gt;, garantimos que a biblioteca \u00e9 carregada antes da chamada do elemento map, fazendo que com que esteja pronta antes de gerar o nosso mapa.<\/p>\n<p>Vamos olhar com detalhes o que o script de inicializa\u00e7\u00e3o do mapa est\u00e1 fazendo. Nosso script cria um nova inst\u00e2ncia do objeto ol.Map com algumas op\u00e7\u00f5es de configura\u00e7\u00e3o: <strong>target: &#8216;map&#8217;<\/strong><\/p>\n<p>Neste caso, passamos o valor &#8220;map&#8221; como alvo para o construtor do mapa. <\/p>\n<p>Abaixo vemos a configura\u00e7\u00e3o das camadas, que cria uma camada a ser exibida no nosso mapa:<\/p>\n<pre>layers:&nbsp;[\r\n&nbsp;&nbsp;new&nbsp;ol.layer.Tile({\r\n&nbsp;&nbsp;&nbsp;&nbsp;source:&nbsp;new&nbsp;ol.source.TileWMS({\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;url:&nbsp;'http:\/\/maps.opengeo.org\/geowebcache\/service\/wms',\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;params:&nbsp;{LAYERS:&nbsp;'bluemarble',&nbsp;VERSION:&nbsp;'1.1.1'}\r\n&nbsp;&nbsp;&nbsp;&nbsp;})\r\n&nbsp;&nbsp;})\r\n],<\/pre>\n<p>N\u00e3o se preocupe com a sintaxe aqui, pois a cria\u00e7\u00e3o de camadas ser\u00e1 abordada em outro m\u00f3dulo. O importante \u00e9 entender que o nosso mapa \u00e9 um conjunto de camadas, e para ver um mapa, precisamos incluir pelo menos uma camada.<\/p>\n<p>O passo final \u00e9 a defini\u00e7\u00e3o do modo de exibi\u00e7\u00e3o. N\u00f3s precisamos especificar uma proje\u00e7\u00e3o, um ponto central e um n\u00edvel de zoom. N\u00f3s tamb\u00e9m iremos especificar um valor para o par\u00e2metro <strong>maxResolution<\/strong> para nos certificarmos de que n\u00e3o ser\u00e3o enviadas solicita\u00e7\u00f5es fora do nosso <em>Bounding Box<\/em>, que o <em>GeoWebCache<\/em> n\u00e3o possa manipular.<\/p>\n<pre>view:&nbsp;new&nbsp;ol.View({\r\n&nbsp;&nbsp;&nbsp;projection:&nbsp;'EPSG:4326',\r\n&nbsp;&nbsp;&nbsp;center:&nbsp;[0,&nbsp;0],\r\n&nbsp;&nbsp;&nbsp;zoom:&nbsp;0,\r\n&nbsp;&nbsp;&nbsp;maxResolution:&nbsp;0.703125\r\n})<\/pre>\n<p>Voc\u00ea concluiu com sucesso o seu primeiro mapa! No <a href=\"http:\/\/www.fernandoquadro.com.br\/html\/2016\/05\/19\/introducao-ao-openlayers-3-layers\/\" target=\"_blank\">pr\u00f3ximo post falaremos<\/a> com mais detalhes sobre camadas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Estamos iniciando hoje uma s\u00e9rie de posts que destina-se a dar uma vis\u00e3o geral sobre o OpenLayers 3 (OL3) como uma solu\u00e7\u00e3o de mapeamento web. Os exemplos que ser\u00e3o apresentados sup\u00f5e que voc\u00ea tem um servidor HTTP em execu\u00e7\u00e3o localmente&#8230;. <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2016\/05\/18\/introducao-ao-openlayers-3-basico\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":5355,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24,132,80,25,6],"tags":[223,250],"class_list":["post-5354","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","category-openlayers","category-programacao","category-software","category-tecnologia","tag-gis","tag-openlayers"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/5354","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=5354"}],"version-history":[{"count":33,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/5354\/revisions"}],"predecessor-version":[{"id":6224,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/5354\/revisions\/6224"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/5355"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=5354"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=5354"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=5354"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}