如何更新或插入MDSYS.SDO_GEOMETRY多个多边形

时间:2017-08-15 08:36:49

标签: sql oracle spatial oracle-spatial

我有一张表NEW_TABLE IDORA_GEOMETRY

其中id = 1然后

ORA_GEOMETRY = MDSYS.SDO_GEOMETRY(2003, 32638, null, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 1), MDSYS.SDO_ORDINATE_ARRAY(462897.8239, 4551252.4903, 462869.6794, 4551237.1391, 462821.0656, 4551321.5734, 462770.4983, 4551381.3337, 462764.7756, 4551388.0969, 462754.1560, 4551377.4776, 462741.7481, 4551365.07, 462741.7481, 4551363.7611, 462741.7474, 4551329.2490, 462764.7750, 4551290.8697, 462808.2715, 4551232.0215, 462821.0646, 4551201.3181, 462803.1544, 4551183.4076, 462757.10, 4551173.1735, 462747.3533, 4551152.4610, 462764.0828, 4551144.0964, 462767.3352, 4551142.4702, 462780.1283, 4551122.0012, 462785.2455, 4551093.8564, 462785.2455, 4551032.4494, 462790.3627, 4550930.1047, 462823.6248, 4550861.0220, 462850.7758, 4550815.7704, 462849.2111, 4550881.4909, 462826.1833, 4551001.7460, 462826.1833, 4551065.7114, 462826.1833, 4551132.2357, 462844.0938, 4551145.0287, 462854.3284, 4551083.6219, 462867.1215, 4550983.8357, 462879.9146, 4550863.5805, 462885.0318, 4550812.4081, 462882.4728, 4550727.9744, 462869.6799, 4550633.3048, 462844.0937, 4550513.0495, 462795.4799, 4550446.5256, 462770.4995, 4550405.3075, 462775.6698, 4550405.3077, 462795.8360, 4550409.5531, 462802.7176, 4550412.9935, 462812.8183, 4550418.0442, 462829.8008, 4550425.4738, 462842.5375, 4550429.7193, 462853.1510, 4550429.7193, 462864.8268, 4550426.5353, 462879.6863, 4550415.9213, 462886.6694, 4550410.2476, 462946.4704, 4550462.0752, 462920.8524, 4550490.0220, 462915.7352, 4550538.6358, 462925.9698, 4550561.6634, 462959.2317, 4550561.6634, 462983.6238, 4550561.6634, 462972.0247, 4550648.6564, 462954.1144, 4550707.5047, 462931.0868, 4550776.5875, 462918.2937, 
4550845.6702, 462897.8247, 4550978.7186, 462897.8247, 4551068.2701, 462897.8247, 4551175.7321, 462897.8239, 4551252.4903)) 

并绘制一个多边形

其中id = 2然后

ORA_GEOMETRY = MDSYS.SDO_GEOMETRY(2003, 32638, null, MDSYS.SDO_ELEM_INFO_ARRAY(1, 1003, 1), MDSYS.SDO_ORDINATE_ARRAY(511185.4848, 4522136.2067, 511182.8401, 4522157.3649, 511174.9057, 4522175.8784, 511153.7474, 
4522183.8128, 511145.8131, 4522204.9710, 511151.1026, 4522228.7741, 511156.3922, 4522265.8010, 511161.6818, 4522318.6967, 511160.8519, 4522347.7646, 511140.5235, 4522337.2102, 511118.7925, 4522328.3526, 
511098.2070, 4522310.7624, 511089.6745, 4522286.2932, 511086.4391, 4522234.5278, 511084.9831, 4522191.7471, 511079.9685, 4522163.3504, 511057.3211, 4522130.9970, 511037.9091, 4522127.7617, 511005.5557, 4522134.2324, 
510957.0257, 4522143.9384, 510934.2304, 4522157.3649, 510898.7896, 4522166.5858, 510859.9656, 4522173.0564, 510831.0838, 4522162.6545, 510799.3465, 4522181.1680, 510772.8986, 4522178.5232, 510759.6747, 4522162.6545, 
510743.8060, 4522152.0754, 510725.2925, 4522152.0754, 510709.4238, 4522146.7858, 510690.9103, 4522146.7858, 510704.0644, 4522097.1338, 510691.7281, 4522059.8196, 510675.0416, 4522011.9018, 510643.3042, 4521966.9405, 
510630.0803, 4521943.1374, 510619.5012, 4521911.4001, 510659.1729, 4521935.2031, 510693.5551000010, 4521956.3614, 510735.8716, 4521969.5853, 510786.1225, 4521982.8092, 510839.0182, 4522003.9675, 510899.8482, 4522030.4153, 
510958.0335, 4522046.2840, 511002.9948, 4522046.2840, 511066.4696, 4522046.2840, 511106.1413, 4522059.5079, 511143.1683, 4522085.9558, 511185.4848, 4522136.2067)) 

