“详规一张图”——新加坡土地利用数据

在城市规划和土地管理领域,精确且详尽的空间数据是进行有效决策的基石。随着地理信息系统(GIS)技术的发展,我们能够以前所未有的精度和细节来捕捉、分析和展示土地利用信息。这不仅提升了数据的质量和可靠性,还使得城市规划者能够更深入地理解城市的结构和动态变化。通过GIS技术的应用,复杂的地理空间数据可以被转化为易于理解和操作的信息,从而支持更加科学合理的城市规划和管理决策。

新加坡的用地统计数据不仅提供了一个全面的视角,让我们得以深入了解这座国际化都市的土地使用现状及其变化趋势,而且也为未来城市发展的预测和规划提供了坚实的数据支持。新加坡作为一个高度发达的城市国家,其土地管理和城市规划一直走在世界前列。政府通过严格的土地用途管制和高效的基础设施建设,确保了城市的可持续发展和居民的生活质量。

新加坡用地规划官网:URA SPACE

我们参考HTML网页信息的GET获取方法,先看3个关键部分标头、负载、 预览;

标头:通常包括URL的连接,也就是目标资源的位置,可以了解网页使用的是GET请求方法;

负载:对于GET请求:负载通常包含了传递的参数,这里我们可以看到它的传参包括,当前位置坐标,使用的坐标系EPSG:4326;

预览:指的是对响应内容的快速查看或摘要显示,我们可以看到当前地块的标签信息,和geometry的几何多边形信息;

这里有一个细节需要注意一下,因为我们的获取方法是以创建网格点进行遍历,所有这里要考虑新加坡的最大和最小坐标的边界,另外这里的坐标系是Web墨卡托投影(EPSG:3857);

接下来就是数据获取部分,先讲一下方法思路,一共三个步骤;

方法思路

  1. 以约10m为间隔(0.0001度)创建网格点,这些网格点将覆盖整个新加坡区域;
  2. 遍历每个网格点,构建API请求URL,发送HTTP请求获取该区域的土地用途数据;
  3. 提取每个地块的属性信息,提取几何信息,将处理后的数据转换为GeoDataFrame格式,存为shp文件;

第一步:我们先找到对应数据存储位置,获取所有地块的属性信息,经过测试,每次查询一个地块会对应一个html,我们通过修改坐标位置来进行数据获取;

第二步:以约10m为间隔(0.0001度)创建网格点,利用GET请求获取所有网格对应地块信息,并根据标签进行保存,另存为shp,tips如果对精度有进一步要求可以修改grid_size = 0.0001 这个参数;

完整代码#运行环境 Python 3.11

import requests
import geopandas as gpd
from shapely.geometry import Polygon
import math
from pyproj import Transformer# 定义坐标转换器
transformer = Transformer.from_crs("EPSG:3857", "EPSG:4326", always_xy=True)# 新加坡边界(Web墨卡托投影)
xmin, ymin = 11532510.446400002, 127973.29659999907
xmax, ymax = 11622551.8041, 166493.53660000116# 转换为WGS84坐标
lon_min, lat_min = transformer.transform(xmin, ymin)
lon_max, lat_max = transformer.transform(xmax, ymax)# 定义网格大小(度)
grid_size = 0.0001  # 约10m# 创建网格点
lons = []
lats = []
current_lon = lon_min
while current_lon < lon_max:current_lat = lat_minwhile current_lat < lat_max:lons.append(current_lon)lats.append(current_lat)current_lat += grid_sizecurrent_lon += grid_size# 存储所有特征
all_features = []
all_geometries = []# 遍历每个网格点
for lon, lat in zip(lons, lats):url = f"https://maps.ura.gov.sg/arcgis/rest/services/MP19/Landuse_gaz/MapServer/46/query?returnGeometry=true&where=1%3D1&outSR=4326&outFields=*&inSr=4326&geometry=%7B%22x%22%3A{lon}%2C%22y%22%3A{lat}%2C%22spatialReference%22%3A%7B%22wkid%22%3A4326%7D%7D&geometryType=esriGeometryPoint&spatialRel=esriSpatialRelWithin&f=json"headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/137.0.0.0 Mobile Safari/537.36 Edg/137.0.0.0'}try:response = requests.get(url, headers=headers)if response.status_code == 200:data = response.json()for feature in data['features']:attributes = feature['attributes']geometry = feature['geometry']['rings'][0]polygon = Polygon(geometry)# 检查是否已经存在相同的OBJECTIDif not any(f['OBJECTID'] == attributes['OBJECTID'] for f in all_features):all_features.append({'OBJECTID': attributes['OBJECTID'],'LU_DESC': attributes['LU_DESC'],'LU_DT_DESC': attributes['LU_DT_DESC'],'GPR_NUM': attributes['GPR_NUM'],'PARCEL_ID': attributes['PARCEL_ID'],'REGION_N': attributes['REGION_N'],'PLN_AREA_N': attributes['PLN_AREA_N'],'SUBZONE_N': attributes['SUBZONE_N']})all_geometries.append(polygon)print(f"Processed point: {lon}, {lat}")except Exception as e:print(f"Error processing point {lon}, {lat}: {str(e)}")continue# 创建GeoDataFrame
gdf = gpd.GeoDataFrame(all_features, geometry=all_geometries, crs='EPSG:4326')# 保存到shapefile
gdf.to_file("singapore_land_use.shp")print("Shapefile saved successfully.")

