在mapnik

时间:2016-07-03 13:21:18

标签: node.js 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我已经包含在Docker镜像中的服务中,我的代码是here。我正在加载默认字体,我在<TextSymbolizer>的语法上尝试了几种变体,但没有任何区别,标签不会出现。

2 个答案:

答案 0 :(得分:1)

对于遇到此问题的其他人(因为mapnik的文档不完整且情况严重错误),您需要加载系统字体,而不是默认字体。在代码中:

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

Mapnik的节点示例代码显示mapnik.register_default_fonts();,但是应该从中加载字体的文件夹是空的,我无法看到它们应该来自哪里。

答案 1 :(得分:0)

您是否尝试过设置placement-type属性?例如:

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