2016-07-03 60 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