2.2 搜索国家
这个教程旨在指导您如何使用 MicroCity Web 脚本接口。
场景对象的数据结构
在场景中,您可以加载内置对象,如'box','sphere' 等,也可以导入外部 json 文件,如 geojson 和 gltf。所有加载到场景中的对象可以分为三种基本类型,称为points、polyline 和mesh(多边形是mesh的一种特殊类型)。对象数据被组织成如下所示的分层树结构。您可以在 4.3 场景与对象 中找到有关对象的更多信息。
发起查询
您可以通过点击新建打开一个示例脚本 -> 世界地图。然后点击运行
,这样世界上所有国家的地图和相关信息就会显示出来。现在假设我们想要找出人口超过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() --渲染场景
展示结果
运行脚本将会突出显示搜索到的国家,并在下方的消息栏中打印信息。您可以点击消息栏以放大它。
本文使用ChatGPT翻译,如有遗漏请反馈。