mapbox面图层标注

mapbox并没有一个属性类似于’text-field’的symbol图层的直接可以标注的办法,这里笔者提供两种其他的面图层标注的办法用来大家参考

贴个群号

WebGIS学习交流群461555818,欢迎大家。

效果图

在这里插入图片描述

方案一 把面图层当做点图层直接展示

在mapbox里面,面图层是可以直接渲染成线图层和点图层的,这里我们的图层标注就是直接将面图层渲染成点图层,一个souce,两个layer,渲染成一个面,在渲染成点,点会在每一个闭合的要素上都会有标注,这个方案就是快速简单,缺点就是有要素不规范的时候,存在一种情况,就是有好多个稀碎的面组成一个面,导致出现在一个面会出现很多个点标注,解决办法就是自己处理一下geojson文件,把那些稀碎的给它删了。

         map.addSource('county',{
            type:'geojson',
            data:'你的geojson文件'
         })
        let countyLayer = {
            id:'county',
            source:'county',
            'type':'fill',
            maxzoom:8,
            paint: {
                // 'fill-opacity': 0.4,
                'fill-color':'blue',
            },
            layout: {
                visibility: 'visible'
            },
        }
          let countyNoteLayer = {
            id:'countyNote',
            source:'county',
            'type':'symbol',
            maxzoom:8,
            paint: {
                'text-color':"#505050",
                'text-halo-color':"#ffffff",
                "text-halo-blur": 1, 
                'text-halo-width':1,
            },
            layout: {
                visibility: 'visible',
                'text-field': "{county}",
                'text-size':12,
                'text-font': [ 'Microsoft YaHei' ],
                'icon-allow-overlap' : true,
                'text-allow-overlap': true,
                'text-anchor': 'center'
            },
        }

方案二 把面geojson取每个要素的中心点改造为点geojson

这里我提供一个函数。这里使用了turf.center方法来取要素中心点,就是两个souce,两个layer,一个面souce来渲染面,把面的geojson封装成点的souce来渲染点用来标注

//把面取中心点封装成点数据
const changeFillToPoint = (fillGeojson)=>{
  let pointGeojson =  fillGeojson.features.map(function(feature) {
    let center = turf.center(feature);
    return {
      "type": "Feature",  
      "geometry": {  
        "type": "Point",  
        "coordinates": center.geometry.coordinates
      },  
      "properties": {
        ...feature.properties
        // 可以包含原始面的属性,或者添加新的属性  
      }  
    }; 
  })
  return pointGeojson
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Mapbox中设置中文,您可以按照以下步骤进行操作: 1. 首先,确保您使用的是支持中文地图数据的Mapbox地图样式。您可以在Mapbox Studio中创建自定义地图样式,或者使用Mapbox提供的预定义地图样式。 2. 在Mapbox Studio或使用Mapbox GL JS进行开发时,您需要为地图添加一个中文字体。Mapbox默认使用的是英文字体,因此您需要手动添加中文字体以支持中文显示。 - 在Mapbox Studio中,您可以通过选择"添加资源"->"添加字体"来添加自定义字体。选择一个支持中文的字体文件(如.ttf或.otf格式),并将其上传到Mapbox Studio中。 - 在Mapbox GL JS中,您可以使用`map.addSource`和`map.addLayer`方法来添加一个自定义的字体源和图层。具体可参考Mapbox GL JS的文档。 3. 将地图样式的语言设置为中文。在Mapbox Studio或使用Mapbox GL JS时,您可以通过将`style`或`language`选项设置为"zh-Hans"来指定地图样式的语言为简体中文。示例代码如下: ```javascript // 在 Mapbox GL JS 中设置地图样式的语言为中文 var map = new mapboxgl.Map({ container: 'map', style: 'mapbox://styles/mapbox/streets-v11', language: 'zh-Hans' // 设置语言为简体中文 }); ``` 4. 在Mapbox Studio中,您还可以自定义地图样式的标签和道路颜色等属性,以满足中文地图的需求。您可以在"样式"选项卡中修改相应的设置。 通过按照上述步骤设置,您应该能够在Mapbox中显示中文地图了。请注意,确保使用的地图数据源支持中文标注和地点名称才能正常显示中文。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值