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

    }
}
相关推荐
RReality10 小时前
【Unity UGUI】血条 / 进度条(HP Bar)
ui·unity·游戏引擎·图形渲染
mxwin18 小时前
Unity Shader URP:法线如何进行光照计算
unity·游戏引擎·shader
郝学胜-神的一滴18 小时前
中级OpenGL教程 009:用环境光告别模型死黑
前端·c++·unity·godot·图形渲染·opengl·unreal
用户831348593069819 小时前
Vue3+Cesium实现3DTiles模型实时调节(离地面高度/xyz轴旋转/模型经纬度偏移)
vue.js·cesium
mxwin1 天前
Unity URP 中的法线生成完全指南
unity·游戏引擎
游乐码1 天前
Unity基础(十五)LineRender画线功能
unity·游戏引擎
小贺儿开发1 天前
Unity3D 图片循环查看器
unity·工具·图片·列表·循环·ugui·互动
是果果呀儿2 天前
Vuforia实现物体旋转、移动、缩放
unity·增强现实
不知名的老吴2 天前
Unity3D 2022安装教程及全流程下载步骤指南
unity·游戏引擎
Thomas_YXQ2 天前
Unity3D Addressable 深度优化热更性能消耗
开发语言·3d·unity·微信