Sábado, 22 de Novembro de 2008

Registro de Domínios

Domínios que eu registrei para projetos futuros...

1) http://www.xpprojects.com.br
2) http://www.xpprojects.com
3) http://www.booleanlife.com
4) http://www.eskopinski.com
5) http://www.mapastematicos.com.br

Por enquanto todos estão sendo redirecionados para este blog.



[22.11.2008] - [Lucas Vargas Eskopinski].

Domingo, 16 de Novembro de 2008

Criando um arquivo SLD com GeoTools

Download dos arquivos necessários:

- GeoTools 2.5.1 / 21.10.2008 (22.3MB).
- GeoAPI Project 2.0.0 / 4.3 MB.

package com.thematicmapping.logic;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

import javax.xml.transform.TransformerException;

import org.geotools.factory.CommonFactoryFinder;
import org.opengis.filter.BinaryComparisonOperator;
import org.opengis.filter.FilterFactory;
import org.geotools.styling.FeatureTypeStyle;
import org.geotools.styling.Fill;
import org.geotools.styling.Font;
import org.geotools.styling.LineSymbolizer;
import org.geotools.styling.Rule;
import org.geotools.styling.SLDTransformer;
import org.geotools.styling.Stroke;
import org.geotools.styling.Style;
import org.geotools.styling.StyleFactory;
import org.geotools.styling.StyledLayerDescriptor;
import org.geotools.styling.Symbolizer;
import org.geotools.styling.TextSymbolizer;
import org.geotools.styling.UserLayer;

public class GeoToolsSLD {

public String getSLD() throws TransformerException, IOException {
StyleFactory styleFactory = CommonFactoryFinder.getStyleFactory(null);
FilterFactory ff = CommonFactoryFinder.getFilterFactory(null);
BinaryComparisonOperator filter = ff.equals(ff.property("fips"), ff.literal("BR"));

LineSymbolizer linesym = styleFactory.createLineSymbolizer();
Stroke myStroke = styleFactory.getDefaultStroke();

FilterFactory ff2 = CommonFactoryFinder.getFilterFactory(null);
myStroke.setColor(ff2.literal("#7D26CD"));
myStroke.setWidth(ff2.literal(new Integer(2)));
linesym.setStroke(myStroke);

TextSymbolizer textsym = styleFactory.createTextSymbolizer();
textsym.setLabel(ff.property("cntry_name"));
Fill fill = styleFactory.getDefaultFill();
fill.setColor(ff.literal("#A0522D"));
textsym.setFill(fill);
Font font = styleFactory.getDefaultFont();
font.setFontFamily(ff.literal("Times New Roman"));
font.setFontSize(ff.literal(new Integer(15)));
font.setFontStyle(ff.literal("Normal"));
font.setFontWeight(ff.literal("bold"));
textsym.setFonts(new Font[] { font });

Rule rule = styleFactory.createRule();
rule.setSymbolizers(new Symbolizer[] { linesym, textsym });
rule.setFilter(filter);
FeatureTypeStyle fts = styleFactory.createFeatureTypeStyle(new Rule[] { rule });

Style style = styleFactory.createStyle();
style.setFeatureTypeStyles(new FeatureTypeStyle[] { fts });

UserLayer userLayer = styleFactory.createUserLayer();
userLayer.setName("topp:world");
userLayer.addUserStyle(style);

StyledLayerDescriptor sld = styleFactory.createStyledLayerDescriptor();
sld.addStyledLayer(userLayer);

SLDTransformer styleTransform = new SLDTransformer();
styleTransform.setIndentation(4);
String xmlOrig = styleTransform.transform(sld);

//String encodedSLD = URLEncoder.encode(xmlOrig, "UTF-8");

System.out.println("XML = " + xmlOrig);
System.out.println("LENGTH XML = " + xmlOrig.length());

return xmlOrig;
}
}



[16.11.2008] - [Lucas Vargas Eskopinski].

Sábado, 15 de Novembro de 2008

Parâmetro NamedLayer no SLD

Em um teste com o arquivos SLD gerado pelo uDig, deixei passar despercebido o parâmetro do <NamedLayer>. No uDig adicionei um novo layer que estava disponível na minha base de dados do PostGIS, alterei duas propriedades de estilo: 'Line' e 'Fill', o resultado é a figura abaixo:



Trecho do arquivo SLD gerado pelo uDig está abaixo:

