You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle 18c如何通过SQL生成方格网格线段坐标数据

Oracle 18c 用SQL生成方格网格线段坐标

需求说明

通过SQL查询生成构成方格网格图的所有拆分线段坐标列表,输出效果参考下图:
方格网格线生成效果

输出字段固定为线段起点X、起点Y、终点X、终点Y,样例数据格式如下:

STARTPOINT_X STARTPOINT_Y ENDPOINT_X ENDPOINT_Y
------------ ------------ ---------- ----------
           0            0          1          0 --水平线段
           1            0          2          0
           2            0          3          0
           3            0          4          0
           4            0          5          0
           5            0          6          0

         ...

           0            0          0          1 --垂直线段
           0            1          0          2
           0            2          0          3
           0            3          0          4
           0            4          0          5
           0            5          0          6

         ...

[总计220条数据]

规则约束

  • 所有线段在网格交点处拆分,每条线段长度固定为1单位,由两个顶点坐标定义
  • 查询支持自定义网格尺寸,可灵活生成1010、100100等不同规格的网格
  • 网格为正方形,单格边长固定为1 unit
  • 提示:样例数据中垂直线段从第111行开始

需求背景

生成该数据用于获取测试用线要素,支撑Oracle Spatial相关查询测试,可按需生成数百到数千条线段数据。网格形式的线数据导入制图软件后可直观校验,快速排查线段缺失问题。

实现方法

逻辑说明

网格线段分两类生成后合并即可:

  • 水平线段:固定Y轴坐标,X轴逐单位生成线段,Y值覆盖网格全高范围
  • 垂直线段:固定X轴坐标,Y轴逐单位生成线段,X值覆盖网格全宽范围

线段数校验规则:若网格为NN个单元格(坐标范围0~N),水平线段共N*(N+1)条,垂直线段共N*(N+1)条,总条数2*N*(N+1)。样例中1010单元格网格总条数为21011=220,和示例一致。

可直接运行的SQL代码

将网格尺寸参数统一放在开头配置,修改即可生成不同规格数据:

WITH
-- 网格参数配置:修改grid_size值即可调整网格尺寸,例:10对应10*10单元格网格,总线段220条
params AS (
    SELECT 10 AS grid_size FROM dual
),
-- 生成0到grid_size的连续坐标序列
coord_seq AS (
    SELECT LEVEL - 1 AS val
    FROM dual, params
    CONNECT BY LEVEL <= params.grid_size + 1
)
-- 生成全部水平线段
SELECT
    x.val AS startpoint_x,
    y.val AS startpoint_y,
    x.val + 1 AS endpoint_x,
    y.val AS endpoint_y
FROM coord_seq x, coord_seq y, params p
WHERE x.val < p.grid_size
UNION ALL
-- 生成全部垂直线段
SELECT
    x.val AS startpoint_x,
    y.val AS startpoint_y,
    x.val AS endpoint_x,
    y.val + 1 AS endpoint_y
FROM coord_seq x, coord_seq y, params p
WHERE y.val < p.grid_size
-- 排序规则可按需调整,当前排序和样例输出顺序一致
ORDER BY startpoint_y DESC, endpoint_y, startpoint_x;

使用说明

  • 需生成100*100单元格网格时,仅需将params里的grid_size值改为100,即可生成总计20200条线段
  • 生成的坐标可直接拼接为Oracle Spatial的SDO_GEOMETRY对象,用于空间测试

内容的提问来源于stack exchange,提问作者User1974

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 20:54:25