이전 포스팅[[Cartography]Flow Map Renderer]에서 ArcGIS for Desktop - ArcMap 기반의 O-D Flow Map 렌더러를 구현한 적이 있다.
GeoTools의 Filter Function을 확장하여 GeoServer에서 SLD Style로 설정하여 사용이 가능하다.
Filter Function의 경우 ArcGIS 렌더러와는 다르게 지도의 축척이나 크기를 알 수 없어, geometry필드, value 필드, 최소값, 최대값, 최대크기, 유형을 파라미터로 입력받아 처리할 수 있도록 하였다.
축척변경에 따른 크기조정이 불가능하나, WPS Process 및 Rendering Transformations 을 이용하면 가능할 듯하다.
다음은 GeoServer Web Administration 페이지에서 OpenLayers로 미리보기 한 샘플이다.
▣ Arrow
▣ Circle
▣ SLD 예 - Function = odflowmap
다음은 위에서 사용된 라인레이어의 SLD 파일 예이다.
<?xml version="1.0" encoding="utf-8"?> <StyledLayerDescriptor version="1.0.0" ..../1.0.0/StyledLayerDescriptor.xsd"> <NamedLayer> <Name>OD Flow Map</Name> <UserStyle> <Name>OD Flow Map</Name> <FeatureTypeStyle> <Rule> <ogc:Filter> <ogc:And> <ogc:PropertyIsGreaterThanOrEqualTo> <ogc:PropertyName>O_D</ogc:PropertyName> <ogc:Literal>1000</ogc:Literal> </ogc:PropertyIsGreaterThanOrEqualTo> <ogc:PropertyIsEqualTo> <ogc:PropertyName>ADM_CODE_O</ogc:PropertyName> <ogc:Literal>11680</ogc:Literal> </ogc:PropertyIsEqualTo> </ogc:And> </ogc:Filter> <PolygonSymbolizer> <Geometry> <ogc:Function name="odflowmap"> <ogc:PropertyName>the_geom</ogc:PropertyName> <ogc:PropertyName>O_D</ogc:PropertyName> <ogc:Literal>1000</ogc:Literal> <ogc:Literal>8000</ogc:Literal> <ogc:Literal>2500</ogc:Literal> <ogc:Literal>Arrow</ogc:Literal> </ogc:Function> </Geometry> <Fill> <CssParameter name="fill">#FF0000</CssParameter> <CssParameter name="fill-opacity">0.9</CssParameter> </Fill> <Stroke> <CssParameter name="stroke">#FFFFFF</CssParameter> <CssParameter name="stroke-width">0.1</CssParameter> <CssParameter name="fill-opacity">0.1</CssParameter> </Stroke> </PolygonSymbolizer> <LineSymbolizer> <Stroke> <CssParameter name="stroke">#FF0000</CssParameter> <CssParameter name="stroke-width">0.2</CssParameter> <CssParameter name="fill-opacity">0.9</CssParameter> </Stroke> </LineSymbolizer> <TextSymbolizer> <Label> <ogc:PropertyName>O_D</ogc:PropertyName> </Label> <LabelPlacement> <LinePlacement /> </LabelPlacement> <Halo> <Radius>1.5</Radius> <Fill> <CssParameter name="fill">#FFFFFF</CssParameter> </Fill> </Halo> <Fill> <CssParameter name="fill">#0000FF</CssParameter> </Fill> <Font> <CssParameter name="font-family">Arial</CssParameter> <CssParameter name="font-size">10</CssParameter> <CssParameter name="font-style">normal</CssParameter> <CssParameter name="font-weight">bold</CssParameter> </Font> <VendorOption name="followLine">true</VendorOption> <VendorOption name="maxAngleDelta">90</VendorOption> <VendorOption name="maxDisplacement">400</VendorOption> </TextSymbolizer> </Rule> </FeatureTypeStyle> </UserStyle> </NamedLayer> </StyledLayerDescriptor>
▣ Download sample data sets & libraries
- FlowMapforGeoServer.zip