这一轮将绘制一个多边形。

我想将这两行合并为一条,所以如果我看一下,我会显示两个多边形id = 3

2 个答案:

答案 0 :(得分:0)

您可以将两个多边形存储到一个多边形sdo_geometry对象中。

这是2007年的类型。

elem_info_array定义哪些纵坐标构成单个多边形。一个多边形由从位置1开始的纵坐标组成,另一个从位置123开始。因此mdsys.sdo_elem_info_array(1, 1003, 1, 123, 1003, 1)

另见文件。

http://docs.oracle.com/database/122/SPATL/spatial-datatypes-metadata.htm#SPATL492

最后,我添加了一个验证,看看这实际上是否会导致有效的几何体。

希望这能回答你的问题。

declare
   l_geometry mdsys.sdo_geometry;

begin

   l_geometry := mdsys.sdo_geometry(2007
                                   ,32638
                                   ,null
                                   ,mdsys.sdo_elem_info_array(1, 1003, 1, 123, 1003, 1)
                                   ,mdsys.sdo_ordinate_array(462897.8239
                                                            ,4551252.4903
                                                            ,462869.6794
                                                            ,4551237.1391
                                                            ,462821.0656
                                                            ,4551321.5734
                                                            ,462770.4983
                                                            ,4551381.3337
                                                            ,462764.7756
                                                            ,4551388.0969
                                                            ,462754.1560
                                                            ,4551377.4776
                                                            ,462741.7481
                                                            ,4551365.07
                                                            ,462741.7481
                                                            ,4551363.7611
                                                            ,462741.7474
                                                            ,4551329.2490
                                                            ,462764.7750
                                                            ,4551290.8697
                                                            ,462808.2715
                                                            ,4551232.0215
                                                            ,462821.0646
                                                            ,4551201.3181
                                                            ,462803.1544
                                                            ,4551183.4076
                                                            ,462757.10
                                                            ,4551173.1735
                                                            ,462747.3533
                                                            ,4551152.4610
                                                            ,462764.0828
                                                            ,4551144.0964
                                                            ,462767.3352
                                                            ,4551142.4702
                                                            ,462780.1283
                                                            ,4551122.0012
                                                            ,462785.2455
                                                            ,4551093.8564
                                                            ,462785.2455
                                                            ,4551032.4494
                                                            ,462790.3627
                                                            ,4550930.1047
                                                            ,462823.6248
                                                            ,4550861.0220
                                                            ,462850.7758
                                                            ,4550815.7704
                                                            ,462849.2111
                                                            ,4550881.4909
                                                            ,462826.1833
                                                            ,4551001.7460
                                                            ,462826.1833
                                                            ,4551065.7114
                                                            ,462826.1833
                                                            ,4551132.2357
                                                            ,462844.0938
                                                            ,4551145.0287
                                                            ,462854.3284
                                                            ,4551083.6219
                                                            ,462867.1215
                                                            ,4550983.8357
                                                            ,462879.9146
                                                            ,4550863.5805
                                                            ,462885.0318
                                                            ,4550812.4081
                                                            ,462882.4728
                                                            ,4550727.9744
                                                            ,462869.6799
                                                            ,4550633.3048
                                                            ,462844.0937
                                                            ,4550513.0495
                                                            ,462795.4799
                                                            ,4550446.5256
                                                            ,462770.4995
                                                            ,4550405.3075
                                                            ,462775.6698
                                                            ,4550405.3077
                                                            ,462795.8360
                                                            ,4550409.5531
                                                            ,462802.7176
                                                            ,4550412.9935
                                                            ,462812.8183
                                                            ,4550418.0442
                                                            ,462829.8008
                                                            ,4550425.4738
                                                            ,462842.5375
                                                            ,4550429.7193
                                                            ,462853.1510
                                                            ,4550429.7193
                                                            ,462864.8268
                                                            ,4550426.5353
                                                            ,462879.6863
                                                            ,4550415.9213
                                                            ,462886.6694
                                                            ,4550410.2476
                                                            ,462946.4704
                                                            ,4550462.0752
                                                            ,462920.8524
                                                            ,4550490.0220
                                                            ,462915.7352
                                                            ,4550538.6358
                                                            ,462925.9698
                                                            ,4550561.6634
                                                            ,462959.2317
                                                            ,4550561.6634
                                                            ,462983.6238
                                                            ,4550561.6634
                                                            ,462972.0247
                                                            ,4550648.6564
                                                            ,462954.1144
                                                            ,4550707.5047
                                                            ,462931.0868
                                                            ,4550776.5875
                                                            ,462918.2937
                                                            ,4550845.6702
                                                            ,462897.8247
                                                            ,4550978.7186
                                                            ,462897.8247
                                                            ,4551068.2701
                                                            ,462897.8247
                                                            ,4551175.7321
                                                            ,462897.8239
                                                            ,4551252.4903
                                                            ,511185.4848
                                                            ,4522136.2067
                                                            ,511182.8401
                                                            ,4522157.3649
                                                            ,511174.9057
                                                            ,4522175.8784
                                                            ,511153.7474
                                                            ,4522183.8128
                                                            ,511145.8131
                                                            ,4522204.9710
                                                            ,511151.1026
                                                            ,4522228.7741
                                                            ,511156.3922
                                                            ,4522265.8010
                                                            ,511161.6818
                                                            ,4522318.6967
                                                            ,511160.8519
                                                            ,4522347.7646
                                                            ,511140.5235
                                                            ,4522337.2102
                                                            ,511118.7925
                                                            ,4522328.3526
                                                            ,511098.2070
                                                            ,4522310.7624
                                                            ,511089.6745
                                                            ,4522286.2932
                                                            ,511086.4391
                                                            ,4522234.5278
                                                            ,511084.9831
                                                            ,4522191.7471
                                                            ,511079.9685
                                                            ,4522163.3504
                                                            ,511057.3211
                                                            ,4522130.9970
                                                            ,511037.9091
                                                            ,4522127.7617
                                                            ,511005.5557
                                                            ,4522134.2324
                                                            ,510957.0257
                                                            ,4522143.9384
                                                            ,510934.2304
                                                            ,4522157.3649
                                                            ,510898.7896
                                                            ,4522166.5858
                                                            ,510859.9656
                                                            ,4522173.0564
                                                            ,510831.0838
                                                            ,4522162.6545
                                                            ,510799.3465
                                                            ,4522181.1680
                                                            ,510772.8986
                                                            ,4522178.5232
                                                            ,510759.6747
                                                            ,4522162.6545
                                                            ,510743.8060
                                                            ,4522152.0754
                                                            ,510725.2925
                                                            ,4522152.0754
                                                            ,510709.4238
                                                            ,4522146.7858
                                                            ,510690.9103
                                                            ,4522146.7858
                                                            ,510704.0644
                                                            ,4522097.1338
                                                            ,510691.7281
                                                            ,4522059.8196
                                                            ,510675.0416
                                                            ,4522011.9018
                                                            ,510643.3042
                                                            ,4521966.9405
                                                            ,510630.0803
                                                            ,4521943.1374
                                                            ,510619.5012
                                                            ,4521911.4001
                                                            ,510659.1729
                                                            ,4521935.2031
                                                            ,510693.5551000010
                                                            ,4521956.3614
                                                            ,510735.8716
                                                            ,4521969.5853
                                                            ,510786.1225
                                                            ,4521982.8092
                                                            ,510839.0182
                                                            ,4522003.9675
                                                            ,510899.8482
                                                            ,4522030.4153
                                                            ,510958.0335
                                                            ,4522046.2840
                                                            ,511002.9948
                                                            ,4522046.2840
                                                            ,511066.4696
                                                            ,4522046.2840
                                                            ,511106.1413
                                                            ,4522059.5079
                                                            ,511143.1683
                                                            ,4522085.9558
                                                            ,511185.4848
                                                            ,4522136.2067));

   dbms_output.put_line(sdo_geom.validate_geometry_with_context(l_geometry, 0.00005));

