2.2 搜索国家

这个教程旨在指导您如何使用 MicroCity Web 脚本接口。

场景对象的数据结构

在场景中,您可以加载内置对象,如'box','sphere' 等,也可以导入外部 json 文件,如 geojson 和 gltf。所有加载到场景中的对象可以分为三种基本类型,称为pointspolylinemesh(多边形是mesh的一种特殊类型)。对象数据被组织成如下所示的分层树结构。您可以在 4.3 场景与对象 中找到有关对象的更多信息。

发起查询

您可以通过点击新建new打开一个示例脚本 -> 世界地图。然后点击运行run,这样世界上所有国家的地图和相关信息就会显示出来。现在假设我们想要找出人口超过1亿且完全位于北半球的国家。因此,我们需要检查每个国家的人口数量和边界坐标。以下是完整代码。

scene.setenv({camtype='ortho'})                              --将场景相机设置为正交投影
local obj = scene.addobj('/res/world_countries.geojson')     --获取世界各国地理数据
for i,country in ipairs(obj:getchildren()) do                --遍历每个国家
     local north = true                                      --假设国家位于北半球
     for j, land in ipairs(country:getchildren()) do         --遍历该国家所有领土
         local points = land:getvertices()                   --获取所有顶点坐标
         for y = 2, #points, 3 do                            --遍历顶点坐标中的纬度坐标
             if points[y] < 0 then                           --如果纬度小于0 (y<0)
                 north = false                               --该领土不完全位于北半球
             end
         end
     end
     local data = country:getdata()                          --获取国家属性数据
     if north and tonumber(data['POP_EST']) > 100000000 then --判断是否满足两个条件
         print(data['NAME'], ", 人口:", data['POP_EST'])      --打印国家名称和人口
         for j, land in ipairs(country:getchildren()) do     --遍历该国家所有领土
             land:setmat({color='yellow', opacity=0.6})      --标记为黄色且稍作透明处理
         end
     end
end
scene.render()                                               --渲染场景

展示结果

运行run脚本将会突出显示搜索到的国家,并在下方的消息栏中打印信息。您可以点击消息栏以放大它。

results

本文使用ChatGPT翻译,如有遗漏请反馈open in new window

Last Updated:
Contributors: huuhghhgyg