在oracle数据库中保存多边形

时间:2013-08-12 04:15:22

标签: sql oracle10g spatial oracle-spatial

我使用gps设备拍摄了四个点(坐标)。

第1点: - lat- 27.54798833 long- 80.16397166
第2点: - 纬度27.547766,长度80.16450166
第3点: - 纬度27.548131,长度80.164701
第4点: - ---

现在我想在oracle数据库中保存这些坐标,将其保存为多边形。

谢谢

3 个答案:

答案 0 :(得分:5)

如果您打算使用Oracle Spatial进行存储或处理多边形,则需要将数据存储为SDO_GEOMETRY对象。这是一个简单的例子:

CREATE TABLE my_polygons (
  id INTEGER
, polygon sdo_geometry
)
/

INSERT INTO my_polygons (
  id
, polygon
)
VALUES (
  1
, sdo_geometry (
    2003 -- 2D Polygon
  , 4326 -- WGS84, the typical GPS coordinate system
  , NULL -- sdo_point_type, should be NULL if sdo_ordinate_array specified
  , sdo_elem_info_array(
      1    -- First ordinate position within ordinate array
    , 1003 -- Exterior polygon
    , 1    -- All polygon points are specified in the ordinate array
    )
  , sdo_ordinate_array(
      80.16397166, 27.54798833,
    , 80.16450166, 27.547766,
    , 80.164701, 27.548131,
    , 80.16397166, 27.54798833
    )
  )
)
/

这里有关于对象类型的不同标志的更多信息:http://docs.oracle.com/cd/B19306_01/appdev.102/b14255/sdo_objrelschema.htm

需要注意的关键事项:

  1. 您的源坐标系是什么?你说GPS - 它是WGS84(Oracle SRID = 4326)?您的GPS设备会告诉您。您可以在表MDSYS.SDO_COORD_REF_SYS
  2. 中查找Oracle SRID
  3. 确保您的坐标完成一个完整的多边形(即环回到起点)。
  4. 多边形外部边界的坐标应按逆时针方向排序。
  5. 您可以在几何对象上调用方法st_isvalid()以快速测试它是否有效。在将几何图形呈现给任何其他软件之前,应确保几何图形有效。

答案 1 :(得分:0)

为存储多边形细节(PolygonId)的多边形创建一个表。

现在创建另一个表Coordinates,并为上面的PolygonID存储创建点locatins 如。

 Polygoind Id     Longitude          Latitude

如果您的多边形具有n个数字或坐标,那么您也可以存储它。并且可以从坐标表中轻松获取详细信息。

答案 2 :(得分:0)

对Ben的好答案略微纠正......

Oracle Spatial(与几乎所有其他几何编码系统一样)以X,Y顺序存储坐标,这意味着大地(纬度/经度)坐标必须存储为long,lat - 而不是lat,long。

所以只需将答案改为:

,sdo_ordinate_array(       80.16397166,27.54798833     ,80.16450166,27.547766     ,80.164701,27.548131     ,80.16397166,27.54798833     )

对于纯粹主义者:EPSG坐标系4326(WGS84又名“GPS”坐标)实际上将坐标的排序指定为纬度/经度,但我知道没有使用除长/纬之外的任何其他任何实现。