2016-07-03 102 views
1

我想渲染一個mapnik樣式表,但是我嘗試的任何東西都不會渲染標籤。這裏是我的樣式表:在mapnik中渲染要素標籤

<Map srs="+init=epsg:4326"> 
    <Style name="Polygon"> 
    <Rule> 
     <LineSymbolizer stroke="black" stroke-width="2" /> 
     <TextSymbolizer face-name="DejaVu Sans" placement="interior" allow-overlap="true">[name]</TextSymbolizer> 
    </Rule> 
    </Style> 
    <Layer name="polygon" srs="+init=epsg:4326"> 
    <StyleName>Polygon</StyleName> 
    <Datasource> 
     <Parameter name="type">geojson</Parameter> 
     <Parameter name="inline"><![CDATA[ 
{ 
    "type": "FeatureCollection", 
    "features": [ 
    { 
     "type": "Feature", 
     "geometry": { 
     "coordinates": [[ 
      [18.6609649658203, -32.59028569040753], 
      [18.6536693572998, -32.59762547484460], 
      [18.6737108230590, -32.59892704873228], 
      [18.6609649658203, -32.59028569040753] 
     ]], 
     "type": "Polygon" 
     }, 
     "properties": { 
     "name": "polygon" 
     } 
    } 
    ] 
} 
     ]]> 
     </Parameter> 
    </Datasource> 
    </Layer> 
</Map> 

地圖本身呈現很好,但我不能得到一個標籤出現。我正在使用node-mapnik,這是我在碼頭圖片中的服務中包裝的,我的代碼是here。我正在加載默認字體,並且我嘗試了幾種<TextSymbolizer>的語法變體,但沒有任何區別,只是不顯示標籤。

回答

1

其他任何人遇到這樣(因爲Mapnik的的文檔是不完整的,在案件完全錯誤的),你需要加載系統字體,而不是默認字體。在代碼:

const mapnik = require('mapnik'); 
mapnik.register_system_fonts(); 

Mapnik的對節點的示例代碼顯示mapnik.register_default_fonts();,但字體是否應該被從加載的文件夾爲空,我無法看到它們從何而來。

0

您是否嘗試過設置placement-type屬性?例如:

<TextSymbolizer face-name="DejaVu Sans" placement-type="simple" placement="interior" allow-overlap="true">[name]</TextSymbolizer> 
+0

謝謝。它實際上結束了一個字體未被加載的問題。 – aquavitae