end;

答案 1 :(得分:0)

假设您的表格如下:

create table new_table (
  id number,
  ora_geometry sdo_geometry
);

并像这样填充

insert into new_table (id,ora_geometry)
values (
  1,
  SDO_GEOMETRY(2003, 32638, null, 
    SDO_ELEM_INFO_ARRAY(1, 1003, 1), 
    SDO_ORDINATE_ARRAY(
      462897.8239, 4551252.4903, 462869.6794, 4551237.1391, 462821.0656, 4551321.5734, 462770.4983, 4551381.3337, 462764.7756, 4551388.0969, 462754.1560, 4551377.4776, 462741.7481, 4551365.07, 462741.7481, 4551363.7611, 462741.7474, 4551329.2490, 462764.7750, 4551290.8697, 462808.2715, 4551232.0215, 462821.0646, 4551201.3181, 462803.1544, 4551183.4076, 462757.10, 4551173.1735, 462747.3533, 4551152.4610, 462764.0828, 4551144.0964, 462767.3352, 4551142.4702, 462780.1283, 4551122.0012, 462785.2455, 4551093.8564, 462785.2455, 4551032.4494, 462790.3627, 4550930.1047, 462823.6248, 4550861.0220, 462850.7758, 4550815.7704, 462849.2111, 4550881.4909, 
      462826.1833, 4551001.7460, 462826.1833, 4551065.7114, 462826.1833, 4551132.2357, 462844.0938, 4551145.0287, 462854.3284, 4551083.6219, 462867.1215, 4550983.8357, 462879.9146, 4550863.5805, 462885.0318, 4550812.4081, 462882.4728, 4550727.9744, 462869.6799, 4550633.3048, 462844.0937, 4550513.0495, 462795.4799, 4550446.5256, 462770.4995, 4550405.3075, 462775.6698, 4550405.3077, 462795.8360, 4550409.5531, 462802.7176, 4550412.9935, 462812.8183, 4550418.0442, 462829.8008, 4550425.4738, 462842.5375, 4550429.7193, 462853.1510, 4550429.7193, 462864.8268, 4550426.5353, 462879.6863, 4550415.9213, 462886.6694, 4550410.2476, 462946.4704, 4550462.0752, 462920.8524, 4550490.0220, 462915.7352, 4550538.6358, 462925.9698, 4550561.6634, 462959.2317, 4550561.6634, 462983.6238, 4550561.6634, 462972.0247, 4550648.6564, 462954.1144, 4550707.5047, 462931.0868, 4550776.5875, 462918.2937, 4550845.6702, 462897.8247, 4550978.7186, 462897.8247, 4551068.2701, 462897.8247, 4551175.7321, 462897.8239, 4551252.4903
    )
  ) 
);

