| Version 2 (modified by raphael.costa, 9 years ago) (diff) |
|---|
View Service
O objetivo do serviço é desenhar dados, vetoriais, pontuais ou GRADS, de acordo com a ordem e estilo cadastradas, possibilitando salvá-as em arquivo ou publicá-las no GeoServer?.
Dados contidos em uma View:
struct View
{
std::string viewName = "";
ViewId id = 0; //!< View unique identification.
ProjectId projectId = 0; //!< Identification of the project owner of the view.
ServiceInstanceId serviceInstanceId = 0; //!< View service instace where the view should be executed.
bool active = false;//!< Flag if the view is active.
std::vector< DataSeriesId > dataSeriesList; //!< Ordened list of DataSeries ID that compose this view
std::unordered_map< DataSeriesId, terrama2::core::Filter > filtersPerDataSeries; //!< List of filters by DataSeries ID
std::unordered_map< DataSeriesId, std::unique_ptr<te::se::Style> > stylesPerDataSeries; //!< List of base styles by DataSeries ID.
terrama2::core::Schedule schedule; //!< terrama2::core::Schedule of execution of the view.
// Parameters to generate a image
std::string imageName = "";
te::map::ImageType imageType = te::map::ImageType(1);
uint32_t imageResolutionWidth = 0; //!< Width resolution of view in pixels
uint32_t imageResolutionHeight = 0; //!< Height resolution of view in pixels
uint32_t srid = 0; //!< SRID to aplly in view
// Parameter to register view in GeoServer
te::core::URI maps_server_uri;
};
Modelo JSON da View:
{
"class" : "View",
"name" : "viewName",
"id" : viewID,
"project_id" : projectId,
"service_instance_id" : serviceInstanceId,
"active" : active,
"dataseries_id" : ID,
"style" : "style",
"legend": LEGEND
"schedule" : SCHEDULE
# Serão implementados no futuro:
"imageName" : "imageName",
"imageType" : imageType,
"imageResolutionWidth" : imageResolutionWidth,
"imageResolutionHeight" : imageResolutionHeight,
"srid" : srid
}
Modelo JSON da legenda:
{
"class": "Legend",
"bands": integer,
"column": string, // optional
"colors": COLOR[]
}
Modelo JSON Cor:
{
"title": string,
"color": string #Hex representation
}
Cadastro no GeoServer?
O serviço permite que os dados sejam cadastrados em um servidor GeoServer?. Para isso é necessário informar o endereço do servidor em geoserverURI.
Resposta do serviço de View
Quando o serviço de view termina de realizar um cadastro no GeoServer?, ele retorna infromações sobre o quê foi cadastrado e em que local.
A resposta vem em um JSON no seguinte formato:
{
"class" : "RegisteredViews",
"view_id" : viewID,
"maps_server_uri" : "URI",
"workspace" : "workspace",
"style" : "styleName",
"layers_list" : [
"layer1",
"layer2",
"..."
]
}
Geração de imagem
Para desenhar a TerraLib? utiliza o te::map::DataSetLayer?, mas ele requer um Data Source para buscar o dataset. Como o serviço já recebe o dataset, ele está usando duas outras classes para o desenho:
MemoryDataSetLayer?
Um layer que não depende de um Data Source, ele já contem o dataset que será desenhado.
MemoryDataSetRenderer?
Método draw utiliza o dataset já contido no MemoryDataSetLayer?, não precisa de consulta em um Data Source.
Estilo de desenho
Os estilos de desenhosão definidos em:
stylesPerDataSeries - Está definindo o estilo para cada dataset
Rules
Com o te::se::Rule é possível configurar, além do estilo padrão, estilos baseados em valores de uma propriedade do layer.
<?xml version="1.0" encoding="UTF-8" standalone="no" ?> <StyledLayerDescriptor version="1.1.0" xmlns="http://www.opengis.net/sld" xmlns:ogc="http://www.opengis.net/ogc" xmlns:se="http://www.opengis.net/se" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.1.0/StyledLayerDescriptor.xsd"> <NamedLayer> <se:Name>Layer</se:Name> <UserStyle> <se:Name>Style</se:Name> <se:FeatureTypeStyle version="1.1.0"> <se:Name>Style 1</se:Name> <se:Rule> <se:PolygonSymbolizer version="1.1.0"> <se:Fill> <se:SvgParameter name="fill"> <ogc:Literal>#00c290</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="fill-opacity"> <ogc:Literal>0.9</ogc:Literal> </se:SvgParameter> </se:Fill> <se:Stroke> <se:SvgParameter name="stroke"> <ogc:Literal>#000000</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="stroke-width"> <ogc:Literal>1</ogc:Literal> </se:SvgParameter> </se:Stroke> </se:PolygonSymbolizer> </se:Rule> <se:Rule> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>RESULT</ogc:PropertyName> <ogc:Literal>1</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> <se:PolygonSymbolizer version="1.1.0"> <se:Fill> <se:SvgParameter name="fill"> <ogc:Literal>#000080</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="fill-opacity"> <ogc:Literal>0.9</ogc:Literal> </se:SvgParameter> </se:Fill> <se:Stroke> <se:SvgParameter name="stroke"> <ogc:Literal>#000000</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="stroke-width"> <ogc:Literal>1</ogc:Literal> </se:SvgParameter> </se:Stroke> </se:PolygonSymbolizer> </se:Rule> <se:Rule> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>RESULT</ogc:PropertyName> <ogc:Literal>2</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> <se:PolygonSymbolizer version="1.1.0"> <se:Fill> <se:SvgParameter name="fill"> <ogc:Literal>#fdcc00</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="fill-opacity"> <ogc:Literal>0.9</ogc:Literal> </se:SvgParameter> </se:Fill> <se:Stroke> <se:SvgParameter name="stroke"> <ogc:Literal>#000000</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="stroke-width"> <ogc:Literal>1</ogc:Literal> </se:SvgParameter> </se:Stroke> </se:PolygonSymbolizer> </se:Rule> <se:Rule> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>RESULT</ogc:PropertyName> <ogc:Literal>3</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> <se:PolygonSymbolizer version="1.1.0"> <se:Fill> <se:SvgParameter name="fill"> <ogc:Literal>#ff7400</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="fill-opacity"> <ogc:Literal>0.9</ogc:Literal> </se:SvgParameter> </se:Fill> <se:Stroke> <se:SvgParameter name="stroke"> <ogc:Literal>#000000</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="stroke-width"> <ogc:Literal>1</ogc:Literal> </se:SvgParameter> </se:Stroke> </se:PolygonSymbolizer> </se:Rule> <se:Rule> <ogc:Filter> <ogc:PropertyIsEqualTo> <ogc:PropertyName>RESULT</ogc:PropertyName> <ogc:Literal>4</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:Filter> <se:PolygonSymbolizer version="1.1.0"> <se:Fill> <se:SvgParameter name="fill"> <ogc:Literal>#FF0000</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="fill-opacity"> <ogc:Literal>0.9</ogc:Literal> </se:SvgParameter> </se:Fill> <se:Stroke> <se:SvgParameter name="stroke"> <ogc:Literal>#000000</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="stroke-width"> <ogc:Literal>1</ogc:Literal> </se:SvgParameter> </se:Stroke> </se:PolygonSymbolizer> </se:Rule> </se:FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
Grouping
Utilizando o te::map::Grouping foi possível criar estilos separados, baseados no valor de uma propriedade do layer. Mas, ao serializá-lo, suas tags não foram aceitas pelo GeoServer?.
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <te_map:Grouping xmlns:te_map="http://www.w3.org/2000/xmlns/se" xmlns:ogc="http://www.opengis.net/ogc" xmlns:se="http://www.opengis.net/se"> <te_map:PropertyName>RESULT</te_map:PropertyName> <te_map:PropertyDataType>-187566072</te_map:PropertyDataType> <te_map:Type>EQUAL_STEPS</te_map:Type> <te_map:Precision>6</te_map:Precision> <te_map:Summary>AVERAGE</te_map:Summary> <te_map:GroupingItem> <te_map:Title>-1 - 1</te_map:Title> <te_map:From>-1</te_map:From> <te_map:To>1</te_map:To> <se:PolygonSymbolizer version="1.1.0"> <se:Fill> <se:SvgParameter name="fill"> <ogc:Literal>#f08080</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="fill-opacity"> <ogc:Literal>1.0</ogc:Literal> </se:SvgParameter> </se:Fill> <se:Stroke> <se:SvgParameter name="stroke"> <ogc:Literal>#000000</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="stroke-width"> <ogc:Literal>1</ogc:Literal> </se:SvgParameter> </se:Stroke> </se:PolygonSymbolizer> </te_map:GroupingItem> <te_map:GroupingItem> <te_map:Title>1 - 2</te_map:Title> <te_map:From>1</te_map:From> <te_map:To>2</te_map:To> <se:PolygonSymbolizer version="1.1.0"> <se:Fill> <se:SvgParameter name="fill"> <ogc:Literal>#174a63</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="fill-opacity"> <ogc:Literal>1.0</ogc:Literal> </se:SvgParameter> </se:Fill> <se:Stroke> <se:SvgParameter name="stroke"> <ogc:Literal>#000000</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="stroke-width"> <ogc:Literal>1</ogc:Literal> </se:SvgParameter> </se:Stroke> </se:PolygonSymbolizer> </te_map:GroupingItem> <te_map:GroupingItem> <te_map:Title>2 - 2</te_map:Title> <te_map:From>2</te_map:From> <te_map:To>2</te_map:To> <se:PolygonSymbolizer version="1.1.0"> <se:Fill> <se:SvgParameter name="fill"> <ogc:Literal>#ffa700</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="fill-opacity"> <ogc:Literal>1.0</ogc:Literal> </se:SvgParameter> </se:Fill> <se:Stroke> <se:SvgParameter name="stroke"> <ogc:Literal>#000000</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="stroke-width"> <ogc:Literal>1</ogc:Literal> </se:SvgParameter> </se:Stroke> </se:PolygonSymbolizer> </te_map:GroupingItem> <te_map:GroupingItem> <te_map:Title>2 - 3</te_map:Title> <te_map:From>2</te_map:From> <te_map:To>3</te_map:To> <se:PolygonSymbolizer version="1.1.0"> <se:Fill> <se:SvgParameter name="fill"> <ogc:Literal>#ff0066</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="fill-opacity"> <ogc:Literal>1.0</ogc:Literal> </se:SvgParameter> </se:Fill> <se:Stroke> <se:SvgParameter name="stroke"> <ogc:Literal>#000000</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="stroke-width"> <ogc:Literal>1</ogc:Literal> </se:SvgParameter> </se:Stroke> </se:PolygonSymbolizer> </te_map:GroupingItem> <te_map:GroupingItem> <te_map:Title>3 - 5</te_map:Title> <te_map:From>3</te_map:From> <te_map:To>5</te_map:To> <se:PolygonSymbolizer version="1.1.0"> <se:Fill> <se:SvgParameter name="fill"> <ogc:Literal>#9500d8</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="fill-opacity"> <ogc:Literal>1.0</ogc:Literal> </se:SvgParameter> </se:Fill> <se:Stroke> <se:SvgParameter name="stroke"> <ogc:Literal>#000000</ogc:Literal> </se:SvgParameter> <se:SvgParameter name="stroke-width"> <ogc:Literal>1</ogc:Literal> </se:SvgParameter> </se:Stroke> </se:PolygonSymbolizer> </te_map:GroupingItem> </te_map:Grouping>
