空间数据入库及GeoServer生成热力图过程

需求如下,已经有生成好的空间数据,包括日期、小时、经度、纬度,人数,利用GeoServer生成热力图。
本文使用PostgreSQL10数据库,已添加PostGIS支持。
###创建表

create table table_test(
day varchar(8),
hour int,
lon numeric(8,5),
lat numeric(8,5),
count_people int,
geom geometry
);

###导入数据(略)
###生成geometry字段数据

update table_test set geom=(ST_GeomFromText('POINT(' || lon || ' ' || lat || ')'));
-- 如果报错:Geometry SRID (0) does not match column SRID (4326),则需要指定srid
update table_test set geom=(ST_GeomFromText('POINT(' || lon || ' ' || lat || ')',4326));

###GeoServer发布图层

  • 访问本机GeoServer,http://localhost:8080/geoserver/web/。

  • 选择图层–>添加新的资源,选择自己的空间数据库,单击配置新的SQL视图
    在创建新的SQL视图页面中
    视图名称:table_test
    SQL语句:select * from table_test where day=’%day%’ and hour=%hour%
    单击从SQL猜想的参数,输入默认值,注意把验证表达式删掉。
    单机刷新,SRID填写4326,单击保存。

  • 在编辑图层页面中,
    将定义SRS改成EPSG:4326,如果不是的话。
    边框中,Native Bounding Box单击从数据中计算,纬度/经度边框单机Compute from native bounds。

  • 切换到发布标签:
    Default Style:选择热力图样式,单击保存。
    在Layer Preview中就可以预览了。

发布图层前需要先创建热力图样式。
###在GeoServer中创建热力图样式

<?xml version="1.0" encoding="UTF-8"?>
   <StyledLayerDescriptor version="1.0.0"
       xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
       xmlns="http://www.opengis.net/sld"
       xmlns:ogc="http://www.opengis.net/ogc"
       xmlns:xlink="http://www.w3.org/1999/xlink"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
     <NamedLayer>
       <Name>person_point_heat</Name>
       <UserStyle>
         <Title>person_point_heat</Title>
         <Abstract>A heatmap </Abstract>
         <FeatureTypeStyle>
           <Transformation>
             <ogc:Function name="gs:Heatmap">
               <ogc:Function name="parameter">
                 <ogc:Literal>data</ogc:Literal>
               </ogc:Function>
               <ogc:Function name="parameter">
                 <ogc:Literal>weightAttr</ogc:Literal>
                 <ogc:Literal>count_people</ogc:Literal>
               </ogc:Function>
               <ogc:Function name="parameter">
                 <ogc:Literal>radiusPixels</ogc:Literal>
                 <ogc:Function name="env">
                   <ogc:Literal>radius</ogc:Literal>
                   <ogc:Literal>35</ogc:Literal>
                 </ogc:Function>
               </ogc:Function>
               <ogc:Function name="parameter">
                 <ogc:Literal>pixelsPerCell</ogc:Literal>
                 <ogc:Literal>2</ogc:Literal>
               </ogc:Function>
               <ogc:Function name="parameter">
                 <ogc:Literal>outputBBOX</ogc:Literal>
                 <ogc:Function name="env">
                   <ogc:Literal>wms_bbox</ogc:Literal>
                 </ogc:Function>
               </ogc:Function>
               <ogc:Function name="parameter">
                 <ogc:Literal>outputWidth</ogc:Literal>
                 <ogc:Function name="env">
                   <ogc:Literal>wms_width</ogc:Literal>
                 </ogc:Function>
               </ogc:Function>
               <ogc:Function name="parameter">
                 <ogc:Literal>outputHeight</ogc:Literal>
                 <ogc:Function name="env">
                   <ogc:Literal>wms_height</ogc:Literal>
                 </ogc:Function>
               </ogc:Function>
             </ogc:Function>
           </Transformation>
          <Rule>
            <RasterSymbolizer>
            <!-- specify geometry attribute to pass validation -->
              <Geometry>
                <ogc:PropertyName>geom</ogc:PropertyName>
              </Geometry>
              <Opacity>1</Opacity>
                <ColorMap type="ramp" >
                  <ColorMapEntry color="#FFFFFF" quantity="0" opacity="0" label="FFFFF" />
                  <ColorMapEntry color="#7F95E6" quantity="0.1" opacity="0.5" label="7F95E6" />
                  <ColorMapEntry color="#7DFC3F" quantity="0.3" opacity="0.5" label="7DFC3F" />
                  <ColorMapEntry color="#F6FD01" quantity="0.4" opacity="0.5" label="F6FD01" />
                  <ColorMapEntry color="#EF8C07" quantity="0.5" opacity="0.5" label="EF8C07" />
                  <ColorMapEntry color="#FE0409" quantity="0.7" opacity="0.5" label="FE0409" />
                  <ColorMapEntry color="#FE0409" quantity="1" opacity="0.5" label="FE0409" />
                  </ColorMap>
            </RasterSymbolizer>
           </Rule>
         </FeatureTypeStyle>
       </UserStyle>
     </NamedLayer>
    </StyledLayerDescriptor>

注意count_people和geom字段,与表中的字段对应。

评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值