2013年11月19日火曜日

17 - Open Street Map 4 - スタイリングの確認

17-5 OpenStreetMap スタイリングの確認a 左側の欄の「Layer Preview」をクリックします。





b 「npn:roads」の「OpenLayers」リンクをクリックします。



c 「wms を開く」ダイアログで「ファイルを保存する」を選択しボタンをクリックします。





wms の内容は次のようになっています。

<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE ServiceExceptionReport SYSTEM "http://localhost:8080/geoserver/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd"> <ServiceExceptionReport version="1.1.1" >   <ServiceException>
      The requested Style can not be used with this layer.  The style specifies an attribute of aeroway and the layer is: npn:roads
</ServiceException></ServiceExceptionReport>


osm_roads スタイルの Runway のデータを削除します。
(下記の方法で時間がかかる場合は、osm_roads.sld ファイルを修正してアップロードしてください。)
c 左側の欄の Data -> Styles をクリックします。






d osm_roads をクリックします。





 e <!-- Runways from openstreetmap --> から
<-- end of zoom level b --> までを削除します。
(「roads」の「Default Style」が「osm_roads」であることを確認します。)

f 左側の欄の「Layer Preview」をクリックします。







g 「npn:roads」の「OpenLayers」リンクをクリックします。
「wms を開く」ダイアログで「ファイルを保存する」を選択しボタンをクリックします。

wms の内容は次のようになっています。


<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE ServiceExceptionReport SYSTEM "http://localhost:8080/geoserver/schemas/wms/1.1.1/WMS_exception_1_1_1.dtd"> <ServiceExceptionReport version="1.1.1" >   <ServiceException>
      The requested Style can not be used with this layer.  The style specifies an attribute of highway and the layer is: npn:roads
</ServiceException></ServiceExceptionReport>

osm_roads.sld ファイルのすべての
<NamedLayer> の <Name> を npn:roads にします。<-1
<Rule> の <Name> を npn:roads にします。これは表示に影響はない(?)と思います。<-2
<ogc:Filter> の <ogc:PropertyName> を type にします。<-3

---
<NamedLayer>
 <Name>npn:roads</Name> <-1
  <UserStyle>
   <Title>A boring default style</Title>
   <Abstract>A sample style that just prints out a green line</Abstract>

   <!-- start of zoom level 3 -->

   <FeatureTypeStyle>
    <Rule>
     <Name>npn:roads</Name> <-2
     <Title>freeways- outer zoom level</Title>
     <Abstract>freeways style openstreetmap data</Abstract>
     <ogc:Filter>
      <ogc:Or>
       <ogc:PropertyIsEqualTo>
        <ogc:PropertyName>type</ogc:PropertyName> <-3
        <ogc:Literal>residential</ogc:Literal>
       </ogc:PropertyIsEqualTo>
       <ogc:PropertyIsEqualTo>
        <ogc:PropertyName>type</ogc:PropertyName> <-3
        <ogc:Literal>unclassified</ogc:Literal>
       </ogc:PropertyIsEqualTo>
      </ogc:Or>
     </ogc:Filter>
     <MinScaleDenominator>1000</MinScaleDenominator>
     <MaxScaleDenominator>4000</MaxScaleDenominator>
     <LineSymbolizer>
      <Stroke>
       <CssParameter name="stroke">#f4faf6</CssParameter>
       <CssParameter name="stroke-width">12</CssParameter>
       <CssParameter name="stroke-linejoin">round</CssParameter>
      </Stroke>
     </LineSymbolizer>
     <TextSymbolizer>
      <Label>
       <ogc:PropertyName>name</ogc:PropertyName>
      </Label>
      <Font>
       <CssParameter name="font-size">10</CssParameter>
       <CssParameter name="font-family">Arial</CssParameter>
       <CssParameter name="font-color">#eeeeee</CssParameter>
      </Font>
     <LabelPlacement>
      <LinePlacement>
       <PerpendicularOffset>
         0
       </PerpendicularOffset>
      </LinePlacement>
     </LabelPlacement>
     <Halo>
      <Radius>
       <ogc:Literal>1</ogc:Literal>
      </Radius>
      <Fill>
       <CssParameter name="fill">#f4faf6</CssParameter>
      </Fill>
     </Halo>
     <Fill>
      <CssParameter name="fill">#808080</CssParameter>
     </Fill>
     <VendorOption name="maxDisplacement">50</VendorOption>
     <VendorOption name="labelAllGroup">true</VendorOption>
     <VendorOption name="removeOverlaps">true</VendorOption>
     <VendorOption name="followLine">true</VendorOption>
     <VendorOption name="group">true</VendorOption>
    </TextSymbolizer>
   </Rule>
  </FeatureTypeStyle>
---

roads の type の内容は次の通りです。

user@debian7-vmw:~$ psql osm
psql (9.1.9)
"help" でヘルプを表示します.

osm=> \dt
               リレーションの一覧
 スキーマ |       名前       |    型    | 所有者 
----------+------------------+----------+--------
 public   | geometry_columns | テーブル | user
 public   | roads            | テーブル | user
 public   | spatial_ref_sys  | テーブル | user
(3 行)

osm=> SELECT DISTINCT type FROM roads;
       type      
------------------
_unclassified
<pedestrian>
abandoned
bridleway
bus_guideway
bus_stop
byway
construction
constructions
corridor
crossing
cy[
cycleway
destroyed
disused
elevator
emergency_access
escalator
escape
ferry
footpath
footway
fre
ire
living_street
mini_roundabout
minor
motorway
motorway_link
old_trunk
path
payh
pedestrian
platform
primary
primary_link
proposed
raceway
residential
residential;seco
residential;unc
residential;uncl
rest_area
road
secondary
secondary_link
service
service;road
services
slope
steps
tertiary
tertiary_link
track
traffic_signals
trunk
trunk_link
turning_loop
unclassified
unclassified;re
unclassified;res
undefined
unsurfaced
yellow_line
yes

(END):q

このうち、osm_roads.sld に設定されているものは次の通りです。

residential
unclassified
primary
secondary
tertiary
motorway
trunk


倍率によって、表示できる道路、線の太さ、色が変わるように設定されています。
「Layer Preview」をクリックして「npn:roads」の「OpenLayers」リンクをクリックしてください。
最初の倍率では何も表示されません。
拡大すると表示されるようになります。
(メモリ3個目。表示に時間がかかりました。)

Throw GeoServer a curve (and it will be labeled)
http://blog.geoserver.org/2009/01/08/throw-geoserver-a-curve/

に説明があります。
これによってラベルが道路に沿って表示されます。

0 件のコメント: