Cesium for Unity叠加行政区划线

先放上效果图

使用了插件 Shapes

https://assetstore.unity.com/packages/tools/particles-effects/shapes-173167

数据集文件

1、带十段线的

通过网盘分享的文件:100000_full.json

链接: https://pan.baidu.com/s/1gkpe8qEbpI9hfSFNWz8B-w?pwd=66ij 提取码: 66ij

2、不带十段线的

通过网盘分享的文件:中国.geoJson

链接: https://pan.baidu.com/s/1OuDg0MFIv3cRBi9qiIFdMA?pwd=raq5 提取码: raq5

来自 https://geojson.hxkj.vip/

代码

csharp 复制代码
using CesiumForUnity;
using Newtonsoft.Json;
using Shapes;
using System.Collections.Generic;
using System.IO;
using Unity.Mathematics;
using UnityEngine;

public class TestLine : MonoBehaviour
{
    public GameObject linePrefab;
    public CesiumGeoreference cg;

    // Start is called before the first frame update
    void Start()
    {
        string json = File.ReadAllText(Application.streamingAssetsPath + "/100000_full.json");
        Root root = JsonConvert.DeserializeObject<Root>(json);
        Debug.Log(root.name);
        GameObject lineRoot = new GameObject();
        lineRoot.name = "lineRoot";
        CesiumGlobeAnchor cgal = lineRoot.AddComponent<CesiumGlobeAnchor>();
        cgal.longitudeLatitudeHeight = new double3(0, 0, 0);
        lineRoot.transform.SetParent(transform);

        double3 temp = new double3();
        foreach (Feature f in root.features)
        {
            if (f.geometry.type == "MultiPolygon")
            {
                var multi = JsonConvert.DeserializeObject<List<List<List<List<double>>>>>(
                    JsonConvert.SerializeObject(f.geometry.coordinates)
                );
                Debug.Log($"{f.properties.name}: MultiPolygon with {multi.Count} polygons");

                for (int i = 0; i < multi.Count; i++)
                {
                    List<List<List<double>>> item = multi[i];

                    GameObject lineObject = Instantiate(linePrefab, lineRoot.transform);
                    lineObject.name = f.properties.name;
                    Polyline polyline = lineObject.GetComponent<Polyline>();
                    polyline.Thickness = 2000; 
                    List<Vector3> list = new List<Vector3>();

                    for (var j = 0; j < item[0].Count; j++)
                    {
                        double3 l = new double3();
                        l.x = item[0][j][0];
                        l.y = item[0][j][1];
                        l.z = 0;

                        if(temp.Equals(l))
                        {
                            //剔除重复的点,会导致画线中断,画线插件有bug
                            continue;
                        }
                        temp = l;
                        double3 t3 = CesiumWgs84Ellipsoid.LongitudeLatitudeHeightToEarthCenteredEarthFixed(l);
                        double3 u3 = cg.TransformEarthCenteredEarthFixedPositionToUnity(t3);
                        Vector3 v3 = new Vector3((float)u3.x, (float)u3.y, (float)u3.z);
                        polyline.AddPoint(v3); 
                    } 
                    polyline.Closed = true; 
                }
            }
            else if (f.geometry.type == "Polygon")
            {
                var poly = JsonConvert.DeserializeObject<List<List<List<double>>>>(
                    JsonConvert.SerializeObject(f.geometry.coordinates)
                );
                Debug.Log($"{f.properties.name}: Polygon with {poly.Count} rings");
            }
            else
            {
                Debug.LogWarning(f.geometry.type);
            }
        }
    }

    // Update is called once per frame
    void Update()
    {

    }
}
相关推荐
毕安格 - BimAngle13 小时前
国家电网 GIM 格式模型一键输出 3D Tiles (for Cesium) 和 glTF/glb 更新时间:2026-08-18
3d·gis·cesium·gltf·glb·3d tiles·gim
鹿野素材屋14 小时前
Unity超轻量级中文语音播报,仅5兆大小,无需联网即可使用,适用于弹幕、提示等动态语音播出
unity·游戏引擎
玖玥拾2 天前
Unity3D RPG 入门项目(八)游戏设置面板、帧率控制、快捷技能药品栏、技能解锁系统
游戏·3d·unity·游戏引擎
探索前端2 天前
3dtiles加载时被地形遮挡问题研究及处理思路
前端·3d·cesium
ellis19702 天前
u3d插件xLua[十] lua侧判空问题
unity
牛哇网络工作室2 天前
UnityHDRP写实数字人全流程基础5—语音输入和语音识别
android·unity·c#·游戏引擎·aigc·语音识别·xcode
ellis19702 天前
u3d插件xLua[九]例8 Hotfix
unity
淡海水2 天前
01-07-运行时-GC深度剖析-内存分配回收与结构选择
jvm·windows·unity·gc
优梦创客3 天前
游戏开发架构选型:第1篇|什么是架构?从进球事件看 MVC 的局限
unity·架构·游戏引擎·游戏开发
xiaominlaopodaren3 天前
three.js最小地图运行时(一):视图状态
javascript·gis·three.js