在 mapnik 中渲染特征标签
Rendering feature labels in 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>
语法的几种变体,但没有任何区别,标签只是没有出现。
您是否尝试设置 placement-type
属性?例如:
<TextSymbolizer face-name="DejaVu Sans" placement-type="simple" placement="interior" allow-overlap="true">[name]</TextSymbolizer>
对于遇到此问题的任何其他人(因为 mapnik 的文档不完整并且在某些情况下完全错误),您需要加载系统字体,而不是默认字体。在代码中:
const mapnik = require('mapnik');
mapnik.register_system_fonts();
Mapnik 的节点示例代码显示 mapnik.register_default_fonts();
,但应该从中加载字体的文件夹是空的,我看不到它们应该从哪里来。
我正在尝试渲染 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>
语法的几种变体,但没有任何区别,标签只是没有出现。
您是否尝试设置 placement-type
属性?例如:
<TextSymbolizer face-name="DejaVu Sans" placement-type="simple" placement="interior" allow-overlap="true">[name]</TextSymbolizer>
对于遇到此问题的任何其他人(因为 mapnik 的文档不完整并且在某些情况下完全错误),您需要加载系统字体,而不是默认字体。在代码中:
const mapnik = require('mapnik');
mapnik.register_system_fonts();
Mapnik 的节点示例代码显示 mapnik.register_default_fonts();
,但应该从中加载字体的文件夹是空的,我看不到它们应该从哪里来。