You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ArcGIS .NET SDK离线地图中添加城市名称?能否用FeatureLayer实现?

解决ArcGIS .NET SDK离线地图添加城市、街道及名称要素的问题

你可以通过FeatureLayer实现离线要素(城市、街道、名称等)的显示,但需要提前准备好对应的离线要素数据(比如GeoPackage、Shapefile格式),以下是具体实现步骤:

1. 准备离线要素数据

首先需要导出包含城市边界、街道线、名称属性的离线要素数据集,推荐使用GeoPackage格式(ArcGIS生态对其离线支持完善)。你可以通过ArcGIS Pro将在线要素图层或本地要素导出为GeoPackage,确保导出的数据包含需要显示的属性字段(如街道名称STREET_NAME、城市名称CITY_NAME等)。

2. 加载离线要素到FeatureLayer

以GeoPackage为例,将要素数据加载到FeatureLayer,并添加到地图的操作图层中(与现有WebTiledLayer底图叠加):

完整示例代码

// 原有WebTiledLayer底图代码
const string tilePath = @"C:\map\{level}\{col}\{row}.png";
WebTiledLayer webLayer = new(tilePath);
Basemap baseMap = new();
baseMap.BaseLayers.Add(webLayer);
Map map = new Map(baseMap);

// 新增:加载GeoPackage中的街道要素
string gpkgPath = @"C:\map\offline_features.gpkg";
using (var gpkg = await GeoPackage.OpenAsync(gpkgPath))
{
    // 获取街道要素表(假设表名为"streets")
    FeatureTable streetTable = gpkg.FeatureTables.First(t => t.TableName == "streets");
    // 创建街道FeatureLayer
    FeatureLayer streetLayer = new(streetTable);
    
    // 设置街道渲染:蓝色线,宽度2
    SimpleLineSymbol streetSymbol = new(SimpleLineSymbolStyle.Solid, Colors.Blue, 2);
    SimpleRenderer streetRenderer = new(streetSymbol);
    streetLayer.Renderer = streetRenderer;
    
    // 设置街道名称标注:基于STREET_NAME字段
    LabelDefinition streetLabelDef = new(
        new ArcadeLabelExpression("$feature.STREET_NAME"),
        new TextSymbol(Colors.Black, 10, SimpleTextSymbolStyle.Normal)
    );
    streetLayer.LabelDefinitions.Add(streetLabelDef);
    streetLayer.IsLabelsVisible = true;

    // 将街道图层添加到地图操作图层
    map.OperationalLayers.Add(streetLayer);

    // 同理可加载城市面要素(示例)
    FeatureTable cityTable = gpkg.FeatureTables.First(t => t.TableName == "cities");
    FeatureLayer cityLayer = new(cityTable);
    
    // 设置城市渲染:浅红色填充,黑色边框
    SimpleFillSymbol citySymbol = new(SimpleFillSymbolStyle.Solid, Color.FromArgb(100, 255, 150, 150), new SimpleLineSymbol(SimpleLineSymbolStyle.Solid, Colors.Black, 1));
    SimpleRenderer cityRenderer = new(citySymbol);
    cityLayer.Renderer = cityRenderer;
    
    // 设置城市名称标注
    LabelDefinition cityLabelDef = new(
        new ArcadeLabelExpression("$feature.CITY_NAME"),
        new TextSymbol(Colors.DarkRed, 12, SimpleTextSymbolStyle.Bold)
    );
    cityLayer.LabelDefinitions.Add(cityLabelDef);
    cityLayer.IsLabelsVisible = true;

    map.OperationalLayers.Add(cityLayer);
}

// 绑定地图到视图
_mapView.Map = map;

3. 关键说明

  • 如果使用Shapefile,替换GeoPackage的加载逻辑为ShapefileFeatureTable.OpenAsync(@"C:\map\streets.shp")即可。
  • 要素表名、属性字段名需与你导出的数据集一致,代码中需对应修改。
  • 可以通过调整渲染符号、标注样式,让要素与底图视觉协调。

内容的提问来源于stack exchange,提问作者anonimusBird

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 20:53:10