Search code examples
sqloracle-databaseoverlaporacle-spatial

Oracle Spatial Area Overlap Percentage


I am working with 2 tables containing polygons as shown hereunder. I have many parkingzones and two special areas contained in the dangerareas table. Some of the parking zones overlap with these areas, my purpose is two know the extent of this overlap as an area overlap percentage per parking. I want a null results for the not overlaping parkings. I am working with SQL Oracle Developper. I can't figure out why this query is not working. (I have adapted the layer names as I can't use the real ones, I hope there is no typo left). My query returns an error :

ORA-13011: value is out of range ORA-06512: at "MDSYS.SDO_GEOM", line 125 ORA-06512: at "MDSYS.SDO_GEOM", line 1878 13011. 00000 - "value is out of range"

db = CITY
Table 1 : parkingzones PK
id_parking
SHAPE

Table 2 : dangerareas DA
id_area
SHAPE

SELECT 
 (area_overlaps/area_zones*100) as pct_overlap

FROM  
(SELECT(SDO_GEOM.SDO_AREA 
     (SDO_GEOM.SDO_INTERSECTION(PK.SHAPE,DA.SHAPE,0,05)0,05)) area_overlaps
  FROM CITY.parkingzones PK
       CITY.dangerareas DA),
 (SELECT (SDO_GEOM.SDO_AREA(PK.SHAPES,0.05)) area_zones ) 
  FROM CITY.parkingzones PK);

Solution

  • Total parking area:

    select sum(SDO_GEOM.SDO_AREA(PK.SHAPES,0.05)) total_parking_area
      FROM CITY.parkingzones PK
    

    Total overlapping area:

    SELECT sum(SDO_GEOM.SDO_AREA( 
                 SDO_GEOM.SDO_INTERSECTION(PK.SHAPE,DA.SHAPE,0.05),0.05))) total_overlap
      FROM CITY.parkingzones PK
           ,CITY.dangerareas DA
    where sdo_anyinteract(PK.shape,DA.shape) = 'TRUE';
    

    Overlap per parking (only that have overlap)

    select (sdo_geom.sdo_area(sdo_geom.sdo_intersection(pk.shape, da.shape, 0.05), 0.05) /
           sdo_geom.sdo_area(pk.shape, 0.05)) * 100 percentage
      from city.parkingzones pk
          ,city.dangerareas  da
     where sdo_anyinteract(pk.shape, da.shape) = 'TRUE';