脚本执行结束,我们会得到一个文件名为lsingapore_land_use的shp图层,获取数据标签如下,LU_DESC(土地用途描述)、LU_DT_DESC(详细土地用途描述)、GPR(总容积率)、PARCEL_ID(地块ID) 、REGION_N(区域名称)、PLN_AREA_N(规划区域名称)、SUBZONE_N(分区名称)、SUBZONE_NO(分区编号)、SHAPE_Area(地块面积)、SHAPE_Length(地块周长),其他一些非关键标签,这里省略;

第三步:提取每个地块的属性信息,提取几何信息,将处理后的数据转换为GeoDataFrame格式,存为shp文件,将数据导入ArcGIS进行可视化;

通过上述步骤,我们成功地从新加坡的土地利用统计数据中提取了详细的空间数据,并将其转换为shp格式。这些数据不仅涵盖了土地用途描述、详细土地用途描述、总容积率、地块ID、区域名称、规划区域名称和分区名称等关键信息,还包含了几何形状信息,使得我们可以进行进一步的空间分析和可视化,生成的shp文件可以导入到ArcGIS或其他GIS软件中进行详细的分析和展示。这为我们提供了宝贵的数据支持,有助于城市规划者更好地理解新加坡的土地使用现状及其变化趋势,从而制定更加科学合理的未来城市发展计划。

文章仅用于分享个人学习成果与个人存档之用,分享知识,如有侵权,请联系作者进行删除。所有信息均基于作者的个人理解和经验,不代表任何官方立场或权威解读。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/diannao/86419.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…

MySQL自定义函数零基础学习教程

1. 引言 想象一下&#xff0c;你在用计算器做数学题。每次计算"圆形面积"时&#xff0c;你都要输入&#xff1a;3.14 半径 半径。如果能把这个计算步骤保存起来&#xff0c;下次只要输入半径就自动算出面积&#xff0c;那该多方便&#xff01; MySQL自定义函数就…

八股---7.JVM

1. JVM组成 1.1 JVM由哪些部分组成?运行流程? 难易程度:☆☆☆ 出现频率:☆☆☆☆ Java Virtual Machine:Java 虚拟机,Java程序的运行环境(java二进制字节码的运行环境)好处:一次编写,到处运行;自动内存管理,垃圾回收机制程序运行之前,需要先通过编译器将…

企业级AI-DevOps工具链的构成及实现方案

企业级AI-DevOps工具链的构成及实现方案 DevOps在AI大模型研发中的重要性及应用背景一、场景驱动的AI产品研发运营机制二、AI-DevOps生产线建设三、基于DevOps的AI大模型研发机制四、基于DevOps的智能体场景研发机制五、场景驱动的应用评估分析机制 DevOps在AI大模型研发中的重…

在 Spring Boot 项目里,MYSQL中json类型字段使用

前言&#xff1a; 因为程序特殊需求导致&#xff0c;需要mysql数据库存储json类型数据&#xff0c;因此记录一下使用流程 1.java实体中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型&#xff08;算法、数据分析、机器学习等&#xff09;不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…

在 Win10 上 WSL 安装 Debian 12 后,Linux 如何启动 SMTP 服务?

在 WSL 的 Debian 12 中启动 SMTP 服务&#xff08;以 Postfix 为例&#xff09;&#xff0c;请按以下步骤操作&#xff1a; 1. 安装 Postfix sudo apt update sudo apt install postfix mailutils安装过程中会弹出配置窗口&#xff1a; General type of mail configuration&a…

树莓派超全系列教程文档--(59)树莓派摄像头rpicam-apps

这里写目录标题 rpicam-apps libcamera 文章来源&#xff1a; http://raspberry.dns8844.cn/documentation 原文网址 rpicam-apps 树莓派操作系统 Bookworm 将相机捕捉应用程序从 libcamera-\* 重命名为 rpicam-*。符号链接允许用户暂时使用旧名称。尽快采用新的应用程序名称…

【数据结构】图论最短路径算法深度解析:从BFS基础到全算法综述​