insert into new_table (id,ora_geometry)
values (
  2,
  SDO_GEOMETRY(
    2003, 32638, null, 
    SDO_ELEM_INFO_ARRAY(1, 1003, 1), 
    SDO_ORDINATE_ARRAY(
      511185.4848, 4522136.2067, 511182.8401, 4522157.3649, 511174.9057, 4522175.8784, 511153.7474, 4522183.8128, 511145.8131, 4522204.9710, 511151.1026, 4522228.7741, 511156.3922, 4522265.8010, 511161.6818, 4522318.6967, 
      511160.8519, 4522347.7646, 511140.5235, 4522337.2102, 511118.7925, 4522328.3526, 511098.2070, 4522310.7624, 511089.6745, 4522286.2932, 511086.4391, 4522234.5278, 511084.9831, 4522191.7471, 511079.9685, 4522163.3504, 
      511057.3211, 4522130.9970, 511037.9091, 4522127.7617, 511005.5557, 4522134.2324, 510957.0257, 4522143.9384, 510934.2304, 4522157.3649, 510898.7896, 4522166.5858, 510859.9656, 4522173.0564, 510831.0838, 4522162.6545, 
      510799.3465, 4522181.1680, 510772.8986, 4522178.5232, 510759.6747, 4522162.6545, 510743.8060, 4522152.0754, 510725.2925, 4522152.0754, 510709.4238, 4522146.7858, 510690.9103, 4522146.7858, 510704.0644, 4522097.1338, 
      510691.7281, 4522059.8196, 510675.0416, 4522011.9018, 510643.3042, 4521966.9405, 510630.0803, 4521943.1374, 510619.5012, 4521911.4001, 510659.1729, 4521935.2031, 510693.5551000010, 4521956.3614, 510735.8716, 4521969.5853, 
      510786.1225, 4521982.8092, 510839.0182, 4522003.9675, 510899.8482, 4522030.4153, 510958.0335, 4522046.2840, 511002.9948, 4522046.2840, 511066.4696, 4522046.2840, 511106.1413, 4522059.5079, 511143.1683, 4522085.9558, 511185.4848, 4522136.2067
    )
  )
);
commit;

