当前位置: 首页 > news >正文

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

在城市规划和土地管理领域,精确且详尽的空间数据是进行有效决策的基石。随着地理信息系统(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.xdnf.cn/news/950023.html

相关文章:

  • 使用大模型预测巨细胞病毒视网膜炎的技术方案
  • 【AI学习】李广密与阶跃星辰首席科学家张祥雨对谈:多模态发展的历史和未来
  • 【向量库】Weaviate概述与架构解析
  • 如何做好一份技术文档?从规划到实践的完整指南
  • 无人机视觉跟踪模块技术解析!
  • 无人机EN 18031欧盟网络安全认证详细解读
  • EasyRTC音视频实时通话功能在WebRTC与智能硬件整合中的应用与优势
  • 【数据结构】图论最短路径算法深度解析:从BFS基础到全算法综述​
  • 安宝特方案丨船舶智造AR+AI+作业标准化管理系统解决方案(维保)
  • DCMTKOpenCV-构建DICOM图像查看器
  • 保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
  • 在鸿蒙HarmonyOS 5中使用DevEco Studio实现指南针功能
  • 【磁盘】每天掌握一个Linux命令 - iostat
  • WEB3全栈开发——面试专业技能点P7前端与链上集成
  • Django 5 学习笔记总纲
  • 13.9 LLaMA 3+多模态提示工程:革命性语言学习Agent架构全解析
  • react-pdf(pdfjs-dist)如何兼容老浏览器(chrome 49)
  • 大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计
  • 篇章二 论坛系统——系统设计
  • C/C++ 面试复习笔记(5)
  • nuclio的配置文件yaml和docker compose的yaml的区别
  • 依赖注入(Dependency Injection)
  • 关于YOLOV5—Mosaic数据增强
  • 电源滤波器:不起眼却如何保障电子设备电源?
  • 1091 Acute Stroke (30)
  • 2025年全国I卷数学压轴题解答
  • 大模型链路调试平台之LangSmith实战指南
  • Web 架构之 API 安全防护:防刷、防爬、防泄漏
  • SpringBoot整合SSM
  • React中子传父组件通信操作指南