LRS Geometry into a JGeometry Object

Hello,
How can I put an LRS Geometry for example:
SDO_GEOMETRY(3302, 262148, NULL,
MDSYS.SDO_ELEM_INFO_ARRAY(1,2,1),
MDSYS.SDO_ORDINATE_ARRAY(5,10,0, 20,5,NULL, 35,10,NULL, 55,10,100))
into a JGeometry object??
I tried the following:
JGeometry lo_geo = null;
int li_gtype = 3302;
int li_srid = 262148;
int[] la_elementInfo = { 1,2,1 };
double[] la_ordinates = { 5,10, 0,20,5,null,35,10,null,55,10,100 };
lo_geo = new JGeometry( li_gtype, li_srid, la_elementInfo, la_ordinates );
First of all I cannot compile the code because of course
the types are incompatible. What else can I do that the JGeometry object recognizes NULL in that position?
Thank you for your help

Hi
You will have to do the following:
SDO_LRS.GET_MEASURE( SDO_LRS.PROJECT_PT(....
see the example in the user manaual: http://download.oracle.com/docs/html/B14255_01/sdo_lrs_ref.htm#sthref1933
This will get you the measure of the project point (even it is on the line) on the line and pass that into to split procedure.
Luc

Similar Messages

  • Convert from ordinary geometry to LRS geometry

    Hi
    I have converted line geometry to LRS geometry by using the block as given below. I also created metadata for X,Y,M before converting to LRS.
    BEGIN
    IF (SDO_LRS.CONVERT_TO_LRS_LAYER('centerline', 'GEOMETRY') = 'TRUE')
    THEN
    DBMS_OUTPUT.PUT_LINE('Conversion from STD_LAYER to LRS_LAYER succeeded.');
    ELSE
    DBMS_OUTPUT.PUT_LINE('Conversion from STD_LAYER to LRS_LAYER failed.');
    END IF;
    END;
    The conversion is succesful but there are two problems after conversiion:
    (1) SDO_GTYPE, it is 4402 instead of 3302
    (2) The measures are zero
    SQL> select a.geometry.sdo_gtype from centerline a;
    GEOMETRY.SDO_GTYPE
    4002
    4002
    4002
    4002
    SQL> select a.geometry.sdo_ordinates from centerline a;
    GEOMETRY.SDO_ORDINATES
    SDO_ORDINATE_ARRAY(-118.43115, 33.949104, 0, 0)
    SDO_ORDINATE_ARRAY(-118.41902, 33.93364, 0, 0)
    SDO_ORDINATE_ARRAY(-118.41934, 33.935822, 0, 0)
    SDO_ORDINATE_ARRAY(-118.43423, 33.946848, 0, 0)
    Can you help me to convert sdo_gtype to 3302 and how to update measures based on geometry length ??
    Thanks
    Syed Masood

    Hi Syed
    You have not given all details to completely check what you have done or how your source data looks like.
    This feedback is based on the elements you have given.
    The resulting LRS has gtype 4402, this means your input geometry had gtype 3002.
    At the same time, as your resulting LRS geom has only 4 ordinates, means that your input geometry had only 3 ordinates.
    This means that your input geometry was a 3D point.
    The result is an LRS point, with a measure 0 at the start point (itself).
    For 3D geometries there are LRS_3D functions dealing with 3D, however they do not cope with geodetic (latlon) type of geometries, I believe.
    http://docs.oracle.com/cd/B28359_01/appdev.111/b28400/sdo_lrs_concepts.htm#i890852
    What you can do is turn your 3D input geometries into 2D before converting them to LRS geometries, as this seems what your after (with the question to have gtypes 3302), obvisouly you will loose your z info.
    select SDO_LRS.CONVERT_TO_LRS_GEOM(sdo_cs.make_2d(SDO_GEOMETRY(3002, 4326, NULL,
    SDO_ELEM_INFO_ARRAY(1,2,1),SDO_ORDINATE_ARRAY(-118.43115, 33.949104, 0)))) from dual;
    But you will have to check the input as being line strings first.
    Please check this first, if you need more help, post one of your input geometries to start with.
    I hope this helps. (should you feel the same, please mark the post as helpful or as correct answer)
    Luc

  • How to bridge (fill) gaps when converting a 2006 geometry  into a 2002 geometry

    Is it at all possible to bridge (fill) gaps when converting a 2006 geometry into a single 2002 geometry. I have a solution for the conversion from 2006 to 2002 provided by BHall but upon further investigation investigation of my dataset some of the multi line polygons have gaps which I need to fill and I am not sure how to go about this.
    Here is a simple example of what I am trying to achieve
    Before
    SELECT (sdo_geometry(2006, 81989, NULL,
                    mdsys.sdo_elem_info_array(1,2,1,5,2,1,9,2,1,13,2,1),
                    mdsys.sdo_ordinate_array(16,0.999,16.998,-0.001,17.253,-0.001,18.003,0.999,18.003,0.999,19.001,0.999,19.001,0.999,19.999,-0.001)))
      FROM dual
    After
    SELECT (sdo_geometry(2006, 81989,NULL,
                   mdsys.sdo_elem_info_array(1,2,1),
                   mdsys.sdo_ordinate_array(16,0.999,17.253,-0.001,18.003,0.999,19.001,0.999,19.999,-0.001))) FROM dual    
    Thanks in advance

    Okay Roché,
    You might need to break this problem down into smaller parts for the forum.  All your examples show the gap being replaced by a single vertice - e.g. you want to "snap" the gap together.  I'd suggest this is just complicating your question.  Once the gap is filled (with a line) then you can run SDO_UTIL.REMOVE_DUPLICATE_VERTICES afterwards to remove the new line if its below your tolerance.  I think that Bryan's code wrapped in remove duplicate vertices will solve your second scenario.  But overall I think it would be helpful to focus just on the filling and leave the snapping for a follow-up question.
    So back to scenario #1, below is some code I wrote a while back that might do what you want or at least get you started.     Note that the input must be a multistring and the multistring cannot be "spaghetti".  In other words each line in the multistring must be disjoint or at most touch other lines only at endpoints. The goal is to sift through the lines and create a single linestring using the smallest gaps.  It's not subtle and will indeed produce bad geometries if the inputs are setup in an impossible manner.  There are also some rare geodetic bugs with SDO_GEOM.RELATE that crop up.  So you'll note I test both distance and relate in some places.  That's intentional though kind of dumb.
    Hopefully this helps.  If you improve the code please shoot a copy back to me.
    Cheers,
    Paul   
    CREATE OR REPLACE PACKAGE dz_gap_fill
    AUTHID CURRENT_USER
    AS
       FUNCTION linear_gap_filler(
           p_input            IN  MDSYS.SDO_GEOMETRY
          ,p_tolerance        IN  NUMBER DEFAULT 0.05
       ) RETURN MDSYS.SDO_GEOMETRY;
    END dz_gap_fill;
    CREATE OR REPLACE PACKAGE BODY dz_gap_fill
    AS
       FUNCTION fast_point(
           p_x             IN  NUMBER
          ,p_y             IN  NUMBER
          ,p_z             IN  NUMBER DEFAULT NULL
          ,p_m             IN  NUMBER DEFAULT NULL
          ,p_srid          IN  NUMBER DEFAULT 8265
       ) RETURN MDSYS.SDO_GEOMETRY
       AS
       BEGIN
          -- Step 10
          -- Check over incoming parameters
          IF p_x IS NULL
          OR p_y IS NULL
          THEN
             RAISE_APPLICATION_ERROR(-20001,'x and y cannot be NULL');
          END IF;
          -- Step 20
          -- Do the simplest solution first
          IF  p_z IS NULL
          AND p_m IS NULL
          THEN
             RETURN SDO_GEOMETRY(
                 2001
                ,p_srid
                ,SDO_POINT_TYPE(
                     p_x
                    ,p_y
                    ,NULL
                ,NULL
                ,NULL
          END IF;
          -- Step 30
          -- Do the other wilder choices
          IF p_z IS NULL
          AND p_m IS NOT NULL
          THEN
             RETURN SDO_GEOMETRY(
                 3301
                ,p_srid
                ,SDO_POINT_TYPE(
                     p_x
                    ,p_y
                    ,p_m
                ,NULL
                ,NULL
          ELSIF p_z IS NOT NULL
          AND   p_m IS NULL
          THEN
             RETURN SDO_GEOMETRY(
                 3001
                ,p_srid
                ,SDO_POINT_TYPE(
                     p_x
                    ,p_y
                    ,p_z
                ,NULL
                ,NULL
          ELSIF p_z IS NOT NULL
          AND   p_m IS NOT NULL
          THEN
             RETURN SDO_GEOMETRY(
                 4401
                ,p_srid
                ,NULL
                ,SDO_ELEM_INFO_ARRAY(1,1,1)
                ,SDO_ORDINATE_ARRAY(p_x,p_y,p_z,p_m)
          ELSE
             RAISE_APPLICATION_ERROR(-20001,'ERR!');
          END IF;
       END fast_point;
       FUNCTION get_start_point(
          p_input        IN  MDSYS.SDO_GEOMETRY
       ) RETURN MDSYS.SDO_GEOMETRY
       AS
          int_dims PLS_INTEGER;
          int_gtyp PLS_INTEGER;
          int_lrs  PLS_INTEGER;
       BEGIN
          -- Step 10
          -- Check over incoming parameters
          IF p_input IS NULL
          THEN
             RETURN NULL;
          END IF;
          -- Step 20
          -- Gather information about the geometry
          int_dims := p_input.get_dims();
          int_gtyp := p_input.get_gtype();
          int_lrs  := p_input.get_lrs_dim();
          -- Step 30
          -- Handle point and multipoint inputs
          IF int_gtyp = 1
          THEN
             RETURN p_input;
          ELSIF int_gtyp = 5
          THEN
             RETURN SDO_UTIL.EXTRACT(p_input,1);
          END IF;
          -- Step 40
          -- Return results
          IF int_dims = 2
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(1)
                ,p_input.SDO_ORDINATES(2)
                ,NULL
                ,NULL
                ,p_input.SDO_SRID
          ELSIF  int_dims = 3
          AND int_lrs = 3
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(1)
                ,p_input.SDO_ORDINATES(2)
                ,NULL
                ,p_input.SDO_ORDINATES(3)
                ,p_input.SDO_SRID
          ELSIF  int_dims = 3
          AND int_lrs = 0
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(1)
                ,p_input.SDO_ORDINATES(2)
                ,p_input.SDO_ORDINATES(3)
                ,NULL
                ,p_input.SDO_SRID
          ELSIF  int_dims = 4
          AND int_lrs IN (4,0)
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(1)
                ,p_input.SDO_ORDINATES(2)
                ,p_input.SDO_ORDINATES(3)
                ,p_input.SDO_ORDINATES(4)
                ,p_input.SDO_SRID
          ELSIF  int_dims = 4
          AND int_lrs = 3
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(1)
                ,p_input.SDO_ORDINATES(2)
                ,p_input.SDO_ORDINATES(4)
                ,p_input.SDO_ORDINATES(3)
                ,p_input.SDO_SRID
          ELSE
             RAISE_APPLICATION_ERROR(-20001,'ERR!');
          END IF;
       END get_start_point;
       FUNCTION get_end_point(
          p_input        IN  MDSYS.SDO_GEOMETRY
       ) RETURN MDSYS.SDO_GEOMETRY
       AS
          int_dims PLS_INTEGER;
          int_gtyp PLS_INTEGER;
          int_lrs  PLS_INTEGER;
          int_len  PLS_INTEGER;
       BEGIN
          -- Step 10
          -- Check over incoming parameters
          IF p_input IS NULL
          THEN
             RETURN NULL;
          END IF;
          -- Step 20
          -- Gather information about the geometry
          int_dims := p_input.get_dims();
          int_gtyp := p_input.get_gtype();
          int_lrs  := p_input.get_lrs_dim();
          int_len  := p_input.SDO_ORDINATES.COUNT();
          -- Step 30
          -- Handle point and multipoint inputs
          IF int_gtyp = 1
          THEN
             RETURN p_input;
          ELSIF int_gtyp = 5
          THEN
             RETURN SDO_UTIL.EXTRACT(
                 p_input
                ,SDO_UTIL.GETNUMELEM(p_input)
          END IF;
          -- Step 40
          -- Return results
          IF int_dims = 2
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(int_len - 1)
                ,p_input.SDO_ORDINATES(int_len)
                ,NULL
                ,NULL
                ,p_input.SDO_SRID
          ELSIF  int_dims = 3
          AND int_lrs = 3
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(int_len - 2)
                ,p_input.SDO_ORDINATES(int_len - 1)
                ,NULL
                ,p_input.SDO_ORDINATES(int_len)
                ,p_input.SDO_SRID
          ELSIF  int_dims = 3
          AND int_lrs = 0
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(int_len - 2)
                ,p_input.SDO_ORDINATES(int_len - 1)
                ,p_input.SDO_ORDINATES(int_len)
                ,NULL
                ,p_input.SDO_SRID
          ELSIF  int_dims = 4
          AND int_lrs IN (4,0)
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(int_len - 3)
                ,p_input.SDO_ORDINATES(int_len - 2)
                ,p_input.SDO_ORDINATES(int_len - 1)
                ,p_input.SDO_ORDINATES(int_len)
                ,p_input.SDO_SRID
          ELSIF  int_dims = 4
          AND int_lrs = 3
          THEN
             RETURN fast_point(
                 p_input.SDO_ORDINATES(int_len - 3)
                ,p_input.SDO_ORDINATES(int_len - 2)
                ,p_input.SDO_ORDINATES(int_len)
                ,p_input.SDO_ORDINATES(int_len - 1)
                ,p_input.SDO_SRID
          ELSE
             RAISE_APPLICATION_ERROR(-20001,'ERR!');
          END IF;
       END get_end_point;
       FUNCTION is_spaghetti(
           p_input             IN  MDSYS.SDO_GEOMETRY
          ,p_tolerance         IN  NUMBER DEFAULT 0.05
       ) RETURN VARCHAR2
       AS
          num_tolerance    NUMBER := p_tolerance;
          ary_strings      MDSYS.SDO_GEOMETRY_ARRAY := MDSYS.SDO_GEOMETRY_ARRAY();
          ary_starts       MDSYS.SDO_GEOMETRY_ARRAY := MDSYS.SDO_GEOMETRY_ARRAY();
          ary_ends         MDSYS.SDO_GEOMETRY_ARRAY := MDSYS.SDO_GEOMETRY_ARRAY();
          int_count        PLS_INTEGER;
          ary_start_count  MDSYS.SDO_NUMBER_ARRAY := MDSYS.SDO_NUMBER_ARRAY();
          ary_end_count    MDSYS.SDO_NUMBER_ARRAY := MDSYS.SDO_NUMBER_ARRAY();
          ary_inside_count MDSYS.SDO_NUMBER_ARRAY := MDSYS.SDO_NUMBER_ARRAY();
       BEGIN
          -- Step 10
          -- Check over incoming parameters
          IF p_input IS NULL
          THEN
             RETURN NULL;
          ELSIF p_input.get_gtype = 2
          THEN
             RETURN 'FALSE';
          ELSIF p_input.get_gtype <> 6
          THEN
             RAISE_APPLICATION_ERROR(-20001,'input gtype must be 2 or 6');
          END IF;
          IF num_tolerance IS NULL
          THEN
             num_tolerance := 0.05;
          END IF;
          -- Step 20
          -- Break multistring into single linestrings with nodes
          int_count := SDO_UTIL.GETNUMELEM(p_input);
          ary_strings.EXTEND(int_count);
          ary_starts.EXTEND(int_count);
          ary_ends.EXTEND(int_count);
          ary_start_count.EXTEND(int_count);
          ary_end_count.EXTEND(int_count);
          ary_inside_count.EXTEND(int_count);
          FOR i IN 1 .. int_count
          LOOP
             ary_strings(i) := SDO_UTIL.EXTRACT(p_input,i);
             ary_starts(i)  := get_start_point(ary_strings(i));
             ary_ends(i)    := get_end_point(ary_strings(i));
          END LOOP;
          -- Step 30
          -- Loop through and count the nodes connections
          FOR i IN 1 .. int_count
          LOOP
             ary_start_count(i)  := 0;
             ary_end_count(i)    := 0;
             ary_inside_count(i) := 0;
             FOR j IN 1 .. int_count
             LOOP
                IF i != j
                THEN
                   IF SDO_GEOM.RELATE(
                      ary_starts(i),
                      'DETERMINE',
                      ary_strings(j),
                      num_tolerance
                   ) IN ('TOUCH','CONTAINS','COVERS','ON')
                   THEN
                      ary_start_count(i) := ary_start_count(i) + 1;
                   ELSIF SDO_GEOM.RELATE(
                      ary_ends(i),
                      'DETERMINE',
                      ary_strings(j),
                      num_tolerance
                   ) IN ('TOUCH','CONTAINS','COVERS','ON')
                   THEN
                      ary_end_count(i) := ary_end_count(i) + 1;
                   ELSIF SDO_GEOM.RELATE(
                      ary_strings(i),
                      'DETERMINE',
                      ary_strings(j),
                      num_tolerance
                   ) IN ('TOUCH','CONTAINS','COVERS','OVERLAPBYINTERSECT')
                   THEN
                      ary_inside_count(i) := ary_inside_count(i) + 1;
                   END IF;
                END IF;
             END LOOP;
             IF ary_start_count(i) > 1
             OR ary_end_count(i) > 1
             OR ary_inside_count(i) > 0
             THEN
                RETURN 'TRUE';
             END IF;
          END LOOP;
          RETURN 'FALSE';
       END is_spaghetti;
       FUNCTION points2segment(
           p_point_one              IN  MDSYS.SDO_POINT_TYPE
          ,p_point_two              IN  MDSYS.SDO_POINT_TYPE
          ,p_srid                   IN  NUMBER
       ) RETURN MDSYS.SDO_GEOMETRY
       AS
       BEGIN
          IF ( p_point_one.Z IS NULL AND p_point_two.Z IS NOT NULL )
          OR ( p_point_one.Z IS NOT NULL AND p_point_two.Z IS NULL )
          THEN
             RAISE_APPLICATION_ERROR(
                -20001,
                'both points must have the same number of dimensions, point_one Z is ' ||
                NVL(TO_CHAR(p_point_one.Z),'') ||
                ' and point_two Z is ' ||
                NVL(TO_CHAR(p_point_two.Z),'')
          END IF;
          IF p_point_one.Z IS NULL
          THEN
             RETURN SDO_GEOMETRY(
                 2002
                ,p_srid
                ,NULL
                ,SDO_ELEM_INFO_ARRAY(1,2,1)
                ,SDO_ORDINATE_ARRAY(p_point_one.X,p_point_one.Y,p_point_two.X,p_point_two.Y)
          ELSE
             RETURN SDO_GEOMETRY(
                 3002
                ,p_srid
                ,NULL
                ,SDO_ELEM_INFO_ARRAY(1,2,1)
                ,SDO_ORDINATE_ARRAY(p_point_one.X,p_point_one.Y,p_point_one.Z,p_point_two.X,p_point_two.Y,p_point_two.Z)
          END IF;
       END points2segment;
       FUNCTION points2segment(
           p_point_one              IN  MDSYS.SDO_GEOMETRY
          ,p_point_two              IN  MDSYS.SDO_GEOMETRY
       ) RETURN MDSYS.SDO_GEOMETRY
       AS
          int_gtype1 PLS_INTEGER;
          int_dims1  PLS_INTEGER;
          int_gtype2 PLS_INTEGER;
          int_dims2  PLS_INTEGER;
          point_one  MDSYS.SDO_POINT_TYPE;
          point_two  MDSYS.SDO_POINT_TYPE;
       BEGIN
          int_gtype1 := p_point_one.get_gtype();
          int_dims1  := p_point_one.get_dims();
          int_gtype2 := p_point_two.get_gtype();
          int_dims2  := p_point_two.get_dims();
          IF  int_gtype1 = 1
          AND int_gtype2 = 1
          AND int_dims1  = int_dims2
          AND p_point_one.SDO_SRID = p_point_two.SDO_SRID
          THEN
             NULL;  -- Good
          ELSE
             RAISE_APPLICATION_ERROR(
                 -20001
                ,'both point objects must be points and have the same number of dimensions and SRIDs'
          END IF;
          IF int_dims1 = 4
          THEN
             RETURN SDO_GEOMETRY(
                 4402
                ,p_point_one.SDO_SRID
                ,NULL
                ,SDO_ELEM_INFO_ARRAY(1,2,1)
                ,SDO_ORDINATE_ARRAY(
                     p_point_one.SDO_ORDINATES(1)
                    ,p_point_one.SDO_ORDINATES(2)
                    ,p_point_one.SDO_ORDINATES(3)
                    ,p_point_one.SDO_ORDINATES(4)
                    ,p_point_two.SDO_ORDINATES(1)
                    ,p_point_two.SDO_ORDINATES(2)
                    ,p_point_two.SDO_ORDINATES(3)
                    ,p_point_two.SDO_ORDINATES(4)
          ELSE
             -- Use the sdo_point_type method for the rest
             IF p_point_one.SDO_POINT IS NOT NULL
             THEN
                point_one := p_point_one.SDO_POINT;
             ELSE
                IF int_dims1 = 3
                THEN
                   point_one := SDO_POINT_TYPE(
                       p_point_one.SDO_ORDINATES(1)
                      ,p_point_one.SDO_ORDINATES(2)
                      ,p_point_one.SDO_ORDINATES(3)
                ELSE
                   point_one := SDO_POINT_TYPE(
                       p_point_one.SDO_ORDINATES(1)
                      ,p_point_one.SDO_ORDINATES(2)
                      ,NULL
                END IF;
             END IF;
             IF p_point_two.SDO_POINT IS NOT NULL
             THEN
                point_two := p_point_two.SDO_POINT;
             ELSE
                IF int_dims1 = 3
                THEN
                   point_two := SDO_POINT_TYPE(
                        p_point_two.SDO_ORDINATES(1)
                       ,p_point_two.SDO_ORDINATES(2)
                       ,p_point_two.SDO_ORDINATES(3)
                ELSE
                   point_two := SDO_POINT_TYPE(
                       p_point_two.SDO_ORDINATES(1)
                      ,p_point_two.SDO_ORDINATES(2)
                      ,NULL
                END IF;
             END IF;
             RETURN points2segment(
                 p_point_one   => point_one
                ,p_point_two   => point_two
                ,p_srid        => p_point_one.SDO_SRID
          END IF;
       END points2segment;
       FUNCTION linear_gap_filler(
           p_input            IN  MDSYS.SDO_GEOMETRY
          ,p_tolerance        IN  NUMBER DEFAULT 0.05
       ) RETURN MDSYS.SDO_GEOMETRY
       AS
          sdo_input     MDSYS.SDO_GEOMETRY := p_input;
          num_tolerance NUMBER;
          int_counter   PLS_INTEGER;
          ary_edges     MDSYS.SDO_GEOMETRY_ARRAY;
          ary_starts    MDSYS.SDO_GEOMETRY_ARRAY;
          ary_ends      MDSYS.SDO_GEOMETRY_ARRAY;
          ary_nearest   MDSYS.SDO_NUMBER_ARRAY;
          ary_distance  MDSYS.SDO_NUMBER_ARRAY;
          num_temp      NUMBER;
          num_nearest   NUMBER;
          int_winner    PLS_INTEGER;
          int_winner2   PLS_INTEGER;
          sdo_point1    MDSYS.SDO_GEOMETRY;
          sdo_point2    MDSYS.SDO_GEOMETRY;
          boo_done      BOOLEAN;
          num_one       NUMBER;
          num_two       NUMBER;
          int_looper    PLS_INTEGER := 1;
       BEGIN
          -- Step 10
          -- Check over incoming parameters
          IF num_tolerance IS NULL
          THEN
             num_tolerance := 0.05;
          END IF;
          IF sdo_input IS NULL
          OR sdo_input.get_gtype() <> 6
          THEN
             RETURN sdo_input;
          END IF;
          IF is_spaghetti(sdo_input,p_tolerance) = 'TRUE'
          THEN
             RETURN sdo_input;
          END IF;
          <>      ary_edges     := MDSYS.SDO_GEOMETRY_ARRAY();
          ary_starts    := MDSYS.SDO_GEOMETRY_ARRAY();
          ary_ends      := MDSYS.SDO_GEOMETRY_ARRAY();
          ary_nearest   := MDSYS.SDO_NUMBER_ARRAY();
          ary_distance  := MDSYS.SDO_NUMBER_ARRAY();
          -- Step 20
          -- Break multistring into edges and start and end nodes
          int_counter := SDO_UTIL.GETNUMELEM(sdo_input);     
          ary_edges.EXTEND(int_counter);
          ary_starts.EXTEND(int_counter);
          ary_ends.EXTEND(int_counter);
          FOR i IN 1 .. int_counter
          LOOP 
             ary_edges(i)  := SDO_UTIL.EXTRACT(sdo_input,i);
             ary_starts(i) := get_start_point(ary_edges(i));
             ary_ends(i)   := get_end_point(ary_edges(i));
          END LOOP;
          -- Step 30
          -- Determine the closest endpoints
          ary_nearest.EXTEND(int_counter);
          ary_distance.EXTEND(int_counter);
          FOR i IN 1 .. int_counter
          LOOP
             num_nearest := NULL;
             int_winner := NULL;
             FOR j IN 1 .. int_counter
             LOOP
                IF j != i
                THEN
                   num_temp := SDO_GEOM.SDO_DISTANCE(
                       ary_edges(i)
                      ,ary_edges(j)
                      ,num_tolerance
                   IF num_nearest IS NULL
                   OR num_temp < num_nearest
                   THEN
                      num_nearest := num_temp;
                      int_winner := j;
                   END IF;
                END IF;
             END LOOP;
             ary_nearest(i) := int_winner;
             ary_distance(i) := num_nearest;
          END LOOP;
          -- Step 40
          -- Find the smallest gap
          int_winner := NULL;
          num_nearest := NULL;
          FOR i IN 1 .. int_counter
          LOOP
             IF num_nearest IS NULL
             OR ary_distance(i) < num_nearest
             THEN
                 int_winner := i;
                 num_nearest := ary_distance(i);
                 int_winner2 := ary_nearest(i);
             END IF;
          END LOOP;
          -- Step 50
          -- Determine the endpoints to connect
          num_one := SDO_GEOM.SDO_DISTANCE(
             get_start_point(ary_edges(int_winner)),
             ary_edges(int_winner2),
             num_tolerance
          num_two := SDO_GEOM.SDO_DISTANCE(
             get_end_point(ary_edges(int_winner)),
             ary_edges(int_winner2),
             num_tolerance
          IF ( num_one = 0 AND SDO_GEOM.RELATE(
             get_start_point(ary_edges(int_winner)),
             'ANYINTERACT',
             ary_edges(int_winner2),
             num_tolerance
          ) = 'TRUE' )
          OR ( num_two = 0 AND SDO_GEOM.RELATE(
             get_end_point(ary_edges(int_winner)),
             'ANYINTERACT',
             ary_edges(int_winner2),
             num_tolerance
          ) = 'TRUE' )
          THEN
             sdo_point1 := NULL;
          ELSIF num_one < num_two
          THEN
             sdo_point1 := get_start_point(ary_edges(int_winner));
          ELSE
             sdo_point1 := get_end_point(ary_edges(int_winner));
          END IF;
          num_one := SDO_GEOM.SDO_DISTANCE(
             get_start_point(ary_edges(int_winner2)),
             ary_edges(int_winner),
             num_tolerance
          num_two := SDO_GEOM.SDO_DISTANCE(
             get_end_point(ary_edges(int_winner2)),
             ary_edges(int_winner),
             num_tolerance
          IF ( num_one = 0 AND SDO_GEOM.RELATE(
             get_start_point(ary_edges(int_winner2)),
             'ANYINTERACT',
             ary_edges(int_winner),
             num_tolerance
          ) = 'TRUE' )
          OR ( num_two = 0 AND SDO_GEOM.RELATE(
             get_end_point(ary_edges(int_winner2)),
             'ANYINTERACT',
             ary_edges(int_winner),
             num_tolerance
          ) = 'TRUE' )
          THEN
             sdo_point2 := NULL;
          ELSIF num_one < num_two
          THEN
             sdo_point2 := get_start_point(ary_edges(int_winner2));
          ELSE
             sdo_point2 := get_end_point(ary_edges(int_winner2));
          END IF;
          -- Step 50
          -- Smash together
          IF sdo_point1 IS NULL
          OR sdo_point2 IS NULL
          THEN
             sdo_input := SDO_UTIL.CONCAT_LINES(
                ary_edges(int_winner),
                ary_edges(int_winner2)
          ELSE
             sdo_input := SDO_UTIL.CONCAT_LINES(
                SDO_UTIL.CONCAT_LINES(
                   ary_edges(int_winner),
                   points2segment(sdo_point1,sdo_point2)
                ary_edges(int_winner2)
          END IF;
          boo_done := TRUE;
          FOR i IN 1 .. int_counter
          LOOP
             IF i NOT IN (int_winner,int_winner2)
             THEN
                sdo_input := SDO_UTIL.APPEND(sdo_input,ary_edges(i));
                boo_done := FALSE;
             END IF;
          END LOOP;
          -- Step 60
          -- Check if valid if returning
          IF sdo_input.get_gtype() = 2
          OR boo_done = TRUE
          THEN
             RETURN sdo_input;
          END IF;
          int_looper := int_looper + 1;
          GOTO TOP_OF_IT;
       END linear_gap_filler;
    END dz_gap_fill;

  • How do I know when a file loaded into a Sound object is invalid?

    I'm writing an app that allows the user to play various sound files.
    Some of these files are mp3, but some may also be ogg, wma, etc.  The selection is out of my control, so I need the sound API to tell me if it can't play something.
    To test, I loaded some test files into a sound object like so:
                    var urlRequest:URLRequest = new URLRequest("http://support.microsoft.com/support/MediaPlayer/wmptest/samples/new/mediaexample.wma");
                    var sound:Sound = new Sound();
                    var soundChannel:SoundChannel = sound.play();
    Even though Flex doesn't play wma's there is no error information or null objects anywhere.  Everthings seems to be fine to flex, I can even register for progress events and see the wma being loaded.
    Just to see how far this goes, I loaded a gif instead of an audio file and the same thing happened.  Progress went fine with no errors of any kind even though I registered for every listed event.  As expected though, no sound played from the gif file.
    What is the recommended way for checking if a file is not playable?

    I'm looking more for an "is it playable" value (since it might be an FLA or FLV as well).
    Even a meaningful length value would work (for some reason duration is set to a value even when loading a gif file - not sure what it means for a GIF to have a length of 96 milliseconds).
    For now I'll have to filter on extension as you mentioned.

  • Placing a variable value into an XML Object

    I am trying to figure out how I would get the value of a variable into an XML Object.
    I have the variable
    var dragonName:String = "Samuel";
    var listing:XML = new XML();
    listing = <thedragon>
                            <dragon>
                                  <myname> dragonName.valueOf()</myname>
                             </dragon>
                   </thedragon>
    However, the dragon name does not show up when I go trace(listing);
    How do I do it and should I have imported something as well or what?

    yeah - in fact you can do all sort of things. This is extremely useful when you creating an XML dynamically e.g.
    var names:Array = ["Sammy", "Samuel", "Sancho"];
    var xml:XML =     <dragon>
                         <myname>{Math.floor(Math.random()*names.length) < 2 ? names[1] : names[Math.round(Math.PI) - 1]}</myname>
                      </dragon>;
    or you can even run a function:
    var xml:XML =     <dragon>
                         <myname>{dragonName()}</myname>
                      </dragon>;
    private function dragonName():String {
       return "Samuel";

  • Why can't I open the filter gallery in Photoshop CC 2014? I've converted the photo layer into a smart object, but the filter gallery selection is still grayed out.

    Why can't I open the filter gallery in Photoshop CC 2014? I've converted the photo layer into a smart object, but the filter gallery selection is still grayed out. How do I make it active?

    Please go to Help, System Info and Copy then paste here.
    Benjamin

  • Convert multiple layers into separate smart objects

    I have multiple layers in a document that I want to make into separate smart objects.
    If I select them and choose "convert to smart object" in the Layers Panel fly out, it flattens the layers into 1 smart object.
    Can it be done, or do I need to make each layer a smart object one at a time.
    OR... let me back up
    I have several files in Bridge, I want to "load into Photoshop layers" using the TOOLS > Batch Command BUT have each file load as a smart object.
    Either way would be great!

    While these don't use the batch command, take a look at
    from within photoshop, File>Scripts>Load Files into Stack.
    For bridge try Dr. Browns Services:
    http://www.russellbrown.com/scripts.html
    If you have cs5, you can drag files from mini bridge into an existing
    photoshop document, for smart object layers, provided you have
    your preferences under general to place or drag raster images as smart objects.
    MTSTUNER

  • Formatting a date that is inserted into a text object

    The on-line documentation for inserting a date into a form letter instructs a user to insert a Print Date into a text object.  To format the date, the user is instructed to double-click on the date object and then right click and select Format {Print Date} from the menu.
    This works when using Crystal Reports 2008 without any service packs.
    However, after installing SP1, this feature no longer works.  The Format {Print Date} is grayed out and not available for selection.
    I am using VISTA Enterprise.
    Are there any reasonable reasons why this functionality was removed with SP1.

    You have a brilliant work around.  Thanks!
    However, it is still a work around.
    I hope someone within the Crystal Reports organization sees this post and either provides an explaination as to why SP1 does not allow you to directly edit a field or that someone realizes that this is a bug and starts the process of providing a fix.
    By the way, I duplicated the problem on both VISTA and XP machines.

  • Placing images into a multistate object

    Hey folks,
    Trying to figure out what's going on here. Thanks to some helpful folks here, I'm making inroads with JS programming, but I'm still hitting some bumps in the road.
    I've got a handful of graphics that I'm importing, and now I want to to turn them into a multistate object. Here's what I'm doing:
    var tabletSlideshow = app.activeDocument;
    tabletSlideshow.viewPreferences.horizontalMeasurementUnits = MeasurementUnits.PIXELS;
    tabletSlideshow.viewPreferences.verticalMeasurementUnits = MeasurementUnits.PIXELS;
    var slideshowImages = File.openDialog("Choose the images you want incuded", "Files:*.jpg", true);
    if((slideshowImages != "")&&(slideshowImages != null)){
    for (i=0; i<slideshowImages.length; i++)
    tabletSlideshow.pages.item(0).place(slideshowImages[i]);
    //get items for slideshow
    mySlideshow = tabletSlideshow.pageItems;
    app.select(mySlideshow);
    //this is where I get my errors
    tabletSlideshow.pages.item(0).pageItems(mySlideshow).multiStateObjects.add();
    //I've also tried this
    var myState = tabletSlideshow.pages.item(0).pageItem(mySlideshow).multiStateObjects.add();
    I know it's something silly, I just can't put my finger in it. I've managed to do:
    var myState = tabletSlideshow.pages.item(0).multiStateObjects.add();
    for (j=2; j<slideshowImages.length; j++)
    myState.states.add([j]);
    Which creates a new object state with the same number of states as graphics, but I'm not too sure of how to place the graphics inside each state.
    I know I'm making this way more complicated than it should be, and that's the problem. Any help would be much appreciated! Thanks in advance!
    N

    I don't have any experience with multistate objects, but:
    for (i=0; i<slideshowImages.length; i++)
    tabletSlideshow.pages.item(0).place(slideshowImages[i]);
    //get items for slideshow
    mySlideshow = tabletSlideshow.pageItems;
    app.select(mySlideshow);
    You should indent your loops!
    You should not be accessing your page item via the document's .pageItems array. The place() method will return an array of objects that are placed, so you should set a variable equal to its return value and use that.
    Also:
    myState.states.add([j]);
    That's just wrong! j is a number from 2 to {something}, so [j] is an Array containing one element, the number j. That cannot be what you want to pass to State.add(), which takes an object full of properties to add.
    Anyhow, back to your problem:
    //this is where I get my errors
    tabletSlideshow.pages.item(0).pageItems(mySlideshow).multiStateObjects.add();
    Why would this work? a PageItem does not have a multiStateObjects property. And it wouldn't make sense for it to do so -- a MultiStateObject is not contained within a PageItem! It is a type of PageItem. (Though it appears to be contained within some pageitems, like Rectangle, but let's not worry about that).
    So, if you want to add a new MultiStateObject, you'll have to add it to a page or a spread or something. Such as with
    var myMSO = tabletSlideShow.pages[0].multiStateObjects.add();
    Then you probably want to call the addItemsAsState() method on your MSO, with the placed item as the parameter.

  • To Join two SAP fields into one info object

    Hi All,
    Can you please suggest the best method to concatenate values from two R/3 fields into one info object master data table?
    The requirement is to create a Sales report where I need to report on sales against  sales type.
    Sales type is a list of joint values of item category ( 0ITEM_CATEG) and bill type (0BILL_TYPE).
    So, I need a list of all item categories and billing types in a single object and report sales value against it.
    Please suggest.
    Thanks,
    Sharmishtha

    Hi Venkat,
    In DSO any case you will not be having more than 16 Keys. I am surprised seeing requirement of more than 16 keys, but anyways you need to go with some workaround.
    You can concatenate multiple Fields and map to one Dummy InfoObject which will be Key in DSO so in actual you have more than 16 Keys but have 16 Keys in system.
    But analyze requirement in detail because this will increase data redundancy and time for load will get increased.
    Also for new issues start new discussion otherwise people will not able to help you in this forum.
    Regards,
    Ganesh

  • Best way to transfer a List Object into a view object?

    Hi Guys and Gals,
    I'm working with some 3rd party code. This code queries a 3rd party database and returns the data into a List like so:
            PlatformSessionContext context = webutils.getPlatformContext(accesstoken,accessstokensecret,realmID,dataSource);
         QBCustomerService customerService = customerService = QBServiceFactory.getService(context, QBCustomerService.class);
         List<QBCustomer> customers = customerService.findAll(context, 1, 100);What is then the best way to populate a view object with that list? I would think I would need to do a couple of things ...
    1) Map the QBCustomer's fields/getters to my ViewObject attributes somehow ...
    2) Iterate through the List and sync the QBCustomer field values to the VO rows/attributes.
    Am I on the right track? What do you think is the best way to accomplish this? I've come across populating a VO via XML here (How do I implement an HTTP Get which returns XML into a View Object? ). Should I look for this QBCustomer.class's query and XML?
    This is all a little over my head. Any help would be appreciated. Using JDev 11.1.2.2.0.
    Thanks,
    Will

    Hi,
    bets is to do it similar as in https://blogs.oracle.com/smuenchadf/resource/examples#134
    In this sample, a list of selected keys is passed to a custom method exposed on the ViewObject. In your case you need to make sure the QBCustomer class is known by the ADF BC project. Then from the custom method, you create new rows in the VO and populate the attributes with values from the QBCustomer object. The method can be dragged from the data control palette (as a parameter form) or manually create in the PageDef (method binding). The latter case requires you to reference an object holding the list of QBCustomer
    Frank

  • How can I turn this line and its intersection into a separate object?

    My initial object is #1, then I draw a line on #2.
    How can I turn the highlighted area into a separate object? (I cheated and filled this area with Photoshop, but I'd like to know how to turn this red area into a separate object so that I can fill it with Illustrator)
    Thanks in advance

    Alex,
    Or you may just Pathfinder>Divide and Ungroup.

  • How can I convert a layer into a smart object with Adobe Photoshop Elements 10?

    How can I convert a layer into a smart object with Adobe Photoshop Elements 10?

    That feature is only in PS. Elements as you buy it has only limited support for smart objects. If you use File>Place to add something to your image it will come in as a smart object (within the limits to which PSE understands smart layers). However, if you know someone who can write an action for you in PS you can install it in PSE, or you could look into something like elements+ from simplephotoshop.com.

  • How to convert bytes[] into multipage File object

    Hi,
    How to convert bytes[] into multipage File object??
    I used the java.io.SequenceInputStream to concatenate two input streams (basically .pdf files) into a single input stream. I need to create a single multipage pdf file using this input stream.
    Thanks for you help in advance..

    Only text format allows you to concatenate two files together to get a longer files.
    Most formats have a header and a footer and so you cannot simply add one to the other.
    You need to use a PDF API which will allow you to build the new document (if one exists)

  • Large Database read into a List Object Memory Problem

    Hi,
    Im building a new database, ive just imported over 50,000 rows into the database across a number of tables from existing csv files.
    I want to extract these rows into a List object. Once extracted i want to process them in a specific way. However when i try to read in over 20,000 rows i get an error which indicates the buffer is full
    java.lang.OutOfMemoryError: Java heap space
            at java.nio.ByteBuffer.wrap(ByteBuffer.java:350)Im currently using the DAO design pattern to read in the values. Could anyone provide me with some advise how i might read in so many rows without running out of memory. The current process is not only failing but is also extreamly slow.
    Thanks in advance

    h1400046 wrote:
    Hi,
    Thanks for your reply,
    This database is fully normalised. Five tables, no relations between them at all.
    The DAO design pattern was chosen so that each table may be selected individually. DAO usually means objects to me. What you're describing sounds more like Table Gateway.
    This means that i get the values from each table in turn. (there isnt a single query). No possibility to JOIN? None whatsoever?
    Five tables must be read for each select. Ouch.
    Therefore i am selecting 5 times for each of the 50,000 rows and some of the rows will bring back more than one record for each table. So it's one object that has references to five others.
    This OO object is tread back into a List object. Once i have this i want to then process this list as a whole. However this obejct gets to big and just kills the memoryYes, that's been clear all along.
    I have been told that jdbc supports a cursor type mechanism which enables you to read from a result set in manageable chunks which can then be processed chunk by chunk without killing the memory. But i dont know how to do that or even if that is advisable.Yes, you can process chunk by chunk with JDBC. Check setFetchSize(), or manage the chunk size yourself.
    I currently have primary keys in each table. I have indexs on both the primary and forigen keysSo there are relationships. I'll ask again - why not JOIN?
    Can the database do any of the processing? What about calling a stored proc to create a cursor and iterate through the data on the server? Just bring the result over via JDBC.
    %

Maybe you are looking for

  • Cannot view raw images in iphoto 11

    Hi there, I have just upgraded to a new imac running Mountain Lion and iphoto 6. Now I can't view the latest raw images I have taken (on my canon eos 550D) - When I scroll through the images they appear for a second or so, then they disappear and are

  • Using Variables in Multiple slides

    I am using a text entry box to record information. I want the user to repeat that information in a future slide to get a match. I have created the action script for that. On the second slide however, I would like the user to be able to view what they

  • Error in main program assignment of enhancement

    Hi all, I have to create an enhancement in an include RFITEM_INC for tcode FBL1n & FBL3N. The objective is to populate data in a newly added field to the output of above transactions. For the purpose, enhancement is to be written in same form stateme

  • How to search for a bookmark (Mountain Lion on Mac)

    I have imported my large list of bookmarks from the browser that I used to use into Safari. Previously, I could go to 'manage bookmarks' and type in a word or two to find the relevant bookmark(s). I cannot find anything equivalent in Safari, and shou

  • SLD Model Version

    Hi,         The SLD Version of our Solman: J2EE Server: SAP J2EE Engine/7.02 PatchLevel 107037. SLD Version: 7.0206.20110328064954.0000 Build: 20110405 1026, Depot: //sdt/com.sap.lcr/NW702_06_REL, Changelist: 107893 Model Version (sld/active): 1.6.9