要插入一个前两个联合的新多边形,请执行以下操作:

insert into new_table (id, ora_geometry)
select 3, sdo_aggr_union (sdoaggrtype(ora_geometry, 0.0005))
from new_table 
where id in (1,2);
commit;

请注意,这不一定与第一个答案中的手动联合产生相同的结果:

SDO_GEOMETRY(
  2007, 32638, NULL, 
  SDO_ELEM_INFO_ARRAY(1, 1003, 1, 99, 1003, 1), 
  SDO_ORDINATE_ARRAY(
    511185.485, 4522136.21, 511182.84, 4522157.36, 511174.906, 4522175.88, 511153.747, 4522183.81, 511145.813, 4522204.97, 511151.103, 4522228.77, 511156.392, 4522265.8, 511161.682, 4522318.7, 511160.852, 4522347.76, 
    511140.524, 4522337.21, 511118.793, 4522328.35, 511098.207, 4522310.76, 511089.675, 4522286.29, 511086.439, 4522234.53, 511084.983, 4522191.75, 511079.969, 4522163.35, 511057.321, 4522131, 511037.909, 4522127.76, 
    511005.556, 4522134.23, 510957.026, 4522143.94, 510934.23, 4522157.36, 510898.79, 4522166.59, 510859.966, 4522173.06, 510831.084, 4522162.65, 510799.347, 4522181.17, 510772.899, 4522178.52, 510759.675, 4522162.65, 
    510743.806, 4522152.08, 510725.293, 4522152.08, 510709.424, 4522146.79, 510690.91, 4522146.79, 510704.064, 4522097.13, 510691.728, 4522059.82, 510675.042, 4522011.9, 510643.304, 4521966.94, 510630.08, 4521943.14, 
    510619.501, 4521911.4, 510659.173, 4521935.2, 510693.555, 4521956.36, 510735.872, 4521969.59, 510786.123, 4521982.81, 510839.018, 4522003.97, 510899.848, 4522030.42, 510958.034, 4522046.28, 511002.995, 4522046.28, 
    511066.47, 4522046.28, 511106.141, 4522059.51, 511143.168, 4522085.96, 511185.485, 4522136.21, 
    462897.824, 4551252.49, 462869.679, 4551237.14, 462821.066, 4551321.57, 462770.498,4551381.33, 462764.776, 4551388.1, 462754.156, 4551377.48, 462741.748, 4551365.07, 462741.748, 4551363.76, 462741.747, 4551329.25, 
    462764.775, 4551290.87, 462808.272, 4551232.02, 462821.065, 4551201.32, 462803.154, 4551183.41, 462757.1,4551173.17, 462747.353, 4551152.46, 462764.083, 4551144.1, 462767.335, 4551142.47, 462780.128, 4551122, 
    462785.246, 4551093.86, 462785.246, 4551032.45, 462790.363, 4550930.1, 462823.625, 4550861.02, 462850.776, 4550815.77, 462849.211, 4550881.49, 462826.183, 4551001.75, 462826.183, 4551065.71, 462826.183, 4551132.24, 
    462844.094, 4551145.03, 462854.328, 4551083.62, 462867.122, 4550983.84, 462879.915, 4550863.58, 462885.032, 4550812.41, 462882.473, 4550727.97, 462869.68,4550633.3, 462844.094, 4550513.05, 462795.48, 4550446.53, 
    462770.5, 4550405.31, 462775.67, 4550405.31, 462795.836, 4550409.55, 462802.718, 4550412.99, 462812.818, 4550418.04, 462829.801, 4550425.47, 462842.538, 4550429.72, 462853.151, 4550429.72, 462864.827, 4550426.54, 
    462879.686, 4550415.92, 462886.669, 4550410.25, 462946.47, 4550462.08, 462920.852, 4550490.02, 462915.735, 4550538.64, 462925.97, 4550561.66, 462959.232, 4550561.66, 462983.624, 4550561.66, 462972.025, 4550648.66, 
    462954.114, 4550707.5, 462931.087, 4550776.59, 462918.294, 4550845.67, 462897.825, 4550978.72, 462897.825, 4551068.27, 462897.825, 4551175.73, 462897.824, 4551252.49
  )
)

这是因为联合聚合没有定义它组装多边形的顺序。多边形中多边形的顺序并不重要。