{"id":7307,"date":"2018-09-10T16:41:58","date_gmt":"2018-09-10T19:41:58","guid":{"rendered":"http:\/\/www.fernandoquadro.com.br\/html\/?p=7307"},"modified":"2020-06-05T09:44:07","modified_gmt":"2020-06-05T12:44:07","slug":"consultando-varias-camadas-em-uma-unica-consulta-no-geoserver","status":"publish","type":"post","link":"https:\/\/www.fernandoquadro.com.br\/html\/2018\/09\/10\/consultando-varias-camadas-em-uma-unica-consulta-no-geoserver\/","title":{"rendered":"Consultando v\u00e1rias camadas em uma \u00fanica consulta no GeoServer"},"content":{"rendered":"<p>Prezado leitor,<\/p>\n<p>Voc\u00ea j\u00e1 deve ter passado pelo seguinte problema: filtrar recursos de camadas diferentes usando o WFS.<\/p>\n<p>Como sabemos o CQL n\u00e3o permite que fa\u00e7amos JOIN de camadas. Quando \u00e9 necess\u00e1rio realizar JOIN de alguma informa\u00e7\u00e3o, necessitamos criar uma view e a partir desta view uma camada.<\/p>\n<p>Por\u00e9m hoje, vou apresentar uma forma de como voc\u00ea pode em uma requisi\u00e7\u00e3o WFS filtrar dados de mais de uma camada. Para isso vamos usar os dados vindos por padr\u00e3o no GeoServer.<\/p>\n<p>Para aplicar um \u00fanico CQL_filter em uma camada WFS, \u00e9 simples. N\u00f3s temos a camada <strong>topp:tasmania_water_bodies<\/strong> publicado e queremos obter os recursos onde a \u00e1rea \u00e9 maior do que 1.066.494.066 metros quadrados, para que possamos fazer a pr\u00f3xima requisi\u00e7\u00e3o ao servidor:<\/p>\n<pre>\r\nhttps:\/\/demo.geo-solutions.it\/geoserver\/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&typeNames=topp:tasmania_water_bodies&propertyName=&cql_filter=AREA&lt;1066494066&outputFormat=application\/json\r\n<\/pre>\n<p>At\u00e9 aqui foi f\u00e1cil! N\u00f3s teremos 4 recursos que satisfazem os filtros. A sintaxe \u00e9 clara:<\/p>\n<pre>\r\n<em>typeNames=topp:tasmania_water_bodiese&cql_filter=AREA&lt;1066494066<\/em>\r\n<\/pre>\n<p>Mas, como devemos fazer se quisermos obter recursos de duas ou mais camadas ao mesmo tempo?<\/p>\n<p>Se obtivermos ao mesmo tempo os recursos da camada <em>topp:tasmania_roads<\/em> com os recursos filtrados anteriormente na camada <em>topp:tasmania_water_bodies<\/em>, devemos usar uma solicita\u00e7\u00e3o semelhante, mas separando o typeNames desta maneira:<\/p>\n<pre>\r\ntypeNames=(topp:tasmania_water_bodies)(topp:tasmania_roads)\r\n<\/pre>\n<p>E configurar os filtros CQL associados ordenados respeitando os <em>typenames<\/em>:<\/p>\n<pre>\r\ncql_filter=AREA&lt;1066494066;TYPE='alley'\r\n<\/pre>\n<pre>\r\nhttps:\/\/demo.geo-solutions.it\/geoserver\/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&typeNames=(topp:tasmania_water_bodies)(topp:tasmania_roads)&propertyName=&cql_filter=AREA&lt;1066494066;TYPE='alley'&outputFormat=application\/json\r\n<\/pre>\n<p>E o <em>propertyName<\/em>? Usando o par\u00e2metro <em>propertyName<\/em> na requisi\u00e7\u00e3o WFS, podemos filtrar as propriedades do recurso conforme desejado. Esse par\u00e2metro \u00e9 importante para reduzir o tamanho da resposta, obtendo apenas as propriedades nas quais estamos interessados.<\/p>\n<p>Em nosso exemplo, podemos obter apenas o <em>CNTRY_NAME<\/em> da <em>topp:tasmania_water_bodies<\/em> e o <em>TYPE<\/em> da <em>topp:tasmania_roads<\/em>.<\/p>\n<p>Neste caso, o a requisi\u00e7\u00e3o ser\u00e1:<\/p>\n<pre>\r\nhttps:\/\/demo.geo-solutions.it\/geoserver\/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&typeNames=(topp:tasmania_water_bodies)(topp:tasmania_roads)&propertyName=(CNTRY_NAME)(TYPE)&cql_filter=AREA&lt;1066494066;TYPE='alley'&outputFormat=application\/json\r\n<\/pre>\n<p>Desta forma voc\u00ea conseguir\u00e1 ent\u00e3o filtrar as camadas <em>topp:tasmania_water_bodies<\/em> e <em>TYPE<\/em> da <em>topp:tasmania_roads<\/em> em uma \u00fanica requisi\u00e7\u00e3o, por\u00e9m sem as informa\u00e7\u00f5es das geometrias, apenas os atributos.<\/p>\n<p>Para que a requisi\u00e7\u00e3o retorne tamb\u00e9m as geometrias \u00e9 necess\u00e1rio adicionar a coluna geom\u00e9trica:<\/p>\n<pre>\r\nhttps:\/\/demo.geo-solutions.it\/geoserver\/wfs?SERVICE=WFS&VERSION=2.0.0&REQUEST=GetFeature&typeNames=(topp:tasmania_water_bodies)(topp:tasmania_roads)&propertyName=(CNTRY_NAME,AREA,the_geom)(TYPE,the_geom)&cql_filter=AREA&lt;1066494066;TYPE='alley'&outputFormat=application\/json\r\n<\/pre>\n<p>Veja tamb\u00e9m o v\u00eddeo no YouTube, explicando passo a passo o processo descrito acima:<\/p>\n<p><center><br \/>\n<iframe loading=\"lazy\" width=\"560\" height=\"315\" src=\"https:\/\/www.youtube.com\/embed\/oH8obZkEOPE\" frameborder=\"0\" allow=\"accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture\" allowfullscreen><\/iframe><br \/>\n<\/center><\/p>\n<p>Fonte: <a href=\"http:\/\/blog.geomati.co\/post\/177793968248\/querying-multiple-layers-in-a-single-query-with\" rel=\"noopener noreferrer\" target=\"_blank\">Blog Geomatico<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Prezado leitor, Voc\u00ea j\u00e1 deve ter passado pelo seguinte problema: filtrar recursos de camadas diferentes usando o WFS. Como sabemos o CQL n\u00e3o permite que fa\u00e7amos JOIN de camadas. Quando \u00e9 necess\u00e1rio realizar JOIN de alguma informa\u00e7\u00e3o, necessitamos criar uma&#8230; <a class=\"more-link\" href=\"https:\/\/www.fernandoquadro.com.br\/html\/2018\/09\/10\/consultando-varias-camadas-em-uma-unica-consulta-no-geoserver\/\">Continue Reading &rarr;<\/a><\/p>\n","protected":false},"author":275,"featured_media":5862,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[24],"tags":[325,208],"class_list":["post-7307","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gis","tag-cql","tag-geoserver"],"_links":{"self":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7307","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=7307"}],"version-history":[{"count":12,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7307\/revisions"}],"predecessor-version":[{"id":8854,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/posts\/7307\/revisions\/8854"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media\/5862"}],"wp:attachment":[{"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/media?parent=7307"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/categories?post=7307"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fernandoquadro.com.br\/html\/wp-json\/wp\/v2\/tags?post=7307"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}