{"id":8705,"date":"2020-04-01T07:30:47","date_gmt":"2020-04-01T10:30:47","guid":{"rendered":"http:\/\/www.fernandoquadro.com.br\/html\/?p=8705"},"modified":"2020-04-01T10:00:29","modified_gmt":"2020-04-01T13:00:29","slug":"melhorias-na-renderizacao-do-mapa-no-geoserver","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2020\/04\/01\/melhorias-na-renderizacao-do-mapa-no-geoserver\/","title":{"rendered":"Melhorias na renderiza\u00e7\u00e3o do GeoServer"},"content":{"rendered":"<p>O suporte ao r\u00f3tulo \u201cshield\u201d do GeoTools j\u00e1 permite reunir um gr\u00e1fico junto com um r\u00f3tulo, com o objetivo de oferecer suporte ao escudo de etiqueta rodovi\u00e1ria. O GeoServer 2.17.0 inclui a capacidade de organiz\u00e1-los separadamente, para que a marca e os r\u00f3tulos n\u00e3o fiquem centralizados um no outro, mas, por exemplo, um acima do outro. Isso permite configurar marcadores de ponto que aparecem apenas enquanto o r\u00f3tulo tamb\u00e9m aparece, veja:<\/p>\n<p><center><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2020\/03\/Selezione_999035.png\" alt=\"\" width=\"395\" height=\"381\" class=\"aligncenter size-full wp-image-8706\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2020\/03\/Selezione_999035.png 395w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2020\/03\/Selezione_999035-300x289.png 300w\" sizes=\"auto, (max-width: 395px) 100vw, 395px\" \/><\/center><\/p>\n<p><center><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2020\/03\/Selezione_999036.png\" alt=\"\" width=\"506\" height=\"613\" class=\"aligncenter size-full wp-image-8707\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2020\/03\/Selezione_999036.png 506w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2020\/03\/Selezione_999036-248x300.png 248w\" sizes=\"auto, (max-width: 506px) 100vw, 506px\" \/><\/center><\/p>\n<p>Tamb\u00e9m \u00e9 poss\u00edvel a partir de agora configurar uma cor de fundo (os MapServer man\u00edacos agradecem) para o mapa no n\u00edvel do estilo, usando um novo elemento chamado Background na propriedade UserStyle, veja:<\/p>\n<pre>\r\n&lt;?xml&nbsp;version=\"1.0\"&nbsp;encoding=\"UTF-8\"?&gt;&lt;sld:StyledLayerDescriptor&nbsp;xmlns=\"http:\/\/www.opengis.net\/sld\"&nbsp;\r\n&nbsp;&nbsp;xmlns:sld=\"http:\/\/www.opengis.net\/sld\"&nbsp;xmlns:gml=\"http:\/\/www.opengis.net\/gml\"&nbsp;xmlns:ogc=\"http:\/\/www.opengis.net\/ogc\"&nbsp;\r\n&nbsp;&nbsp;version=\"1.0.0\"&gt;\r\n&nbsp;&nbsp;&lt;sld:NamedLayer&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;sld:Name&gt;Sea&nbsp;color&nbsp;background&lt;\/sld:Name&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;sld:UserStyle&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;sld:Name&gt;Background&nbsp;sample&lt;\/sld:Name&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;sld:Background&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;sld:CssParameter&nbsp;name=\"fill\"&gt;#F2EFE9&lt;\/sld:CssParameter&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/sld:Background&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;sld:FeatureTypeStyle&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;sld:Rule&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;...\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/sld:Rule&gt;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/sld:UserStyle&gt;\r\n&nbsp;&nbsp;&lt;\/sld:NamedLayer&gt;\r\n&lt;\/sld:StyledLayerDescriptor&gt;\r\n<\/pre>\n<p>O resultado do c\u00f3digo acima pode ser visto atrav\u00e9s da imagem abaixo:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2020\/03\/Selezione_999214.png\" alt=\"\" width=\"250\" height=\"243\" class=\"aligncenter size-full wp-image-8708\" \/><br \/>\n<\/center><\/p>\n<p>Tradicionalmente, j\u00e1 \u00e9 poss\u00edvel renderizar r\u00f3tulos com v\u00e1rios scripts, especificando uma longa lista de &#8220;fam\u00edlia de fontes&#8221;, por exemplo:<\/p>\n<pre>\r\n&lt;sld:Font&gt;\r\n&nbsp;&nbsp;&lt;sld:CssParameter&nbsp;name=\"font-family\"&gt;Noto&nbsp;Sans&nbsp;Regular&lt;\/sld:CssParameter&gt;\r\n&nbsp;&nbsp;&lt;sld:CssParameter&nbsp;name=\"font-family\"&gt;Noto&nbsp;Sans&nbsp;Adlam&nbsp;Regular&lt;\/sld:CssParameter&gt;\r\n&nbsp;&nbsp;&lt;sld:CssParameter&nbsp;name=\"font-family\"&gt;Noto&nbsp;Sans&nbsp;Adlam&nbsp;Unjoined&nbsp;Regular&lt;\/sld:CssParameter&gt;\r\n&nbsp;&nbsp;&lt;sld:CssParameter&nbsp;name=\"font-family\"&gt;Noto&nbsp;Sans&nbsp;Armenian&nbsp;Regular&lt;\/sld:CssParameter&gt;\r\n&nbsp;&nbsp;&lt;sld:CssParameter&nbsp;name=\"font-family\"&gt;Noto&nbsp;Sans&nbsp;Balinese&nbsp;Regular&lt;\/sld:CssParameter&gt;\r\n&nbsp;&nbsp;&nbsp;...\r\n&lt;\/sld:Font&gt;\r\n<\/pre>\n<p>Se todos os nomes de fontes compartilham um prefixo comum, agora \u00e9 poss\u00edvel ser mais conciso e usar apenas uma fun\u00e7\u00e3o, especificando o nome base comum, permitindo que o GeoServer encontre todas as variantes poss\u00edveis, por exemplo:<\/p>\n<pre>\r\n&lt;sld:Font&gt;\r\n&nbsp;&nbsp;&lt;sld:CssParameter&nbsp;name=\"font-family\"&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;ogc:Function&nbsp;name=\"fontAlternatives\"&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;ogc:Literal&gt;Noto&nbsp;Sans&lt;\/ogc:Literal&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/ogc:Function&gt;\r\n&nbsp;&nbsp;&lt;\/sld:CssParameter&gt;\r\n...\r\n&lt;\/sld:Font&gt;\r\n<\/pre>\n<p>Como um recurso adicional relacionado \u00e0 rotulagem, agora pode-se tentar reduzir o tamanho dos r\u00f3tulos em busca de um local para ajust\u00e1-los. A nova op\u00e7\u00e3o \u00e9 chamada &#8220;fontShrinkSizeMin&#8221; e representa o tamanho m\u00ednimo a ser usado. Aqui est\u00e1 um exemplo, os dois pol\u00edgonos compartilham a mesma defini\u00e7\u00e3o do TextSymbolizer, em que o tamanho do r\u00f3tulo foi reduzido para permitir que o r\u00f3tulo se encaixe ao pol\u00edgono:<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2020\/03\/Selezione_999216.png\" alt=\"\" width=\"269\" height=\"120\" class=\"aligncenter size-full wp-image-8710\" \/><br \/>\n<\/center><\/p>\n<p>Passando para os simbolizadores de linha, agora \u00e9 poss\u00edvel fazer uma marca linear ao longo de uma linha. Antes, era apenas poss\u00edvel repeti-la ao longo de uma linha, mas a sa\u00edda n\u00e3o parecia cont\u00ednua, especialmente nas curvas. Agora, se voc\u00ea tem uma marca que come\u00e7a e termina na mesma altura, ela pode literalmente ser tornada cont\u00ednua ao longo da linha, por exemplo, usando este estilo:<\/p>\n<pre>\r\n&lt;LineSymbolizer&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Stroke&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;GraphicStroke&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Graphic&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Mark&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;WellKnownName&gt;wkt:\/\/LINESTRING&nbsp;(0&nbsp;0,&nbsp;0&nbsp;-0.5,&nbsp;0.5&nbsp;-0.5,&nbsp;0.5&nbsp;0.5,&nbsp;1&nbsp;0.5,&nbsp;1&nbsp;0)&lt;\/WellKnownName&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Stroke&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CssParameter&nbsp;name=\"stroke\"&gt;0xFF0000\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/CssParameter&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CssParameter&nbsp;name=\"stroke-width\"&gt;2&lt;\/CssParameter&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;CssParameter&nbsp;name=\"stroke-linecap\"&gt;round&lt;\/CssParameter&gt;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/Stroke&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/Mark&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;Size&gt;20&lt;\/Size&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/Graphic&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/GraphicStroke&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/Stroke&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&lt;VendorOption&nbsp;name=\"markAlongLine\"&gt;true&lt;\/VendorOption&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;\r\n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;\/LineSymbolizer&gt;\r\n<\/pre>\n<p>No resultados abaixo voc\u00ea pode n\u00e3o v\u00ea-lo a princ\u00edpio, mas o tamanho da marca (mark) pode ser ligeiramente alterado para se ajustar ao comprimento dos segmentos e, se n\u00e3o for suficiente, \u00e9 cortado e reconectado)<\/p>\n<p><center><br \/>\n<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2020\/03\/markAlongLine_sqaure_all_angles.png\" alt=\"\" width=\"300\" height=\"300\" class=\"aligncenter size-full wp-image-8712\" srcset=\"https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2020\/03\/markAlongLine_sqaure_all_angles.png 300w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2020\/03\/markAlongLine_sqaure_all_angles-150x150.png 150w, https:\/\/www.fernandoquadro.com.br\/html\/wp-content\/uploads\/2020\/03\/markAlongLine_sqaure_all_angles-144x144.png 144w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><br \/>\n<\/center><\/p>\n<p>Para finalizar este post, al\u00e9m das melhorias citadas acima houveram v\u00e1rias pequenas melhorias no desempenho da renderiza\u00e7\u00e3o, que ser\u00e3o especialmente vis\u00edveis ao renderizar um mapa complexo, com muitas regras, recursos a serem renderizados e r\u00f3tulos (como o OpenStreetMap).<\/p>\n","protected":false},"excerpt":{"rendered":"<p>O suporte ao r\u00f3tulo \u201cshield\u201d do GeoTools j\u00e1 permite reunir um gr\u00e1fico junto com um r\u00f3tulo, com o objetivo de oferecer suporte ao escudo de etiqueta rodovi\u00e1ria. O GeoServer 2.17.0 inclui a capacidade de organiz\u00e1-los separadamente, para que a marca&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2020\/04\/01\/melhorias-na-renderizacao-do-mapa-no-geoserver\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":8714,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[208],"class_list":["post-8705","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-geoserver"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8705","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=8705"}],"version-history":[{"count":7,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8705\/revisions"}],"predecessor-version":[{"id":8797,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/8705\/revisions\/8797"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/8714"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=8705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=8705"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=8705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}