Harmlose Frage - schwierige Antwort :wink:

Ich setze den GeoServer als “Interface” zwischen meinen in Leaflet geschriebene Anwendungen und meiner PostgreSQL/PostGIS-Datenbank ein.

Dadurch erreiche ich eine Trennung zwischen der Anwendung (z.B. Emergency Map), den Daten (Datenbank) und dem Styling. (*)

In der Anwendung “sage” ich nur “gib mir das Layer für die Feuerwehren (osm:Fire_Stations) in dem angezeigten Gebiet als WMS (Tiles)”:


      var L_Firestations = L.tileLayer.wms(geosWMS, merge_options(globalOverlayOptions, 
                   { name:          "Firestations"
                    ,layers:        "osm:Fire_Stations"
                   }));

oder für die Hydranten:



      var L_Hydrants = L.markerClusterGroup(merge_options(globalOverlayOptions, {
                     name:          "Hydrants"
                    ,type:          "WFS"
                    ,typeName:      "osm:Hydrants"
                    ,allMarkers:    []
                    ,disableClusteringAtZoom: 17
                    ,iconCreateFunction: function(cluster) {
                       return getClusterIcon(baseUrl+"/webcommon/images/svg/emergency_fire_hydrant.svg",cluster.getChildCount());
	                 }
                   }
                )
      );

Hydranten sind komplexer, da ich hier Clustering verwende. Dort verwende ich WFS (Web Feature Service), damit ich die Hydranten nachher mit Leaflet clustern kann.

Für die Sirenen wird nun ein WMS-Call zum GeoServer geschickt.
Der Geoserver schaut in dem Sirens-Layer nach, besorgt sich die Daten per SQL


select 'emergency=siren'::text "query",
       'n' || osm_id as osm_id,
       wno_AsOsmLink('n',osm_id::bigint) osm_link,
       wno_GetTagsAsJson(tags) tags,
       way
  from planet_osm_point 
 where tags->'emergency'='siren'

und den Style, der definiert, wie die Sirenen dargestellt werden sollen:


<?xml version="1.0" encoding="UTF-8"?>
<StyledLayerDescriptor version="1.0.0" 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"
                       xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd">
  <NamedLayer>

    <Name>Emergency Sirens</Name>

    <UserStyle>
      <Name>emergency sirens</Name>
      <Title>Emergency sirens</Title>
      <Abstract></Abstract>
      <FeatureTypeStyle>
        <Rule>
          <PointSymbolizer>
            <Graphic>
              <ExternalGraphic>
                <OnlineResource
                                xlink:type="simple"
                                xlink:href="http://localhost:8080/geoserver/styles/images/other/emergency_siren.svg" />
                <Format>image/svg+xml</Format>
              </ExternalGraphic>
              <Size>24</Size>
            </Graphic>
          </PointSymbolizer>
        </Rule>
      </FeatureTypeStyle>
    </UserStyle>
  </NamedLayer>
</StyledLayerDescriptor>

Hier nur ein Icon (emergency_siren.svg), bei anderen Styles aber auch Tag-abhängige Strichstärken oder Farben)

Der GeoServer besitzt ein Web-Interface, wo der Admin alles einstellen kann - und muß :wink:

Als Knackpunt für eure Projekte: Er trennt die Datendarstellung von den Datenquellen.

An Services bietet er mindestens WMF, WMS, WCS und WMS an und als Datenquellen kann er - in der Standardinstallation -

GS ist in Java geschrieben, aber das sollte für Profis (Josm!) kein Problem sein.

Gruss
walter

(*) sorry, bin kein Informatiker, da gibt es bestimmt bessere Begriffe für.