<sld:UserLayer>
  <sld:LayerFeatureConstraints>
    <sld:FeatureTypeConstraint/>
  </sld:LayerFeatureConstraints>
  <sld:UserStyle>
    <sld:FeatureTypeStyle>
      <sld:Rule></sld:Rule>
    </sld:FeatureTypeStyle>
  </sld:UserStyle>
</sld:UserLayer>

Estava faltando o parâmetro! não percebendo tentei adicionar um layer WMS utilizando este arquivo SLD.

basic_wms = new OpenLayers.Layer.WMS("topp:world", "http://localhost:8888/geoserver/wms", {
srs: 'EPSG:4326', transparent: 'true', layers: 'topp:world', styles: '',
sld: 'http://localhost:8888/thematicmapping/udig.sld',
format: format, tiled: 'true' }, {isBaseLayer: true}, {buffer: 0});

O resultado da solicitação foi à figura abaixo:



Não ocorreu nenhum erro apenas não aplicou nenhum estilo definido no arquivo. É necessário alterar o arquivo e informar o nome do layer correspondente ao informado na requisição WMS, neste caso é 'topp:world'.

Após adicionar o trecho de código:

<sld:UserLayer>
    <sld:Name>topp:world</sld:Name>
</sld:UserLayer>



[15.11.2008] - [Lucas Vargas Eskopinski].

The requested Style can not be used with this layer

O erro abaixo estava me ocorrendo utilizando um arquivo SLD:

20:40:35,343 INFO [STDOUT] 14 Nov 20:40:35 ERROR [geoserver.ows] -org.vfny.geoserver.wms.WmsException:
The requested Style can not be used with this layer. The style specifies an attribute of FIPS and the layer is: topp:world
at org.geoserver.wms.kvp.GetMapKvpRequestReader.checkStyle(GetMapKvpRequestReader.java:967) at org.geoserver.wms.kvp.GetMapKvpRequestReader.findStyleOf(GetMapKvpRequestReader.java:916) at org.geoserver.wms.kvp.GetMapKvpRequestReader.processLibrarySld(GetMapKvpRequestReader.java:498) at org.geoserver.wms.kvp.GetMapKvpRequestReader.processSld(GetMapKvpRequestReader.java:422)

No arquivo existia um filtro com objetivo de manipular apenas uma geometria da minha tabela, através da condição FIPS = 'BR'. O Shapefile estava salvo no PostGIS e o problema era: 'case sensitive', os nomes dos atributos também são 'case sensitive'.

Depois de alterar o atributo do filtro para 'fips' em minúsculo conforme havia criado a coluna no PostGIS, não tive mais problemas. :D

<ogc:Filter>
  <ogc:PropertyIsEqualTo>
      <ogc:PropertyName>fips</ogc:PropertyName>
      <ogc:Literal>BR</ogc:Literal>
  </ogc:PropertyIsEqualTo>
</ogc:Filter>

[15.11.2008] - [Lucas Vargas Eskopinski].

Domingo, 9 de Novembro de 2008

MapViewer 10.1.3.3 Patch 5 - 13.10.2008

A equipe do Oracle MapViewer disponibilizou uma nova release oficial com data 13.10.2008, disponível na OTN (link abaixo):

http://www.oracle.com/technology/products/mapviewer/index.html

Ela substitui todos os patch's anteriores (10.1.3.3 Patch 1, 2, 3 e 4) e 11g preview. A equipe do MapViewer não está mais autorizada a postar a versão 11g preview na OTN por nova política da Oracle, apenas versões oficiais estarão disponíveis na OTN.

Alem de correções de bugs esta versão inclui a compatibilidade com o servidor WebLogic versão 9, 10 e 10.3 (preview) e com o navegador Apple Safari Desktop. Também foi incluído um "efeito" ao fazer a troca de nível de zoom. Este efeito consiste em pegar o tile atual e mostrá-lo esticado ou comprimido até que o novo tile esteja disponível. Na versão anterior 10.1.3.3 patch 4 ao realizar a troca de nível de zoom os tiles eram removidos, ficando um fundo cinza ate serem atualizados novamente na tela.

Correção dos bugs:

Bug Oracle Maps com a função getMapAsXML do objeto MVMapView
http://eskopinski.blogspot.com/2008/10/bug-oracle-maps-com-funo-getmapasxml-do.html

Label de Temas Predefinidos no Oracle MapViewer
http://eskopinski.blogspot.com/2008/11/label-de-temas-predefinidos-no-oracle.html

[09.11.2008] - [Lucas Vargas Eskopinski].