最短路径 导读一、最短路径1.1 单源最短路径1.2 各顶点间的最短路径1.3 最短路径算法 二、BFS算法结语内容回顾下一篇预告&#xff1a;挑战带权最短路径&#xff01; 导读 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff01; 欢迎继续探索图算法的…

中国政务数据安全建设细化及市场需求分析

(基于新《政务数据共享条例》及相关法规) 一、引言 近年来,中国政府高度重视数字政府建设和数据要素市场化配置改革。《政务数据共享条例》(以下简称“《共享条例》”)的发布,与《中华人民共和国数据安全法》(以下简称“《数据安全法》”)、《中华人民共和国个人信息…

Linux信号保存与处理机制详解

Linux信号的保存与处理涉及多个关键机制&#xff0c;以下是详细的总结&#xff1a; 1. 信号的保存 进程描述符&#xff08;task_struct&#xff09;&#xff1a;每个进程的PCB中包含信号相关信息。 pending信号集&#xff1a;记录已到达但未处理的信号&#xff08;未决信号&a…

【Redis】笔记|第10节|京东HotKey实现多级缓存架构

缓存架构 京东HotKey架构 代码结构 代码详情 功能点&#xff1a;&#xff08;如代码有错误&#xff0c;欢迎讨论纠正&#xff09; 多级缓存&#xff0c;先查HotKey缓存&#xff0c;再查Redis&#xff0c;最后才查数据库热点数据重建逻辑使用分布式锁&#xff0c;二次查询更新…

php apache构建 Web 服务器

虚拟机配置流程winsever2016配置Apache、Mysql、php_windows server 2016配置web服务器-CSDN博客 PHP 和 Apache 通过 ​​模块化协作​​ 共同构建 Web 服务器&#xff0c;以下是它们的交互机制和工作流程&#xff1a; ​​一、核心组件分工​​ 组件角色​​Apache​​Web …

二分查找排序讲解

一、二分查找&#xff08;Binary Search&#xff09; 核心思想&#xff1a; 前提&#xff1a;数组必须是 有序的&#xff08;比如从小到大排列&#xff09;。目标&#xff1a;在数组中快速找到某个数&#xff08;比如找 7&#xff09;。方法&#xff1a;每次排除一半的数&…

【Redis实战:缓存与消息队列的应用】

在现代互联网开发中&#xff0c;Redis 作为一款高性能的内存数据库&#xff0c;广泛应用于缓存和消息队列等场景。本文将深入探讨 Redis 在这两个领域的应用&#xff0c;并通过代码示例比较两个流行的框架&#xff08;Redis 和 RabbitMQ&#xff09;的特点与适用场景&#xff0…

[拓扑优化] 1.概述

常见的拓扑优化方法有&#xff1a;均匀化法、变密度法、渐进结构优化法、水平集法、移动可变形组件法等。 常见的数值计算方法有&#xff1a;有限元法、有限差分法、边界元法、离散元法、无网格法、扩展有限元法、等几何分析等。 将上述数值计算方法与拓扑优化方法结合&#…

【openssl】升级为3.3.1,避免安全漏洞

本文档旨在形成 对Linux系统openssl版本进行升级 的搭建标准操作过程&#xff0c;搭建完成后&#xff0c;实现 openssl 达到3.3以上版本&#xff0c;避免安全漏洞 效果。 一、查看当前版本 版本不高于3.1的&#xff0c;均需要升级。 # 服务器上运行以下命令&#xff0c;查看…

基于正点原子阿波罗F429开发板的LWIP应用(6)——SNTP功能和lwiperf测速

说在开头 正点原子F429开发板主芯片采用的是STM32F429IGT6&#xff0c;网络PHY芯片采用的是LAN8720A(V1)和YT8512C(V2)&#xff0c;采用的是RMII连接&#xff0c;PHY_ADDR为0&#xff1b;在代码中将会对不同的芯片做出适配。 CubeMX版本&#xff1a;6.6.1&#xff1b; F4芯片组…

C:\Users\中文名修改为英文名

C:\Users\中文名修改为英文名 背景操作步骤 背景 买了台新电脑&#xff0c;初始化好不知道啥操作把自己的登录用户名改成了中文&#xff0c;有些安装的软件看见有中文直接就水土不服了。 操作步骤 以下称中文用户名为张三。 正常登录张三用户 进入用户管理页面修改用户名&a…

YOLOv12环境配置,手把手教你使用YOLOv12训练自己的数据集和推理(附YOLOv12网络结构图),全文最详细教程

文章目录 前言一、YOLOv12代码下载地址1.YOLOv12模型结构图 二、YOLO环境配置教程1.创建虚拟环境2.激活虚拟环境3.查询自己电脑可支持最高cuda版本是多少&#xff08;无显卡的同学可以跳过这个步骤&#xff09;4.pytorch安装5.验证 PyTorch GPU 是否可用&#xff08;没有显卡的…