8 votos

¿Mapa / mapa de densidad de dinámica puntos tabla en MapServer (GeoServer)?

¿Cómo puedo crear un mapa de calor (algunos le llaman un mapa de densidad) de una capa de puntos en MapServer (o GeoServer)? (preferiblemente capaz de elegir el método de interpolación, NN, IDW, etcetera y mapa de color con un color transparente)

Los puntos son almacenados en PostGIS tabla y la tabla es dinámica, lo que significa que necesita crear el mapa de calor sobre la marcha.

13voto

Joe Puntos 16

Paso-por-paso para GeoServer. Nota: Como @michal-mackiewicz escribe, el WPS extensión para GeoServer debe estar instalado.

  1. Adquirir algunos de los datos del punto, por ejemplo Natural de la Tierra poblada de lugares http://www.naturalearthdata.com/http//www.naturalearthdata.com/download/10m/cultural/ne_10m_populated_places.zip
  2. Importar datos en Postgis, por ejemplo, con ogr2ogr

ogr2ogr -f PostgreSQL PG:"dbname='dbname' host='localhost' port='5432' usuario='nombre de usuario' password='passwd'" ne_10m_populated_places.shp

  1. Crear una nueva capa para GeoServer y publicarlo. Supongo que PostGIS tienda ya existe.
  2. Copia el mapa de calor de SLD ejemplo de http://docs.geoserver.org/stable/en/user/styling/sld-extensions/rendering-transform.html
  3. Editar SLD para adaptarse a la nueva capa y cambiar el nombre de la capa, de la población de atributo y el nombre de la geometría de la columna.
<?xml version="1.0" encoding="ISO-8859-1"?>
   <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>cite:ne_10m_populated_places</Name>
       <UserStyle>
         <Title>Heatmap</Title>
         <Abstract>A heatmap surface showing population density</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>pop_max</ogc:Literal>
               </ogc:Function>
               <ogc:Function name="parameter">
                 <ogc:Literal>radiusPixels</ogc:Literal>
                 <ogc:Function name="env">
                   <ogc:Literal>radius</ogc:Literal>
                   <ogc:Literal>5</ogc:Literal>
                 </ogc:Function>
               </ogc:Function>
               <ogc:Function name="parameter">
                 <ogc:Literal>pixelsPerCell</ogc:Literal>
                 <ogc:Literal>20</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>wkb_geometry</ogc:PropertyName></Geometry>
              <Opacity>0.6</Opacity>
              <ColorMap type="ramp" >
                <ColorMapEntry color="#FFFFFF" quantity="0" label="nodata"
                  opacity="0"/>
                <ColorMapEntry color="#FFFFFF" quantity="0.02" label="nodata"
                  opacity="0"/>
                <ColorMapEntry color="#4444FF" quantity=".1" label="nodata"/>
                <ColorMapEntry color="#FF0000" quantity=".5" label="values" />
                <ColorMapEntry color="#FFFF00" quantity="1.0" label="values" />
              </ColorMap>
            </RasterSymbolizer>
           </Rule>
         </FeatureTypeStyle>
       </UserStyle>
     </NamedLayer>
    </StyledLayerDescriptor>

Editar el SLD como nombre "mapa de calor" con el editor de SLD de la GeoServer utilidad de administración.

  1. De la Capa de Publicación del complemento de menú "mapa de calor" como un estilo alternativo para los lugares poblados de la capa.
  2. Prueba con QGIS. Capa WMS muestra todos los estilos disponibles. Añadir una nueva capa en primer lugar con el estilo predeterminado de "punto" y un segundo tiempo con el estilo "mapa de calor". enter image description here
  3. Mira el resultado.enter image description here

El resto es afinar el mapa de calor de los parámetros y el color de la rampa por la edición de la SLD. Después de la SLD se guarda el archivo de la siguiente panorámica o zoom en el mapa para mostrar el efecto de la edición.

6voto

Subimage Puntos 1492

3voto

Joe Puntos 16

