Extrude 3D polygons in Oracle spatial
Dear Everyone,
I have two data sets of the city footprints imported in the Oracle Spatial already. One is a 2D polygon layer with only x and y, and the other is a 3D polygon layer with z values (the x and y are identical to the first one).
Now I am trying to extrude the 3D polygon to 3D composites based on the z value. I can successfully extrude the 2D polygons with specifying the ground heights (say sdo_ordinate_array(0)) and topheights (say, sdo_ordinate_array(20.0)).
However, how to extrude the 3D polygon taking each vertex's z value as the ground heights to an specified top heights is a problem for me. Since, I am very new to use PL/SQL, besides, I am not sure if it is possible to do this.
Here is the sample data extracted from the sample data:
select sample.geom.sdo_ordinates from sample2d_polygon sample
NUMBER(715202.739577727,733492.909091357,715206.759608945,733492.412077086,715208.666575034,733506.889047512,715204.72752625,733507.364066093,715202.739577727,733492.909091357)
select sample.geom.sdo_ordinates from sample3d_polygon sample
NUMBER(715202.739577727,733492.909091357,12.4890003204346,715206.759608945,733492.412077086,12.4890003204346,715208.666575034,733506.889047512,12.4540004730225,715204.72752625,733507.364066093,12.4320001602173,715202.739577727,733492.909091357,12.4890003204346)
Can anybody help me about this
select sdo_util.extrude(sample.geom, sdo_ordinate_array(), sdo_ordinate_array(20.0), 'true', 0.05) from sample2d_polygon sample, where the first sdo_ordinate_array is the array of corresponding vertex's z value?
Any suggestions is anticipated and highly appreciated.
Sincerely
Jun
Hi Jun,-
I hope the following code solves your problem.
Please also make sure your geometries are valid using sdo_geom.validate_geometry_with_context or
sdo_geom.validate_layer_with_context for 3D geometries.
Please let us know if you have questions.
Best
baris
drop table myGeoms;
drop table extruded_myGeoms;
create table myGeoms(i number, geom sdo_geometry);
insert into myGeoms(i, geom) values(1,
MDSYS.SDO_GEOMETRY(3003, null,null,
MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),
MDSYS.sdo_ordinate_array(
715202.739577727,733492.909091357,12.4890003204346,
715206.759608945,733492.412077086,12.4890003204346,
715208.666575034,733506.889047512,12.4540004730225,
715204.72752625, 733507.364066093,12.4320001602173,
715202.739577727,733492.909091357,12.4890003204346
insert into myGeoms(i, geom) values(2,
MDSYS.SDO_GEOMETRY(3003, null,null,
MDSYS.SDO_ELEM_INFO_ARRAY(1,1003,1),
MDSYS.sdo_ordinate_array(
715202.739577727,733492.909091357,14.4890003204346,
715206.759608945,733492.412077086,14.4890003204346,
715208.666575034,733506.889047512,14.4540004730225,
715204.72752625, 733507.364066093,14.4320001602173,
715202.739577727,733492.909091357,14.4890003204346
insert into myGeoms(i, geom) values(3,
mdsys.sdo_geometry(3003, null, null,
mdsys.sdo_elem_info_array(1,1003,1),
mdsys.sdo_ordinate_array(1,1,10, 0,1,10, 0,0,10, 1,0,10, 1,1,10))
create table extruded_myGeoms(id number, geom sdo_geometry);
-- This program assumes that each geometry in myGeoms table
-- has only 1 ring per polygon ie, 1003 etype element.
set serveroutput on;
declare
type cursor_type is REF CURSOR;
query_crs cursor_type ;
-- For each extruded geometry (result), this array has the ground heights
ords_bottom_z_array sdo_number_array := null;
-- For each extruded geometry (result), this array has the top heights which is set to 20 for each element.
-- Both arrays must have the same number of elements.
ords_top_z_array sdo_number_array := null;
ords2d mdsys.sdo_ordinate_array := null;
result sdo_geometry;
g1 sdo_geometry;
g2d sdo_geometry;
stmt varchar2(100);
id1 number;
cnt integer;
k integer;
l integer;
the_dim number;
gtype_2d number;
begin
stmt := ' select i, geom from myGeoms ';
OPEN query_crs FOR stmt;
LOOP
BEGIN
FETCH query_crs into id1, g1;
EXIT when query_crs%NOTFOUND ;
ords2d := mdsys.sdo_ordinate_array();
ords_bottom_z_array := SDO_NUMBER_ARRAY();
ords_top_z_array := SDO_NUMBER_ARRAY();
k:=ords_bottom_z_array.count;
l:=ords2d.count;
FOR cnt in 1..g1.sdo_ordinates.count LOOP
if (mod(cnt, 3) = 0) then
-- Get z values of polygon
ords_bottom_z_array.extend(1);
ords_top_z_array.extend(1);
k:=k+1;
ords_bottom_z_array(k) := g1.sdo_ordinates(cnt);
ords_top_z_array(k) := 20.0; -- Constant
else
-- To have 2D geometry for input to sdo_util.extrude
ords2d.extend(1);
l := l+1;
ords2d(l) := g1.sdo_ordinates(cnt);
end if;
end loop;
the_dim := floor(g1.sdo_gtype / 1000);
gtype_2d := (the_dim-1)*1000 + mod(g1.sdo_gtype, 10);
g2d:= sdo_geometry(gtype_2d, null, null,
mdsys.sdo_elem_info_array(1,1003,1),
ords2d);
result:= sdo_util.extrude(g2d, ords_bottom_z_array, ords_top_z_array, 'FALSE', 0.05);
-- insert the extruded geometry (result) into new table
insert into extruded_myGeoms(id, geom) values(id1, result);
dbms_output.put_line('id = '||id1);
END;
END LOOP;
end;
/
Similar Messages
-
How do I split or explode polygons in Oracle Spatial?
OK So SDO_AGGR_UNION is the function that merges lots of polygons into one multipart polygon. But is there a way to seperate a multipart polygon into its parts?
I have merged all the polygons that match an attribute, and this works well using SDO_AGGR_UNION. I now want to seperate into seperate geographic area. Splitting one multipart polygon into several single part polygon.
Any Ideas?
Thanks in advance
GlennHi,
SDO_UTIL.EXTRACT
SDO_UTIL.GETNUMELEM
details in spatial documentation
and You should read following article.
http://www.spatialdbadvisor.com/oracle_spatial_tips_tricks/87/how-to-extract-elements-from-the-result-of-an-sdo_intersection-of-two-polygons
Regards,
Tomek -
Extrude 3D polygons with multiple rings in Oracle spatial
In this thread Extrude 3D polygons in Oracle spatial Baris provided a sample script to extrude a polygon with one ring into a 3D solid.
How do I extrude a polygon with multiple rings?
Given this polygon
! http://public.johnnyotoole.fastmail.fm/Polygon_with_hole.jpg !
, I tried to create a solid as follows:
SQL> select * from v$version;
BANNER
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - Production
PL/SQL Release 11.1.0.7.0 - Production
CORE 11.1.0.7.0 Production
TNS for 32-bit Windows: Version 11.1.0.7.0 - Production
NLSRTL Version 11.1.0.7.0 - Production
5 rows selected.
SQL> DECLARE
2 l_base_geom SDO_GEOMETRY;
3 l_solid SDO_GEOMETRY;
4 BEGIN
5
6 l_base_geom :=
7 SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 21, 2003, 1),
8 SDO_ORDINATE_ARRAY(568758.064, 835364.907, 568735.12, 835362.873, 568735.897, 835354.404, 568737.264, 835334.554,
9 568738.711, 835317.612, 568758.063, 835319.294, 568790.598, 835322.124, 568787.473, 835358.924, 568786.671, 835367.888,
10 568758.064, 835364.907, 568758.063, 835354.97, 568758.811, 835355.046, 568759.253, 835349.107, 568764.952, 835349.529,
11 568764.51, 835355.468, 568778.388, 835356.625, 568778.627, 835353.883, 568778.681, 835353.252, 568778.757, 835352.388,
12 568780.648, 835330.63, 568758.063, 835328.714, 568747.322, 835327.804, 568744.841, 835353.627, 568758.063, 835354.97));
13
14 DBMS_OUTPUT.PUT_LINE('Valid? ' || SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(l_base_geom, 0.005));
15
16 l_solid :=
17 SDO_UTIL.EXTRUDE(
18 l_base_geom,
19 SDO_NUMBER_ARRAY(0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0),
20 SDO_NUMBER_ARRAY(5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5),
21 'FALSE',
22 0.005);
23
24 DBMS_OUTPUT.PUT_LINE('Volume: ' || sdo_geom.sdo_volume(l_solid,0.005));
25
26 END;
27 /
Valid? TRUE
DECLARE
ERROR at line 1:
ORA-29532: Java call terminated by uncaught Java exception: java.lang.ArrayIndexOutOfBoundsException
ORA-06512: at "MDSYS.SDO_UTIL", line 241
ORA-06512: at line 16Any ideas?Would you please have only 10 elements in your sdo_number_arrays in your case?Is this what you mean?
SQL> DECLARE
2 l_base_geom SDO_GEOMETRY;
3 l_solid SDO_GEOMETRY;
4 BEGIN
5
6 l_base_geom :=
7 SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 21, 2003, 1),
8 SDO_ORDINATE_ARRAY(568758.064, 835364.907, 568735.12, 835362.873, 568735.897, 835354.404, 568737.264, 835334.554,
9 568738.711, 835317.612, 568758.063, 835319.294, 568790.598, 835322.124, 568787.473, 835358.924, 568786.671, 835367.888,
10 568758.064, 835364.907, 568758.063, 835354.97, 568758.811, 835355.046, 568759.253, 835349.107, 568764.952, 835349.529,
11 568764.51, 835355.468, 568778.388, 835356.625, 568778.627, 835353.883, 568778.681, 835353.252, 568778.757, 835352.388,
12 568780.648, 835330.63, 568758.063, 835328.714, 568747.322, 835327.804, 568744.841, 835353.627, 568758.063, 835354.97));
13
14 DBMS_OUTPUT.PUT_LINE('Valid? ' || SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(l_base_geom, 0.005));
15
16 l_solid :=
17 SDO_UTIL.EXTRUDE(
18 l_base_geom,
19 SDO_NUMBER_ARRAY(0,0,0,0,0,0,0,0,0,0),
20 SDO_NUMBER_ARRAY(5,5,5,5,5,5,5,5,5,5),
21 'FALSE',
22 0.005);
23
24 DBMS_OUTPUT.PUT_LINE('Volume: ' || sdo_geom.sdo_volume(l_solid,0.005));
25
26 END;
27 /
Valid? TRUE
DECLARE
ERROR at line 1:
ORA-29532: Java call terminated by uncaught Java exception: java.lang.Exception: 54550
ORA-06512: at "MDSYS.SDO_UTIL", line 241
ORA-06512: at line 16
If the heights and ground heights are all the same in your sdo_number_arrays (as in this case), then you can just specify one number in each array instead of specifying a height/ground height for each vertex.Ok, I see what you mean. This works when I use just the outer ring.
SQL> DECLARE
2 l_base_geom SDO_GEOMETRY;
3 l_solid SDO_GEOMETRY;
4 BEGIN
5
6 l_base_geom :=
7 SDO_UTIL.EXTRACT(
8 SDO_GEOMETRY(2003, NULL, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1, 21, 2003, 1),
9 SDO_ORDINATE_ARRAY(568758.064, 835364.907, 568735.12, 835362.873, 568735.897, 835354.404, 568737.264, 835334.554,
10 568738.711, 835317.612, 568758.063, 835319.294, 568790.598, 835322.124, 568787.473, 835358.924, 568786.671, 835367.888,
11 568758.064, 835364.907, 568758.063, 835354.97, 568758.811, 835355.046, 568759.253, 835349.107, 568764.952, 835349.529,
12 568764.51, 835355.468, 568778.388, 835356.625, 568778.627, 835353.883, 568778.681, 835353.252, 568778.757, 835352.388,
13 568780.648, 835330.63, 568758.063, 835328.714, 568747.322, 835327.804, 568744.841, 835353.627, 568758.063, 835354.97)),
14 1,1);
15
16 DBMS_OUTPUT.PUT_LINE('Valid? ' || SDO_GEOM.VALIDATE_GEOMETRY_WITH_CONTEXT(l_base_geom, 0.005));
17
18 l_solid :=
19 SDO_UTIL.EXTRUDE(
20 l_base_geom,
21 SDO_NUMBER_ARRAY(0),
22 SDO_NUMBER_ARRAY(5),
23 'FALSE',
24 0.005);
25
26 DBMS_OUTPUT.PUT_LINE('Volume: ' || sdo_geom.sdo_volume(l_solid,0.005));
27
28 END;
29 /
Valid? TRUE
Volume: 11839.18887702For the purposes of what I'm doing now, I think I'll just use the outer ring to create my solids, but it would be useful if SDO_UTIL.EXTRUDE works on polygons with multiple rings (maybe it does, I'm probably doing something wrong...). -
Loading shapefiles into Oracle Spatial
Fellow Oracle Spatiallers!
Currently we edit Oracle Spatial data by checking data out into a shapefile,
making our changes off-line, and reloading the shapefile back into Oracle.
Instead of using the Oracle Spatial supplied tool, we decided to purchase
a utility called the "Spatial Loader" from a company called Geometry Pty Ltd
(http://www.geometryit.com). There are a number of reasons why we decided to
go that way which might become evident from the command line parameters of
this utility:
Usage: Shp2Spt [Arguments] [Options]
OR
Usage: Java com.geometryit.spatialloader.oracle.AdvancedJavaSpatialTranslator [Arguments] [Options]
[Arguments] must specify these values:
-o create
type of operation to perform
create creates a new table, must not exist already
recreate creates a new table, may exist already
init drops existing table, creates a new one
append appends data onto existing table
-f <shape_file>
the shape file or project to translate
-l <table,column>
target table and column for the geometry data
-D <database>
target database name
-u <username>
username for RDBMS
-p <password>
password for RDBMS
[Options] values are not necessarily required:
-s <server_name>
name of server with database
-port <port_number>
the port to connect to on the server
-ufi <column_name>
specify the name of the UFI field (unique ID)
-seq <sequence_name>
specify the sequence to use for the spatial data unique IDs
-a none
attributes mode
none no attributes will be transferred
all all attribtues will be transfered as found
file= file containing lines of the form:
<shape_attribute><space/tab><rdbms_column>
where
<shape_attribute> selects the column to be output
<rdbms_column> name of the column in RDBMS
-srid <id>
specify the Spatial Reference ID for the spatial data
(this must be set to use Spatial Reference Transformations)
-i [<level>] or -i rtree
create an index for the generated table
the <level> parameter is an optional integer
representing the depth of the quadtree created
if rtree is specified, the index created will be
an rtree
-c <commit_interval>
number of rows to commit after
-t <tolerance>
tolerance value for metadata
-r none
used to determine number of decimal places to round vertices to
if you use the tolerance-parameter option, specify the -t parameter before -r
-igc
ignore geometry collections
-sgc
split geometry collections
-sgd f
split geometry direction [forward | reverse]
-update-metadata <true/false>
update the Oracle Spatial Metadata table after loading data
-validate <true/false>
perform Oracle Spatial validation after loading data
-v
verbose mode on
-h or -?
display this help message
The main things I like about this tool are:
1. One step (no conversion to sqlloader form followed by a call to the sqlloader).
2. The ability to round the coordinates of the shapes in the shapefile by applying
the XY tolerance values held in the SDO_GEOM_METADATA table.
This is quite important because our editing package - due to double/single precision
issues - can actually move coordinates but those movements are sub the precision of
the actual data. By rounding to the nominate precision we can detect situations where
no actual change to the shape (and its attributes) was made and thus not create superfluous
revisions within the database.
3. It will correctly re-wind the coordinates of the outer/inner shells of polygons. This is
important as ESRI shapefiles are agnostic on the winding order: an outer shell coordinates
can be listed in either clockwise or anti-clockwise order.
4. You can specify the primary key (UFI) column (numeric) and an Oracle Sequence number such
that each new shape loaded can have its UFI assigned from that sequence.
Because of this flexibility, and the excellent support (it is a purchasable product) from the
developers, I can heartily recommend this loader to fellow Spatiallers. It is worth every
penny I spent on it. Try the free version on their website and if, like me, you like it,
purchase it!
regards
SimonHi Shuan,
As part of the zip file created for the next training course to be posted for Oracle Spatial on OTN (within the next few weeks) there is a free (unsupported, undocumented) version of a shape to sdo converter. This should work, but it is unsupported. It will create a layer that then needs to be migrated into 8.1.6 format.
If you need it quite soon send email to [email protected] and I can get it to you.
Hope this helps,
dan -
Help define the requirements for an Oracle Spatial management tool
Hi,
We are developing a tool that, we hope, will be indispensable for all Oracle Spatial and Locator dbas/users. We've released version 1.0, but we need your help to define the requirements for the next version.
What features would you like to have in a management tool for your spatial databases?
The features we've got so far:
1. Viewing of vector data in a map + attributes
2. Loading from shapefiles
3. Exporting to shapefiles
4. Validating metadata, indexes and spatial data.
We are adding editing of vectors in the next version - basic stuff for add, update and delete.
But there must be a lot more. What do you find difficult to do in Oracle Spatial/Locator? What would you like in a tool such as this?
Any feedback either to myself or the forum is much appreciated.
cheers,
Andrew
[email protected]
PS If you like to have a look at what we have done so far, go to http://www.geometryit.com/products/spatialConsole.phpAndrew knows what I have asked for but for others to think about and to start
the ball rolling, here's what they are:
1. Ability to enter own SQL commands but with PARAMETERS for attributes
and shapes as in the following examples:
SELECT ...
FROM my_spatial_table a
WHERE a.ATTRIBUTE = :attr
AND MDSYS.SDO_RELATE(a.shape,:polygon,'mask=anyinteract') = 'TRUE'
When executed the attribute value is asked for via a input box (data type?)
and the user is asked to define the SDO_GEOMETRY for the :polgygon parameter via mouse clicks on the screen.
Similarly, this would work for INSERT, UPDATE and DELETE...
INSERT INTO my_spatial_table (shape) values(:polygon)
The data type of an attribute parameter could be determined in two ways:
a) By querying the Oracle catalog;
b) By using a "PARAMETERS" command before the query as follows
PARAMETERS name type [(size)] [, name type [(size)] ...]
The PARAMETERS declaration has these parts:
name The name of the parameter.
type The type of the parameter.
size The size of the parameter in characters or bytes.
2. When executing an SQL SELECT statement I would like the tool
to suggest the HINTS that are needed to improve performance.
3. Following on from 2, I would like to Tick an option that would return the
EXPLAIN PLAN that the query optimizer used when executing my query.
4. The tool has to support ALL Oracle's spatial vector data types.
5. It would be nice to be able to work with GeoRasters. Since Spatial Console
imports/exports shapefiles why not the same for rasters. However, the problem
with supporting foreign data formats is WHERE DO YOU STOP!!!!!
6. You could allow for the styling of the Spatial Console to be stored in the MapViewer catalogs or use the MapViewer catalogs when styling an Sdo_Geometry if it exists (I note that your tool extracts the SDO_METADATA
why not the MapViewer metadata as well)?
regards
S. -
Oracle spatial 11g - 3D-Geometry and KML-Export
Hi,
I'm currently working with an Oracle Spatial 11g - database and there with 2d- and 3d-geometries. With this Version you can extrude 2d's to 3d's and calculate their volumes. This works fine.
The problem is to save the extruded areas as 3d-geometries in a specific table. Enclosed you will find the SQL-Code of the current workflow:
*1. Create tables for the 2d- and 3d-geometries (incl. metadata and spatial index)*
-- table for 3d-geometry
CREATE
TABLE ta_geb(
geom MDSYS.SDO_GEOMETRY
,area NUMBER(12,3)
-- metadata 2D
INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID)
VALUES
'ta_geb',
'geom',
MDSYS.SDO_DIM_ARRAY
(MDSYS.SDO_DIM_ELEMENT('X',4439900.00, 4440020.00, 0.005),
MDSYS.SDO_DIM_ELEMENT('Y', 5664050.00, 5664130.00, 0.005)
31468
-- spatial index 2D
CREATE
INDEX ta_geb_index ON ta_geb(geom) INDEXTYPE IS MDSYS.SPATIAL_INDEX;
-- table for 3d-geometry
CREATE
TABLE ta_3dgeb(
geom3d MDSYS.SDO_GEOMETRY
-- metadata 3D
INSERT INTO USER_SDO_GEOM_METADATA (TABLE_NAME, COLUMN_NAME, DIMINFO, SRID)
VALUES
'ta_3dgeb',
'geom3d',
MDSYS.SDO_DIM_ARRAY
( MDSYS.SDO_DIM_ELEMENT('X',4439900.00, 4440020.00, 0.005),
MDSYS.SDO_DIM_ELEMENT('Y', 5664050.00, 5664130.00, 0.005),
MDSYS.SDO_DIM_ELEMENT('Z', 0, 200, 0.005)
31468
-- spatial index
CREATE
INDEX ta_3dgeb_index ON ta_3dgeb(geom3d) INDEXTYPE IS MDSYS.SPATIAL_INDEX PARAMETERS ('SDO_INDX_DIMS=3');
*2. insert 2d-geomtry*
INSERT
INTO
ta_geb
VALUES
MDSYS.SDO_GEOMETRY(
2003
,31468
,NULL
,MDSYS.SDO_ELEM_INFO_ARRAY(
1
,1003
,1
,MDSYS.SDO_ORDINATE_ARRAY(
4439975.91,5664077.07,
4439967.98,5664072.06,
4439975.33,5664060.42,
4439983.26,5664065.43,
4439975.91,5664077.07
,null --area
*3. calculate volume of the extruded area*
SELECT SDO_GEOM.SDO_VOLUME(SDO_UTIL.EXTRUDE(
GEOM,
SDO_NUMBER_ARRAY(0),
SDO_NUMBER_ARRAY(10),
'false', --validation
0.005),0.005)
from ta_geb;
This works fine so far. Now I wanna insert the extruded geometry (now 3D) in the table ta_3dgeb. All my attempts were in vain...
*4. insert extruded geomtry*
INSERT
INTO
ta_3dgeb
select
SDO_UTIL.EXTRUDE(
GEOM,
SDO_NUMBER_ARRAY(0),
SDO_NUMBER_ARRAY(10),
'false', --validation
0.005)
from ta_geb;
I got the following error message after executing this Code:
ORA-29875: failed in the execution of the ODCIINDEXINSERT routine
ORA-13365: layer SRID does not match geometry SRID
ORA-06512: in "MDSYS.SDO_INDEX_METHOD_10I", line 709
ORA-06512: in "MDSYS.SDO_INDEX_METHOD_10I", line 225
Then I tried to change something on the metadata and spatial indices, wihtout success. Does anyone has advices to solve the problem??
Afterwards I would like to export the 3d-geometry in a KML file to visualize it in Google Earth. Therefore oracle provides a tool. But I didn't managed it to export the geometry. Any hints for the KML export or are there any other tools alternatively??
Thanks for any suggestions!
RegardsExtrude does not automatically populate the SRID for the resulting geometry as there may not be a 3D equivalent of the 2D SRID defined
in the DB.
So the extruded geometry comes out without the SRID. In your case, since you are creating an index on the ta_3dgeb table
before inserting the extruded data, it is causing this failure.
So drop the index on the ta_3dgeb table and do the inserts into it.
Then you can manually update the geometries with the SRID if there is a corresponding 3D SRID for 31468.
Otherwise, you can use 31468.
siva -
Oracle Spatial Performance with 10-20.000 users
Does anyone have any experience when Oracle Spatial is used with say 20.000 concurrent users. I am not interested in MapViewer response time, but lets say there is:
- an app using 800 different tables each having an sdo_geometry column
- the app is configured with different tables visible on different view scales
- let's say an average of 40-50 tables is visible at any given time
- some tables will have only a few records, while other can hold millions.
- there is no client side caching
- clients can zoom in/out pan.
Anwers I am interested in:
- What sort of server would be required
- How can Oracle serve all that data (each Refresh renders the map and retrieves the data over the wire as there is no client side caching).
- What sort of network infrastructure would be required.
- Can clients connect to different servers and hence use load balancing or does Oracle have an automatic mechanism for that?
Thanks in advance,
PatrickPatrick, et al.
There are lots of things one can do to improve performance in mapping environments because of a lot of the visualisation is based on "background" or read-only data. Here are some "tips":
1. Spatially sort read-only data.
This tip makes sure that data that is close to each other in space are next to each other on disk! Dan gave a good suggestion when he referenced Chapter 14, "Reorganize the Table Data to Minimize I/O" pp 580- 582, Pro Oracle Spatial. But just as easily one can create a table as select ... where sdo_filter() where the filtering object is an optimized rectangle across the whole of the dataset. (This is quite quick on 10g and above but much slower on earlier releases.)
When implementing this make sure that the created table is created such that its blocks are next to each other in the tablespace. (Consider tablespace defragmentation beforehand.) Also, if the data is READ ONLY set the PCTFREE to 0 in order to pack the data up into as small a number of blocks as possible.
2. Generalise data
Rendering spatial data can be expensive where the data is geometrically detailed (many vertices) esp where the data is being visualised at smaller scales than it was captured at. So, if your "zoom thresholds" allow 1:10,000 data to be used at 1:100,000 then you are going to have problems. Consider pre-generalising the data (see sdo_util.simplify) before deployment. You can add multiple columns to your base table to hold this data. Be careful with polygon data because generalising polygons that share boundaries will create gaps etc as the data is more generalised. Often it is better to export the data to a GIS which can maintain the boundary relationships when generalising (say via topological relationships).
Oracle's MapViewer has excellent on-the-fly generalisation but here one needs to be careful. Application tier caching (cf Bryan's comments) can help here a lot.
3. Don't draw data that is sub-pixel.
As one zooms out objects become smaller and smaller until they reach a point where the whole object can be drawn within a single pixel. If you have control over your map visualisation application you might want to consider setting the SDO_FILTER parameter "min_resolution" flag dynamically so that its value is the same as the number of meters / pixel (eg min_resolution=10). If this is set Oracle Spatial will only include spatial objects in the returned search set if one side of a geometry's MBR is greater than or equal to this value. Thus any geometries smaller than a pixel will not be returned. Very useful for large scale data being drawn at small scales and for which no selection (eg identify) is required. With Oracle MapViewer this behaviour can be set via the generalized_pixels parameter.
3. SDO_TOLERANCE, Clean Data
If you are querying data other than via MBR (eg find all land parcels that touch each other) then make sure that your sdo_tolerance values are appropriate. I have seen sites where data captured to 1cm had an sdo_tolerance value set to a millionth of a meter!
A corollary to this is make sure that all your data passes validation at the chosen sdo_tolerance value before deploying to visualisation. Run sdo_geom.validate_geometry()/validate_layer()...
4. Rtree Spatial Indexing
At 10g and above lots of great work went in to the RTree indexing. So, make sure you are using RTrees and not QuadTrees. Also, many GIS applications create sub-optimal RTrees by not using the additional parameters available at 10g and above.
4.1 If your table/column sdo_geometry data contains only points, lines or polygons then let the RTree indexer know (via layer_gtype) as it can implement certain optimizations based on this knowledge.
4.2 With 10g you can set the RTree's spatial index data block use via sdo_pct_free. Consider setting this parameter to 0 if the table/column sdo_geometry data is read only.
4.3 If a table/column is in high demand (eg it is the most commonly used table in all visualisations) you can consider loading (a part of) the RTree index into memory. Now, with the RTree indexing, the sdo_non_leaf_tbl=true parameter will split the RTree index into its leaf (contains actual rowid reference) and non-leaf (the tree built on the leaves) components. Most RTrees are built without this so only the MDRT*** secondary tables are built. But if sdo_non_leaf_tbl is set to true you will see the creation of an additional MDNT*** secondary table (for the non_leaf part of the rtree index). Now, if appropriate, the non_leaf table can be loaded into memory via the following:
ALTER TABLE MDNT*** STORAGE(BUFFER_AREA KEEP);
This is NOT a general panacea for all performance problems. One should investigate other options before embarking on this (cf Tom Kyte's books such as Expert Oracle Database Architecture, 9i and 10g Programming Techniques and Solutions.)
4.4 Don't forget to check your spatial index data quality regularly. Because many sites use GIS package GUI tools to create tables, load data and index them, there is a real tendency to not check what they have done or regularly monitor the objects. Check the SDO_RTREE_QUALITY column in USER_SDO_INDEX_METADATA and look for indexes with an SDO_RTREE_QUALITY setting that is > 2. If > 2 consider rebuilding or recreating the index.
5. The rendering engine.
Whatever rendering engine one uses make sure you try and understand fully what it can and cannot do. AutoDesk's MapGuide is an excellent product but I have seen it simply cache table/column data and never dynamically access it. Also, I have been at one site which was running Deegree and MapViewer and MapViewer was so fast in comparison to Deegree that I was called in to find out why. I discovered that Deegree was using SDO_RELATE(... ANYINTERACT ...) for all MBR queries while MapViewer was using SDO_FILTER. Just this difference was causing some queries to perform at < 10% of the speed of MapViewer!!!!
6. Consider "denormalising" data
There is an old adage in databases that is "normalise for edit, denormalise for performance". When we load spatial data we often get it from suppliers in a fairly flat or normalised form. In consort with spatial sorting, consider denormalising the data via aggregations based on a rendering attribute and some sort of spatial unit. For example, if you have 1 million points stored as single points in SDO_GEOMETRY.SDO_POINT which you want to render by a single attribute containing 20 values, consider aggregating the data using this attribute AND some sort of spatial BUCKET or BIN. So, consider using SDO_AGGR_UNION coupled with Spatial Analysis and Mining package functions to GROUP the data BY <<column_name>> and a set of spatial extents.
6. Tablespace use
Finally, talk to your DBA in order to find out how the oracle database's physical and logical storage is organised. Is a SAN being used or SAME arranged disk arrays? Knowing this you can organise your spatial data and indexes using more effective and efficient methods that will ensure greater scalability.
7. Network fetch
If your rendering engine (app server) and database are on separate machines you need to investigate what sort of fetch sizes are being used when returning data from queries to the middle-tier. Fetch sizes for attribute only data rows and rows containing spatial data can be, and normally are, radically different. Accepting the default settings for these sizes could be killing you (as could the sort_area_size of the Oracle session the application server has created on the database). For example I have been informed that MapInfo Pro uses a fixed value of 25 records per fetch when communicating with Oracle. I have done some testing to show that this value can be too small for certain types of spatial data. SQL Developer's GeoRaptor uses 100 which is generally better (but this one can modify this). Most programmers accept defaults for network properties when programming in ADO/ODBC/OLEDB/JDBC: just be careful as to what is being set here. (This is one of the great strengths of ArcSDE: its TCP/IP network transport is well written, tuneable and very efficient.)
8. Physical Format
Finally, while Oracle's excellent MapViewer requires data its spatial data to be in Oracle, other commercial rendering engines do not. So, consider using alternate, physical file formats that are more optimal for your rendering engine. For example, Google Earth Enterprise "compiles" all the source data into an optimal format which the server then serves to Google Earth Enterprise clients. Similarly, a shapefile on local disk to the application server (with spatial indexing) may be faster that storing the data back in Oracle on a database server that is being shared with other business databases (eg Oracle financials). If you don't like this approach and want to use Oracle only consider using a dedicated Oracle XE on the application server for the data that is read only and used in most of your generated maps eg contour or drainage data.
Just some things to think about.
regards
Simon -
Problem in Connection between MapServer and Oracle Spatial
Hi Everybody,
First i thanks Dan Abugov for quick reply fr my previous query.
I am working on the Oracle Spatial and MapServer
I want to clear that MapServer is not Oracle MapViewer, this is Open Source UMN MapServer.
When I pass the query(shown below), the empty image is displayed in the browser without any map
http://localhost/cgi-bin/mapserv.exe?map=/ms4w/apps/sdocountry/sdocountry.map&layers=country&mode=map
I created .map file (shown below) with the Oracle Spatial Connection.
MAP
DEBUG ON
STATUS ON
SIZE 800 600
UNITS dd
IMAGECOLOR 255 255 255
PROJECTION
"proj=latlong"
"ellps=WGS84"
END
EXTENT -180 -45 180 45
LAYER
DEBUG ON
PROJECTION
"proj=latlong"
"ellps=WGS84"
END
NAME "CountryMap"
TYPE POLYGON
CONNECTIONTYPE oraclespatial
CONNECTION "world/land@orcl"
DATA "shape FROM country USING SRID 8307"
CLASS
NAME "Country_Class"
STYLE
COLOR 250 250 0
OUTLINECOLOR 32 32 32
END
END
END
END
And Set the environment variable in the apache/conf/httpd.conf file as
SetEnv ORACLE_BASE "d:/oracle/product/10.2.0"
SetEnv ORACLE_HOME "d:/oracle/product/10.2.0/db_1"
SetEnv ORACLE_SID "orcl"
SetEnv TNS_ADMIN "d:/oracle/product/10.2.0/db_1/network/admin"
This is the my whole Sample code and configuration, I dont know why the map image is not generating.
I am not receving any error message.
MapServer for windows (ms4w) binaries is downloaded from "maptools.org"
System configuration
Windows 2000 Advanced Server
Oracle 10g with Oracle Spatial
MapServer 4.6.1
Apache/2.0.55 (Win32)
I am waiting for the some solution, from you to over come this problem.
Thanks & Regards,
Prema Selvam
GISbiz.Prema,
If you haven't already, you may want to post this same question to one of the MapServer mail lists (http://mapserver.gis.umn.edu/community/mailinglists/) - most MapServer users/developers are very quick to respond as well.
-Justin -
How to display the data store in Oracle Spatial?
Hello everyone,
I am totally newbie in Oracle Spatial and to GIS in general. I have started playing around with Oracle Spatial and did an example which is to store a couple of polygons in Oracle and my question is: how to view/display the stored data (in my case the polygons) using Oracle?
Thanks in advanceLatvian83,
thing is, most of the GIS data out there are in SHAPE format so does it make sense to convert [between formats]Depends.
If you're a data producer that wants to ensure a single version of the truth across your company, then maintaining a central repository makes imminent good sense. The alternative would be people working on likely outdated snap-shots of data – stored on their PCs as well as duplicated on file-servers -- bumbling along creating derivatives and passing on the results as if they were valid... Anyhow, spatial analysts would also benefit from a single version of truth.
Data consumers who just want the latest mashups may not want to be bothered with the translation in/out of a database.
Then there’s a grey area with transformations: I've seem instances where it was more expedient to pull data into ArcMap for a massive transformation than performing a similar operation within Oracle.
Regards,
Noel
(I'm sure you've already found it, but you can right-click on a legend entry on ArcMap's Table of Contents and find the Export to ShapeFile option on the context-menu.) -
Import Bently DGN Files into a oracle spatial 8.1.7-- ERRORS
Hy
I work with Oracle spatial 8.1.7, MapX, VB6 and Win2k.
My Problem: I get a DGN File. When I translate this file into a MapInfo File(s), it works fine.
Now I must have this data in a oracle spatial. On this part the problems start.
I can only inport the geometry and no charakters strings into the DB.
The Textlayers on the mapinfo file are converted th polygons (from DGN to MapInfo TAB).
If I move these file to the oracle, the text Layers are empty. If I look into the MapInfo Layer, which could have the text, the visible table (on MapInfo) is empy.
It is posible to transform the DGN to a other way (with FME). Then I have a smaler number of MapInfo files with text informations in the table(MapInfotable).
Because it is not posible to load this file into the oracle.
I get the errormessage, that the first row is Zero.....
What can I do???
Is the DGN FIle corrupt??? Have I a'n error on my Oracle???
Please help me
PeterHi,
Please, refer to Steve Rea's Web for DB Cloning examples:
For Cloning using Datafile copy:
http://uaex.edu/srea/Cloning_a_Database_using_Datafile_Copy.htm
For Cloning using Export/Import:
http://uaex.edu/srea/Cloning_a_Database_using_Export_Import.htm
Cheers:
Francisco Munoz Alvarez
www.oraclenz.com -
How to use Oracle Spatial in this scenario
My scenario is like that:
I'm very new to Oracle Spatial
I'm building an application that will be based on asp.net.(I am
confident about .net)
As per my client requirement there are some kml file in one archive
folder.
Let me give an example:
say there is a kml file for region A.(latitude say 36 n to 40 n and
longitude is 110 w to 115 w) already in the archive folder.
Now if a new kml file(say A1.kml) that has been created by the user
and say its latitude and longitude are respectively 37n and 112w. As we clicked A.kml, google earth is opened up for the region A and as
we move our mouse cursor to more deeper more polygons are visible.
eventually polygon for A1.kml is also visible and definitely which is
inside the polygon for region A.
How can I achieve this thing by using oracle spatial 10g? ---(it's one of my senior's advice to use "oracle spatial 10g" in this scenario)
I'm not too sure whether I can able to make it clear to u about my
situation; plz xcuse me if I'm wasting ur valuable time.Hi,
This link helped me a lot!
http://www.oracle.com/technology/pub/articles/rubio-mashup.html
Hope it could help you too.
Best regards,
Luiz -
Simon Greener's Morton Key Clustering in Oracle Spatial
Hi folks,
Apologies for the rambling. With mattyschell heading for greener open source big apple pastures I am looking for new folks to bounce ideas and code off. I was thinking this week about the discussion last autumn over spatial clustering.
https://community.oracle.com/thread/3617887
During the course of the thread we all kind of pooh-poohed spatial clustering as not much of solution, myself being one of the primary poohers. Yet the concept certainly remains as something to consider regardless of our opinions. The yellow book, the Greener/Ravada book, Simon's recent treatise (http://download.oracle.com/otndocs/products/spatial/pdf/biwa_2015/biwa2015_uc_comparativeperformance_greener.pdf), they all put forward clustering such that at the very least we should consider it a technique we should be able as professionals to do - a tool in the toolbox whether or not it always is the right answer. I am mildly (very mildly) curious to see if Kothuri, Godfrind and Beinat will recycle their section on spatial clustering with the locked-down MD.HHENCODE into their 12c revision out this summer. If they don't then what is the replacement for this technique? If they do then we return to all of our griping about this ancient routine that Simon implies may date back to the CHS and their hhcode indexes - at least its not written in Java!
Anyhow, so I've been in the midst this month of refreshing some of the datasets I manage and considering clustering the larger tables whilst I am at it. Do I really expect to see huge performance gains? Well... not really. But it does seem like something that should be easy to accomplish, certainly something that "doesn't hurt" and shows that I am on top of things (e.g. "checks the box"). But returning to the discussion from last fall, just what is the best way to do this in Oracle Spatial?
So if we agree to ignore poor old MD.HHENCODE, then what? Hilbert curves look nifty but no one seems to be stepping up with the code for them. And this reroutes us back around to Simon and his Morton key code.
http://www.spatialdbadvisor.com/oracle_spatial_tips_tricks/138/spatial-sorting-of-data-via-morton-key
So who all is using Simon's code currently? If you read that discussion from last fall there does not seem to be anyone doing so and we never heard back from Cat Person on either what he decided to do or what his name is.
I thought I could take a stab at streamlining Simon's process somewhat to make things easier for myself to roll this onto many tables. I put together the following small package
https://github.com/pauldzy/DZ_SDO_CLUSTER/tree/master/Packages
In particular I wanted to bundle up the side issues of how to convert your lines and polygons into points, automate things somewhat and provide a little verification function to see what results look like. So again nothing that Simon does not already walk through on his webpage, just make it bit easier to bang out on your tables without writing a separate long SQL process for each one.
So for example to use Simon's Morton key logic, you need to know the extent envelope of the data (in order to define a proper grid). So if its a large table, you'd want to stash the envelope info in the metadata. You can do this with the update_metadata_envelope procedure or just suffer through the sdo_aggr_mbr each time if you don't want to go that route (I have one table of small watershed polygons that takes about 9 hours to run sdo_aggr_mbr upon). So just run things at the sql prompt
SELECT
DZ_SDO_CLUSTER.MORTON_UPDATE(
p_table_name => 'CATCHMENT_NP21'
,p_column_name => 'SHAPE'
,p_grid_size => 1000
FROM dual;
This will return the update clause populated with the values to use with the morton_key wrapper function, e.g. "morton_key(SHAPE,160.247133275879,-17.673722530871,.0956820001136141,.0352063207508021)". So then just paste that into an update statement
UPDATE foo
SET my_morton_key = dz_sdo_cluster.morton_key(
SHAPE
,160.247133275879
,-17.673722530871
,.0956820001136141
,.0352063207508021
Then rebuild your table sorting on the morton_key. I just use the TOAD rebuild table tool and manually add the order by clause to the rebuild script. I let TOAD do all the work of moving the indexes, constraints and grants to the new table. I imagine there are other ways to do this.
The final function is meant to be popped into Oracle mapviewer or something similar to show your family and friends the results.
SELECT
dz_sdo_cluster.morton_visualize(
'NHDPLUS'
,'NHDFLOWLINE_NP21_ACU'
,'SHAPE'
,'OBJECTID'
,'100'
,10000
,'MORTON_KEY'
FROM dual;
Look Mom, there it is!
So anyhow this is first stab at things and interested in feedback or suggestions for improvement. Did I get the logic correct? Don't spare my feelings if I botched something. Note that like Simon I passed on the matter of just how to determine the proper grid size. I've been using 1000 for the continental US + Hawaii/PR/VI and sitting here this morning I think that probably is too large. Of course it depends on the size of the geometries and thus the density of the resulting points. With water features this can vary a lot from place to place, so perhaps 1000 is okay. What would the algorithm be to determine a decent grid size? It occurs to me I could tell you the average feature count per morton key value, okay well its about 10. That seems small to me. So I could see another function in this package that returns some kind of summary on the results of the keying to tell you if your grid size estimate was reasonable.
Cheers and Happy Saturday,
PaulI've done some spatial clustering testing this week.
Firstly, to reiterate the purpose of spatial clustering as I see it: spatial clustering can be of benefit in situations where frequent window based spatial queries are made. In particular it can be very useful in web mapping scenarios where a map server is requesting data using SDO_FILTER or SDO_ANYINTERACT and there is a need to return the data as quickly as possible. If the data required to satisfy the query can be squeezed into as few blocks as possible, then the IO overhead is clearly reduced.
As Bryan mentioned above, once the data is in the buffer cache, then the advantage of spatial clustering is reduced. However it is not always possible to get/keep enough of the data in the buffer cache, so I believe spatial clustering still has merits, particularly if it can be implemented alongside spatial partitioning.
I ran the tests using an 11.2.0.4 database on my laptop. I have a hard disk rather than SSD, so the effects of excessive IO are exaggerated. The database is configured with the default 8kb block size.
Initially, I created a table PARCELS:
create table parcels (
id integer,
created_date date,
x number,
y number,
val1 varchar2(20),
val2 varchar2(100),
val3 varchar2(200),
geometry mdsys.sdo_geometry,
hilbert_key number);
I inserted 2.8 million polygons into this table. The CREATED_DATE is the actual date the polygons were captured. I populated val1, val2 and val3 with string values to pad the rows out to simulate some business data sitting alongside the sdo_geometry.
I set X,Y to the first ordinate of the polygon and then set hilbert_key = sdo_pc_pkg.hilbert_xy2d(power(2,31), x, y).
I then created 4 tables to base the tests upon:
PARCELS_RANDOM: Ordered by dbms_random.random - an absolute worst case scenario. Unrealistic, but worthwhile as a benchmark.
PARCELS_BASE_DATE: Ordered by CREATED_DATE. This is probably pretty close to how the original source data is structured on disk.
PARCELS_RTREE: Ordered by RTree. Achieved by inserting based on an SDO_FILTER query
PARCELS_HILBERT: Ordered by the hilbert_key attribute
As a first test, I counted the number of blocks required to satisfy an SDO_FILTER query. E.g.
select count(distinct(dbms_rowid.rowid_block_number(rowid)))
from parcels_rtree
where sdo_filter(geometry,
sdo_geometry(2003, 2157, null, sdo_elem_info_array(1, 1003, 3),
sdo_ordinate_array(644232,773809, 651523,780200))) = 'TRUE';
I'm assuming dbms_rowid.rowid_block_number(rowid) is suitable for this.
I ran this on each table and repeated it over three windows.
Results:
So straight off we can see that the random ordering gave pretty horrific results as the data required to satisfy the query is spread over a large number of blocks. The natural date based clustering was far better. RTree and Hilbert based clustering reduced this by a further 50% with Hilbert just nosing out RTree.
Since web mapping is the use case I am most likely to target, I then setup a test case as follows:
Setup layers in GeoServer for each of the tables
Used a script to generate 1,000 random squares over the extent of the data, ranging from 200m to 500m in width and height.
Used JMeter to make a WMS request for a png of the each of the 1,000 windows. JMeter was run sequentially with just one thread, so it waited for each request to complete before starting the next. I ran these tests 3 times to balance out the results, flushing the buffer cache before each run.
Results:
Again the random ordering performed woefully bad - somewhat exacerbated by the quality of the disk on my laptop. The natural date based clustering performed far better. RTree and hilbert based clustering further reduced the time by more than half.
In summary, the results suggest that spatial clustering is worth the effort if:
the data is not already reasonably well clustered
you've got a decent quantity of data
you're expecting a lot of window based queries which need to be returned as quickly as possible
you don’t expect to be able to fit all the data in the buffer cache
When it comes to deciding between RTree and Hilbert (or Morton/z-order or any other space filling curve method).... I found that the RTree method can be a bit slow on large datasets, although this may not matter as a one off task. Plus it requires a spatial index on the source table to start off with. The key based methods are based on an xy, so for lines and polygons there is an intermediate step to extract an xy. I would tend to recommend this approach if you also partition the data based on a subset of the cluster key.
Scripts are available here: https://github.com/john-otoole/oracle_spatial_cluster_test
John -
Hello all
I would like to know if is it possible to install the 10g Spatial functionality in a previous version of the database (8.1.7).
We want to work with Oracle Spatial + ArcSDE (with versioning and Spatial as Geometry Storage) + ArcGIS-ArcIMS, but the editing software will be AutoCAD.
We will get from the database those elements whe want to edit and put it then in AutoCAD layers . To limit the traffic, we only need the geographic primitives (points and arc, but no polygons), but as we are editing polygons, we need a process that rebuild topology. I think that the new Oracle Spatial 10 g topological functionalities could help us (so we can insert arcs in a table and get the polygons they are building, and dangle arcs).
I suppose it will not be possible to edit directly to the geodatabase feature class if it is versioned (so all the changes will appear as consolidated), but, is it possible (and of course, easy) to rebuild via SQL an ArcSDE version?
And finally:
Can (and how) we use Oracle WorkSpace Manager whit ArcSDE??? , and only with AutoCAD? Any experience? I´m thinking about spatial index and mdsys metadata table. Must be these tables registered as "versioned" with Oracle WorkSpace Manager to work with spatial data?
Thank you for all
Jesús de DiegoHello all again
First of all, thank you for your quick reply.
I can explain a bit more what we wanna do:
we're in a multi-platform environ. We've ArcGIS users, AutoCAD users and a ArcSDE DB. We don't want AutoCAD users to migrate to ArcEditor, but they need to edit corporative (DB) data, and, in the other hand, there will be others editors using ArcEditor capabilities, so it is possible we will need versioned (ArcSDE) data.
I think we can edit an ArcSDE version vía AutoCAD:
1º Data storage will be Oracle Spatial.
2º A new version over the default will be created.
3º When an AutoCAD editor request spatial data, we can, vía SQL, get the sdo_geometry (here is when i need to rebuild a complete version....)
4º We load these spatial data into diferents layer in a dwg (in we can get only the geographic primitives, this will be faster)
5º CAD users edit the information and when they finish, load arc and points (lables) into 2 temporal tables, when arcCatalog can rebild polygon topology ....
6º Once polygons have been rebuilded, can be sended to AutoCAD again so Oracle Spatial SQL queries can be used in AutoCAD against the DB.
7º Finally, could we insert the new records into A and D tables?, and how? using simply SQL (again we need to rebuild a version....)
I'm all ears.......
Thank you again
Jesús de Diego -
Clipping algorithm implemented in Oracle Spatial for SDO_INTERSECTION
Hi!
Does anybody knows which clipping algorithm is implemented in Spatial for SDO_INTERSECTION function in 10g or 11g? It's probably some of well-known algorithm (Sutherland–Hodgman, Weiler–Atherton, Vatti ...) with some modifications made to it. I'm just not sure which one. I'm doing a short presentation on Oracle Spatial clipping capabilities so that info might come in handy.
Thanks!
rawcofeThanks for your post. Yes, Sutherland-Hodgman is good and easy to implement if you have convex clipping polygons. However, i do not need to implement it. I just want to know which algorithm Oracle Spatial uses for clipping so I can describe it in greater detail during my presentation. :-)
-
Data Retrieval Speed in Oracle Spatial vs. ESRI ArcSDE
I would appreciate any opinions regarding data retrieval
performance between Oracle Spatial and ESRI ArcSDE. Would an end-
user (using ESRI software) experience significant differences in
data retrieval speed depending on how the data were stored in
Oracle (MDSYS.SDO_GEOMETRY verses ESRI Binary/Blob formats).
Knowing that the ESRI binary formats are tailored to their
software front-end apps (ArcGIS, ArcMap, ArcCatalog, and
ArcInfo), wouldn't this be a "non-issue" until the spatial
dataset gets "large", and even then, wouldn't performance be
(almost) equal if the spatial indexes were created properly?
Thanks for your inputs,
BruceJohn,
You can't do that type of query in sql from sql*plus using
SDEBINARY. HOwever, you can perform spatial queries in ArcMap
if you are using SDEBINARY.
You can use the query builder to perform point-in-polygon type
queries.
Hope that helps.
For my two cents, I think SDO_GEOMETRY gives you a more robust
database to work with, because you have the added power of
Oracle Spatial functions. If you are using SDEBINARY you are
limited to only what you can do thru ArcGIS.
If you are concerned more about performance than accessibility,
especially with a large number of users, then SDEBINARY might
be the better choice.
I love Oracle Spatial and am hoping that the performance issue
will not be a serious one when we start putting ArcIMS developed
apps into production.
Dave
Maybe you are looking for
-
Dear ALL Recorded an LSMW for PA40 hiring actions which includes infogroup - [ IT 0000, 0001, 0002, 0105-ZVEN (Sub type)] This is for external vendor employees hiring actions. While recording or manually running the process, it is working fine. When
-
Financial documents/ Letter of Credit and down-payment
Hi, I try to map requirements from business against solution in SAP. There is a scenario as follows, where part of the sales order is covered through down-payment. This should be exempted from Letter of credit value. Example Sales Order value 1 Mio U
-
I have been able to open files from this camera before but still checked for latest Camera Raw download. Still won't open files from this camera. Opens files from my 60D just fine. I downloaded the latest and it has worked before. What the heck is go
-
Need to Block storage location through physical inventory process
Hello My client want to Block few storage locations not through authorisation objects but using physical inventory process. can this be achieved through any configuration settings so that when we run physical count the SLoc blocks till the count comp
-
White background while loading?
There's a white background visible as my flash swf loads. The background is set as the same color as the page background. Is there a way to fix this? Does my flash swf just need to load more quickly? http://www.aprilaromatics.com/AAindex.html Thanks!