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()
    {

    }
}
相关推荐
青山Coding2 天前
Cesium应用(四):全球台风气象可视化实现
前端·vue.js·cesium
斯幽柏雷科技2 天前
[Unity]Inspector各种写法(持续更新中)
java·unity·游戏引擎
李剑一2 天前
Cesium 实现园区水景!3 种水面效果,Water 材质 5 分钟搞定
前端·vue.js·cesium
毕竟秋山澪2 天前
unity Skill接入TraeAI操作步骤
unity·游戏引擎
XR-AI-JK2 天前
01-VR开发如何配置和搭建基础环境
unity·vr·vr基础教程·vr教程·vr实战教程·vr节奏游戏·unityvr教程
派葛穆2 天前
Unity-生成预制体1
unity
WarPigs2 天前
Unity CG着色器实战
unity·着色器
废嘉在线抓狂.2 天前
TimeLine如何自定义轨道
unity·c#·对话系统
koiy.cc2 天前
Cesium:基于cesium-plot-js的标绘
cesium
用户43761190302152 天前
让 AI 用自然语言操控三维地球 -- Cesium MCP 开源实践
gis·cesium