Mapserver puede hacer con la versión de desarrollo actual, que pronto será lanzado como v7.0. Cómo funciona es mejor documentado aquí: http://mapserver.org/development/rfc/ms-rfc-108.html

Para probar el "mapa de calor" de la característica de instalar MapServer 6.5-dev en su entorno. El próximo descargar "pnts" shapefile (.shp, .shx, .dbf y .prj) desde github https://github.com/mapserver/msautotest/tree/master/gdal/data. Guarde el archivo shapefile en algún lugar de su disco. Guarde el siguiente mapfile como "mapa de calor.map" (ligeramente editada de https://github.com/mapserver/msautotest/blob/master/gdal/heat.map) en el mismo directorio:

map
size 1000 500
extent -180 -90 180 90
name "test heat"
imagetype "png"
units dd
web
metadata
"ows_srs" "epsg:4326 epsg:3857 epsg:900913"
"ows_enable_request" "*"
end
end
projection
"+init=epsg:4326"
end
CONFIG "MS_ERRORFILE" "stderr"
layer
name "heatmap"
type raster
connectiontype kerneldensity
connection "points"
status on
processing "RANGE_COLORSPACE=%color%"
processing "KERNELDENSITY_RADIUS=%radius%"
processing "KERNELDENSITY_COMPUTE_BORDERS=%border%"
processing "KERNELDENSITY_NORMALIZATION=%norm%"
offsite 0 0 0
SCALETOKEN
NAME "%radius%"
VALUES
"0" "15"
"255000000" "20"
END
END
SCALETOKEN
NAME "%border%"
VALUES
"0" "ON"
"255000000" "OFF"
END
END
SCALETOKEN
NAME "%norm%"
VALUES
"0" "AUTO"
"255000000" "30"
END
END
SCALETOKEN
NAME "%color%"
VALUES
"0" "HSL"
"255000000" "RGB"
END
END
class
style
COLORRANGE "#0000ff00" "#0000ffff"
DATARANGE 0 32
end
style
COLORRANGE "#0000ffff" "#ff0000ff"
DATARANGE 32 255
end
end
end
symbol
name "circle"
type ellipse
points 1 1 end
end
layer
name "points"
status on
type POINT
data "pnts.shp"
projection
"+init=epsg:4326"
end
CLASS
MAXSCALE 255000000
STYLE
SIZE [VAL]
END
END
CLASS
MAXSCALE 265000000
STYLE
SIZE 0.1
END
END
CLASS
MAXSCALE 275000000
EXPRESSION ([VAL]>1)
STYLE
SIZE 1
END
END
CLASS
MAXSCALE 275000000
STYLE
SIZE 2
END
END
end
end

La siguiente solicitud, como editar para adaptarse a su instalación, debe mostrar un mapa de calor en tu navegador:

http://localhost/cgi-bin/mapserv.exe?map=/ms4w/heatmap.map&mode=map&layers=heatmap

Mapa de calor también está disponible como servicio WMS en la URL

http://localhost/cgi-bin/mapserv.exe?map=c:\ms4w\heatmap.map

Lamentablemente yo no puedo agregar una bonita captura de pantalla de mi ordenador aquí porque no he podido hacer que funcione en Windows. Esperamos que tengan Linux y mejor suerte. Sin embargo, usted puede ver algunos de los resultados esperados de https://github.com/mapserver/msautotest/tree/master/gdal/expectedpor ejemplo este https://github.com/mapserver/msautotest/blob/master/gdal/expected/heatmap-r20-noborder-fixednorm-rgb-expression.png

Cuando se ha conseguido la demo mapa de calor para el trabajo que usted sólo tendrá que editar el mapfile para leer "puntos" de la capa de PostGIS en lugar de un shapefile y, si es necesario, para editar proyección y extensiones para adaptarse a sus datos.

2voto

qiuxiafei Puntos 120

Geoserver puede representar un heatmap de puntos vectoriales utilizando Transformaciones de representación. Para que esta característica funcione, tienes que instalar la Extensión WPS (pero servicio WPS no necesita activarse).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X