Oracle Spatial datatype problems - HELP!!

Can anyone help with this problem. I am using Pro*C/C++ to create a DLL which I am then
linking to another C based application. I am attempting to use Pro*C/C++ to read/write
Oracle Spatial Objects. I have no problem writing Pro*C/C++ code or accessing the
functions in the DLL. My problem is returning values from the DLL functions to my
application. So far the only values I seem able to return are character strings.
Below are two versions of the same function. One that returns a char string and a second
that returns nothing. I would like the second function to work and to return an integer
value for "g_type". Any ideas??? By the way "g_type" is the return value in question. I am
using Oracle Pro*C/C++ 8.1.5 and the V8 Oracle Call Interface for the datatype conversion.
Header files for the Object types have been generated by the Object Type Translator.
THIS FUNCTION WORKS AS EXPECTED. THE PARAMETER G_TYPE RETURNS THE ANTICIPATED STRING VALUE
int Read_Geometry
int gid,
char *g_type,
char *errMsg
char err_msg[128];
sword retcode;
int tester;
size_t buf_len, msg_len;
SDO_GEOMETRY geom = (SDO_GEOMETRY )0;
SDO_GEOMETRY_ind geom_ind = (SDO_GEOMETRY_ind )0;
exec sql at db_name allocate :geom:geom_ind;
exec sql at db_name select geometry into :geom:geom_ind from test81 where gid=:gid;
if (SQLCODE !=0)
exec sql whenever sqlerror continue;
buf_len = sizeof (err_msg);
sqlglm(err_msg, &buf_len, &msg_len);
strcpy(errMsg,err_msg);
return ERROR;
else
retcode = OCINumberToInt(err,&geom->sdo_gtype, sizeof(g_type), OCI_NUMBER_SIGNED,&tester);
if (retcode == OCI_ERROR)
sprintf(errMsg,"Convert failed");
return ERROR;
else
sprintf(g_type,"%d", tester);
sprintf(errMsg,"gType=%s",g_type);
return SUCCESS;
return SUCCESS;
THIS FUNCTION DOES NOT WORK. THE FUNCTION EXECUTES BUT THE PARAMETER G_TYPE RETURNS NOTHING?????????
int Read_Geometry
int gid,
int g_type,
char *errMsg
char err_msg[128];
sword retcode;
size_t buf_len, msg_len;
SDO_GEOMETRY geom = (SDO_GEOMETRY )0;
SDO_GEOMETRY_ind geom_ind = (SDO_GEOMETRY_ind )0;
exec sql at db_name allocate :geom:geom_ind;
exec sql at db_name select geometry into :geom:geom_ind from test81 where gid=:gid;
if (SQLCODE !=0)
exec sql whenever sqlerror continue;
buf_len = sizeof (err_msg);
sqlglm(err_msg, &buf_len, &msg_len);
strcpy(errMsg,err_msg);
return ERROR;
else
retcode = OCINumberToInt(err,&geom->sdo_gtype, sizeof(g_type), OCI_NUMBER_SIGNED,&g_type);
if (retcode == OCI_ERROR)
sprintf(errMsg,"Convert failed");
return ERROR;
else
return SUCCESS;
return SUCCESS;
Header file is as follows
struct SDO_GEOMETRY
OCINumber sdo_gtype;
OCINumber sdo_srid;
struct SDO_POINT_TYPE sdo_point;
SDO_ELEM_INFO_ARRAY * sdo_elem_info;
SDO_ORDINATE_ARRAY * sdo_ordinates;
typedef struct SDO_GEOMETRY SDO_GEOMETRY;
struct SDO_GEOMETRY_ind
OCIInd _atomic;
OCIInd sdo_gtype;
OCIInd sdo_srid;
struct SDO_POINT_TYPE_ind sdo_point;
OCIInd sdo_elem_info;
OCIInd sdo_ordinates;
typedef struct SDO_GEOMETRY_ind SDO_GEOMETRY_ind;

Hi,
From a quick look I can't see anything wrong. You might want to compare this with the example in $ORACLE_HOME/md/demo/examples.
Also, note that in 9i there will probably be an occi (C++ OCI) available, should this be useful to you.

Similar Messages

  • Oracle Spatial Datatypes and Dataguard 11g

    Hi
    Does anyone know if the following datatypes are supported in dataguard 11g for logical standby or physical standby?
    SDO_Geometry
    SDO_georaster
    thanks
    sunir

    A correction. Logical standby (SQL Apply) doesn't currently natively support spatial data types but sdo_geometry can be supported thru EDS by creating a logging table and two triggers and some manual work. Please check it out from My Oracle Support:
    Note 559353.1 - Extended Datatype Support (EDS) for SQL Apply. "Extended Datatype Support (EDS) is the ability for SQL Apply to extend support for additional datatypes that are not natively supported yet by SQL Apply. EDS relies on a new capability in Oracle Database 10g Release 2 Patch Set 3 (10.2.0.4) and Oracle Database 11g Release 1 Patch Set 1 (11.1.0.7) that allows triggers to fire on the logical standby database. "
    Note 565074.1 - EDS for SQL Apply Example - Oracle Spatial Type SDO_GEOMETRY
    thanks
    Jeffrey

  • Oracle character set problem - help reqed urgent !!

    Hello frnds,
    I have a oracle 8i database server installed on sun solaris os. The database character set is us7ascii. In one of the tables TIFF images are stored in a long column. I m trying to fetch these images using oracle 9i client and visual basic(oracle ODBC drivers). But i m unable to do so. I can not fetch special characters.
    Is it because of the character set problem? but when i run my code on the server itself, i m able to fetch the images. I tried to fetch the images using oracle 8 i client on windows XP machine but could not do so. Are there any special settings that i have to do on the client side?

    i run my code on the server itself, i m able to fetch
    the images. I tried to fetch the images using oracle
    8 i client on windows XP machine but could not do so.You able to fetch the image , So it is not because of the character set.
    First thing you need to consider is that use certified combination of OS , client and database server only. Check Certify - Oracle's Certification Matrices
    Virag

  • 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.php

    Andrew 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 11g R2, Problem Loading Spatial Data

    We have a geodatabase which has been implemented by oracle spatial. it has been working quite fine since 2 years ago. Recently the data center serving our geodatabase has been upgraded on both software and hardware specifications. The handler application now has difficulty retrieving spatial data. The problem is somehow strange; only some spatial objects are loaded and then application encounters exceptions.
    Previous working database engine was an Oracle 11g R1 and the new one is Oracle 11g R2. The application is a java application mostly written by swing. Here is the stack trace:
    java.sql.SQLRecoverableException: No more data to read from socket
         at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1200)
         at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1155)
         at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:279)
         at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
         at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
         at oracle.jdbc.driver.T4CCallableStatement.doOall8(T4CCallableStatement.java:202)
         at oracle.jdbc.driver.T4CCallableStatement.fetch(T4CCallableStatement.java:1079)
         at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:369)
         at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:273)
         at ir.mas.aamar.service.map.MapService.getModifiedMap(MapService.java:405)
         at ir.mas.aamar.map.MapPanel.redrawLayers(MapPanel.java:504)
         at ir.mas.aamar.map.LayersTree.onSnapshotDisplayCheckBoxItemChanged(LayersTree.java:420)
         at ir.mas.aamar.map.LayersTree.onMouseReleased(LayersTree.java:204)
         at ir.mas.aamar.map.LayersTree.access$0(LayersTree.java:188)
         at ir.mas.aamar.map.LayersTree$1.mouseReleased(LayersTree.java:170)
         at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
         at java.awt.AWTEventMulticaster.mouseReleased(Unknown Source)
         at java.awt.Component.processMouseEvent(Unknown Source)
         at javax.swing.JComponent.processMouseEvent(Unknown Source)
         at java.awt.Component.processEvent(Unknown Source)
         at java.awt.Container.processEvent(Unknown Source)
         at java.awt.Component.dispatchEventImpl(Unknown Source)
         at java.awt.Container.dispatchEventImpl(Unknown Source)
         at java.awt.Component.dispatchEvent(Unknown Source)
         at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
         at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
         at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
         at java.awt.Container.dispatchEventImpl(Unknown Source)
         at java.awt.Window.dispatchEventImpl(Unknown Source)
         at java.awt.Component.dispatchEvent(Unknown Source)
         at java.awt.EventQueue.dispatchEvent(Unknown Source)
         at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
         at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
         at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.run(Unknown Source)
    java.sql.SQLRecoverableException: No more data to read from socket
         at oracle.jdbc.driver.T4CMAREngine.unmarshalUB1(T4CMAREngine.java:1200)
         at oracle.jdbc.driver.T4CMAREngine.unmarshalSB1(T4CMAREngine.java:1155)
         at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:279)
         at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
         at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:521)
         at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:194)
         at oracle.jdbc.driver.T4CStatement.executeForDescribe(T4CStatement.java:853)
         at oracle.jdbc.driver.OracleStatement.executeMaybeDescribe(OracleStatement.java:1145)
         at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:1267)
         at oracle.jdbc.driver.OracleStatement.executeQuery(OracleStatement.java:1469)
         at oracle.jdbc.driver.OracleStatementWrapper.executeQuery(OracleStatementWrapper.java:389)
         at ir.mas.aamar.service.map.MapService.executeJDBCQuery(MapService.java:78)
         at ir.mas.aamar.service.map.MapService.getSnapshotsForThisTermPlusHoze(MapService.java:1013)
         at ir.mas.aamar.dialog.edit.EditTools.refreshLayersCombo(EditTools.java:327)
         at ir.mas.aamar.dialog.edit.EditTools.refresh(EditTools.java:301)
         at ir.mas.aamar.dialog.edit.EditTools.<init>(EditTools.java:103)
         at ir.mas.aamar.dialog.edit.EditTools.editTools(EditTools.java:62)
         at ir.mas.aamar.map.MapPanel.paintComponent(MapPanel.java:7591)
         at javax.swing.JComponent.paint(Unknown Source)
         at javax.swing.JComponent.paintToOffscreen(Unknown Source)
         at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
         at javax.swing.RepaintManager.paint(Unknown Source)
         at javax.swing.JComponent._paintImmediately(Unknown Source)
         at javax.swing.JComponent.paintImmediately(Unknown Source)
         at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
         at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
         at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
         at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
         at java.awt.event.InvocationEvent.dispatch(Unknown Source)
         at java.awt.EventQueue.dispatchEvent(Unknown Source)
         at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
         at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
         at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.run(Unknown Source)
    java.sql.SQLRecoverableException: Closed Resultset: next
         at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:224)
         at ir.mas.aamar.service.map.MapService.getSnapshotsForThisTermPlusHoze(MapService.java:1014)
         at ir.mas.aamar.dialog.edit.EditTools.refreshLayersCombo(EditTools.java:327)
         at ir.mas.aamar.dialog.edit.EditTools.refresh(EditTools.java:301)
         at ir.mas.aamar.dialog.edit.EditTools.<init>(EditTools.java:103)
         at ir.mas.aamar.dialog.edit.EditTools.editTools(EditTools.java:62)
         at ir.mas.aamar.map.MapPanel.paintComponent(MapPanel.java:7591)
         at javax.swing.JComponent.paint(Unknown Source)
         at javax.swing.JComponent.paintToOffscreen(Unknown Source)
         at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
         at javax.swing.RepaintManager.paint(Unknown Source)
         at javax.swing.JComponent._paintImmediately(Unknown Source)
         at javax.swing.JComponent.paintImmediately(Unknown Source)
         at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
         at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
         at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
         at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
         at java.awt.event.InvocationEvent.dispatch(Unknown Source)
         at java.awt.EventQueue.dispatchEvent(Unknown Source)
         at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
         at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
         at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.run(Unknown Source)
    Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
         at ir.mas.aamar.dialog.edit.EditTools.setTypeOfEditModel(EditTools.java:452)
         at ir.mas.aamar.dialog.edit.EditTools.<init>(EditTools.java:104)
         at ir.mas.aamar.dialog.edit.EditTools.editTools(EditTools.java:62)
         at ir.mas.aamar.map.MapPanel.paintComponent(MapPanel.java:7591)
         at javax.swing.JComponent.paint(Unknown Source)
         at javax.swing.JComponent.paintToOffscreen(Unknown Source)
         at javax.swing.BufferStrategyPaintManager.paint(Unknown Source)
         at javax.swing.RepaintManager.paint(Unknown Source)
         at javax.swing.JComponent._paintImmediately(Unknown Source)
         at javax.swing.JComponent.paintImmediately(Unknown Source)
         at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
         at javax.swing.RepaintManager.paintDirtyRegions(Unknown Source)
         at javax.swing.RepaintManager.seqPaintDirtyRegions(Unknown Source)
         at javax.swing.SystemEventQueueUtilities$ComponentWorkRequest.run(Unknown Source)
         at java.awt.event.InvocationEvent.dispatch(Unknown Source)
         at java.awt.EventQueue.dispatchEvent(Unknown Source)
         at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
         at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
         at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
         at java.awt.EventDispatchThread.run(Unknown Source)
    I read in some forums that the problem could be caused by jdbc version incompatibility, so I just copied jdbc archives from the installed oracle 11g R2 jdbc folder but the problem persists. Last thing I should mention is that only spatial data is problemistic and non-spatial data is easily loaded.
    Please Help, Thanks.

    Hi storm,
    During the installation of oracle as you said if you have given the global password, basically this specific password will reflect to users such as
    -sys
    -system
    -dbsnmp
    -sysman
    As you are new to oracle the basics that you should know is that "SYS" user is the highly privileged user in Oracle and should be logged in as "sys as sysdba" with his respective password (i.e. the global password that you have entered during database installation) to obtain his privilege. Remember to manipulate your database with caution when you are logged in as the sys user. You can log into the database using the sys user in the following way:
    c\> sqlplus sys as sysdba
    password: ****** --It will ask you for the password and you will have to give the global password that was given during installation
    Hope this helps!!!
    Regards,

  • Problem in importing data from shape file to Oracle Spatial

    The following error is being displayed
    symbol : constructor ShapefileReaderJGeom(java.lang.String)
    location: class oracle.spatial.util.ShapefileReaderJGeom
    Though i have downloaded latest Spatial Java class library (sdo_java_040319.zip) file and properly set sdoapi.jar and sdoutl.jar in the classpath.
    How can i get rid of this problem. Is it because i am still using old spatial java library for some other programs.

    Hi,
    Did you follow the instructions in the readme? Are you using Oracle10g?
    Thanks,
    Dan

  • 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

  • Oracle Spatial operator SQL statement help

    I have a 3D elevation point feature class (elev) and a polygon feature class (Building) loaded in Oracle Spatial. I am trying to update the "HEIGHT" attribute of the "Building" Feature class using the average elevation of "elev" feature class. Here below is the SQL statement I used, which generated the same value for all buildings. The avg(elevation) returns the average elevation of all points within all building polygons, not all points within ONE polygon.
    Please help and thanks.
    update building
    set height = (select avg(elevation)
    from elev e, building b
    where sdo_anyinteract(e.shape, b.shape) = 'TRUE');

    Hi,
    try this
    update building b
    set height = (select avg(elevation)
    from elev e where sdo_anyinteract(e.shape, b.shape) = 'TRUE');
    Udo

  • Oracle Spatial problem

    Hi all, I am having a problem working through some examples in a book from Apress.Com named Pro Oracle Spatial, chapter 3. Does anyone recognise the problem below or have a suggestion as to how I can correct it. (It has stopped me momentarily) I have 'googled' with no ready result. TIA Regards Peter.
    SQL> -- Listing 3-5. Geocoding Addresses to Obtain Explicit Spatial Information
    SQL> UPDATE customers
    2 SET location =
    3 sdo_gcdr.geocode_as_geometry
    4 (
    5 'SPATIAL',
    6 sdo_keywordarray
    7 (
    8 street_number || ' ' || street_name,
    9 city || ', ' || state || ' ' || postal_code
    10 ),
    11 'US'
    12 );
    sdo_gcdr.geocode_as_geometry
    ERROR at line 3:
    ORA-29532: Java call terminated by uncaught Java exception: Message:null
    Thu Jan 05 10:51:25 GMT+11:00 2006
    Machine Node Name: localhost
    Component: Geocoder
    Sub-Component: Road.fetchRoadsWithMatchedHN
    Server Side
    Severity: 60
    Description: ORA-00904: "B"."DCA": invalid identifier
    ORA-06512: at "MDSYS.SDO_GCDR", line 4944
    ORA-06512: at "MDSYS.SDO_GCDR", line 4984

    Check out the Spatial forum at Spatial (just a couple of lines further down that the General forum you posted in here <g>)

  • Pro Oracle Spatial problem

    Hi all, I am having a problem working through some examples in a book from Apress.Com named Pro Oracle Spatial, chapter 3. Does anyone recognise the problem below or have a suggestion as to how I can correct it. (It has stopped me momentarily) I have 'googled' with no ready result. TIA Regards Peter.
    SQL> -- Listing 3-5. Geocoding Addresses to Obtain Explicit Spatial Information
    SQL> UPDATE customers
    2 SET location =
    3 sdo_gcdr.geocode_as_geometry
    4 (
    5 'SPATIAL',
    6 sdo_keywordarray
    7 (
    8 street_number || ' ' || street_name,
    9 city || ', ' || state || ' ' || postal_code
    10 ),
    11 'US'
    12 );
    sdo_gcdr.geocode_as_geometry
    ERROR at line 3:
    ORA-29532: Java call terminated by uncaught Java exception: Message:null
    Thu Jan 05 10:51:25 GMT+11:00 2006
    Machine Node Name: localhost
    Component: Geocoder
    Sub-Component: Road.fetchRoadsWithMatchedHN
    Server Side
    Severity: 60
    Description: ORA-00904: "B"."DCA": invalid identifier
    ORA-06512: at "MDSYS.SDO_GCDR", line 4944
    ORA-06512: at "MDSYS.SDO_GCDR", line 4984

    Hi,
    I think you need 10.1.0.3 or higher for this to work:
    Geocoder - error

  • I need help on Oracle Spatial

    Hello;
    I4m about to develop an application using your Spatial cartridge, but i4m not sure if it4s the best way to do it. Well, this application must store images caracteristics, but in more than 3 dimensions, i haven4t found any information about this, in the documents I found in your web site. I4d be very pleased if you could give me some information about if this cartridge is the best way to develop my application and how could Ido it.
    Thanks very much for your time, Cmc
    null

    Hi what connection types do you mean please.I am new to oracle 10g and oracle spatial.I can find my way round 10g but not spatial.in this case please what options would you suggest.Thanks

  • Oracle Spatial, help =(

    Hi,
    (sorry for my bad english)
    i need to know how i can select the names contained in a area. For example, i have a a table "MONACO_DB.ZONES", and i want to select all city contained in the central Zone of MONACO_DB.ZONES. How can i do it?
    Thanks at all..

    Assuming:
    - you are aware with the basics of oracle spatial
    - have user_sdo_geom_metadata populated
    - spatial index built on your geometry
    - Districts have polygon geometry
    - D_BAHN have point geometry
    you need the spatial operator SDO_RELATE with a mask specifying the relationship.
    The mask Contains or Inside are the most obvious, but do not take the cases into account where there could be a D_BAHN right on the border of District. Therefor the anyinteract mask is the most appropriate.
    SELECT
    A.id
    FROM DISTRICTS A , D_BAHN B
    WHERE SDO_RELATE(B.Geometry, A.Geometry, 'mask=ANYINTERACT') = 'TRUE';
    Read for more details the online doc: (read http://download.oracle.com/docs/html/B14255_01/sdo_operat.htm#i78531).
    Hope this gets you in the good direction
    Luc

  • Can not deploy Oracle Spatial Routing Engine on Oracle Weblogic

    I posted my question with Oracle Support, however they directed me to the oracle forums. I am hoping this problem can be resolved here. In any event I am getting the following stack trace (shown below). I am using Spatial Version 11.2.0.1.0, Map Viewer 11.1.1.5.1, and WebLogic 10.3.5.0, and data-set provided by Pro Oracle Spatial for Oracle Database 11g - Apress boos. I have successful in deploying Map Viewer, Geocoder Server, but not the Routing Server.
    Below is the stack trace:
    ####<Nov 18, 2011 3:31:07 PM CST> <Error> <Deployer> <sa2apsp-spatialdev.sa2apsp.com> <AdminServer> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1321651867820> <BEA-149202> <Encountered an exception while attempting to commit the 1 task for the application 'routeserver'.>
    ####<Nov 18, 2011 3:31:07 PM CST> <Warning> <Deployer> <sa2apsp-spatialdev.sa2apsp.com> <AdminServer> <[STANDBY] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1321651867826> <BEA-149004> <Failures were detected while initiating deploy task for application 'routeserver'.>
    ####<Nov 18, 2011 3:31:07 PM CST> <Warning> <Deployer> <sa2apsp-spatialdev.sa2apsp.com> <AdminServer> <[STANDBY] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <> <> <1321651867826> <BEA-149078> <Stack trace for message 149004
    weblogic.application.ModuleException: [HTTP:101216]Servlet: "RouteServerServlet" failed to preload on startup in Web application: "routeserver".
    java.lang.NullPointerException
         at oracle.spatial.router.server.RouteServerServlet.init(RouteServerServlet.java:102)
         at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:283)
         at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
         at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
         at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:64)
         at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:58)
         at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:48)
         at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:539)
         at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1985)
         at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1959)
         at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1878)
         at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3153)
         at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1508)
         at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:482)
         at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
         at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200)
         at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:247)
         at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
         at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:27)
         at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:636)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:205)
         at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:58)
         at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
         at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
         at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:569)
         at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:150)
         at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:116)
         at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:323)
         at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:844)
         at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1253)
         at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:440)
         at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:163)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68)
         at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
         at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
         at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1510)
         at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:482)
         at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
         at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200)
         at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:247)
         at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
         at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:27)
         at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:636)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:205)
         at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:58)
         at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
         at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
         at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:569)
         at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:150)
         at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:116)
         at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:323)
         at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:844)
         at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1253)
         at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:440)
         at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:163)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68)
         at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
         at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
    Caused By: java.lang.NullPointerException
         at oracle.spatial.router.server.RouteServerServlet.init(RouteServerServlet.java:102)
         at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:283)
         at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
         at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
         at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:64)
         at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:58)
         at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:48)
         at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:539)
         at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1985)
         at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1959)
         at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1878)
         at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3153)
         at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1508)
         at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:482)
         at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
         at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200)
         at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:247)
         at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
         at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:27)
         at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:636)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:205)
         at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:58)
         at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
         at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
         at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:569)
         at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:150)
         at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:116)
         at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:323)
         at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:844)
         at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1253)
         at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:440)
         at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:163)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68)
         at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
         at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
    >
    ####<Nov 18, 2011 3:31:07 PM CST> <Error> <Console> <sa2apsp-spatialdev.sa2apsp.com> <AdminServer> <[ACTIVE] ExecuteThread: '1' for queue: 'weblogic.kernel.Default (self-tuning)'> <weblogic> <> <> <1321651867831> <BEA-240003> <Console encountered the following error weblogic.application.ModuleException: [HTTP:101216]Servlet: "RouteServerServlet" failed to preload on startup in Web application: "routeserver".
    java.lang.NullPointerException
         at oracle.spatial.router.server.RouteServerServlet.init(RouteServerServlet.java:102)
         at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:283)
         at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
         at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
         at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:64)
         at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:58)
         at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:48)
         at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:539)
         at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1985)
         at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1959)
         at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1878)
         at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3153)
         at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1508)
         at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:482)
         at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
         at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200)
         at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:247)
         at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
         at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:27)
         at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:636)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:205)
         at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:58)
         at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
         at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
         at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:569)
         at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:150)
         at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:116)
         at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:323)
         at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:844)
         at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1253)
         at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:440)
         at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:163)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68)
         at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
         at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
         at oracle.spatial.router.server.RouteServerServlet.init(RouteServerServlet.java:102)
         at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:283)
         at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
         at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
         at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:64)
         at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:58)
         at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:48)
         at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:539)
         at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1985)
         at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1959)
         at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1878)
         at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3153)
         at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1508)
         at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:482)
         at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
         at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200)
         at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:247)
         at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
         at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:27)
         at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:636)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:205)
         at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:58)
         at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
         at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
         at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:569)
         at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:150)
         at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:116)
         at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:323)
         at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:844)
         at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1253)
         at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:440)
         at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:163)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68)
         at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
         at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
         at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1510)
         at weblogic.servlet.internal.WebAppModule.start(WebAppModule.java:482)
         at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
         at weblogic.application.internal.flow.ScopedModuleDriver.start(ScopedModuleDriver.java:200)
         at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:247)
         at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:425)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.flow.ModuleStateDriver.start(ModuleStateDriver.java:119)
         at weblogic.application.internal.flow.StartModulesFlow.activate(StartModulesFlow.java:27)
         at weblogic.application.internal.BaseDeployment$2.next(BaseDeployment.java:636)
         at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:52)
         at weblogic.application.internal.BaseDeployment.activate(BaseDeployment.java:205)
         at weblogic.application.internal.EarDeployment.activate(EarDeployment.java:58)
         at weblogic.application.internal.DeploymentStateChecker.activate(DeploymentStateChecker.java:161)
         at weblogic.deploy.internal.targetserver.AppContainerInvoker.activate(AppContainerInvoker.java:79)
         at weblogic.deploy.internal.targetserver.operations.AbstractOperation.activate(AbstractOperation.java:569)
         at weblogic.deploy.internal.targetserver.operations.ActivateOperation.activateDeployment(ActivateOperation.java:150)
         at weblogic.deploy.internal.targetserver.operations.ActivateOperation.doCommit(ActivateOperation.java:116)
         at weblogic.deploy.internal.targetserver.operations.AbstractOperation.commit(AbstractOperation.java:323)
         at weblogic.deploy.internal.targetserver.DeploymentManager.handleDeploymentCommit(DeploymentManager.java:844)
         at weblogic.deploy.internal.targetserver.DeploymentManager.activateDeploymentList(DeploymentManager.java:1253)
         at weblogic.deploy.internal.targetserver.DeploymentManager.handleCommit(DeploymentManager.java:440)
         at weblogic.deploy.internal.targetserver.DeploymentServiceDispatcher.commit(DeploymentServiceDispatcher.java:163)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.doCommitCallback(DeploymentReceiverCallbackDeliverer.java:195)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer.access$100(DeploymentReceiverCallbackDeliverer.java:13)
         at weblogic.deploy.service.internal.targetserver.DeploymentReceiverCallbackDeliverer$2.run(DeploymentReceiverCallbackDeliverer.java:68)
         at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:528)
         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
         at weblogic.work.ExecuteThread.run(ExecuteThread.java:178)
    Caused by: java.lang.NullPointerException:
         at oracle.spatial.router.server.RouteServerServlet.init(RouteServerServlet.java:102)
         at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.run(StubSecurityHelper.java:283)
         at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
         at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
         at weblogic.servlet.internal.StubSecurityHelper.createServlet(StubSecurityHelper.java:64)
         at weblogic.servlet.internal.StubLifecycleHelper.createOneInstance(StubLifecycleHelper.java:58)
         at weblogic.servlet.internal.StubLifecycleHelper.<init>(StubLifecycleHelper.java:48)
         at weblogic.servlet.internal.ServletStubImpl.prepareServlet(ServletStubImpl.java:539)
         at weblogic.servlet.internal.WebAppServletContext.preloadServlet(WebAppServletContext.java:1985)
         at weblogic.servlet.internal.WebAppServletContext.loadServletsOnStartup(WebAppServletContext.java:1959)
         at weblogic.servlet.internal.WebAppServletContext.preloadResources(WebAppServletContext.java:1878)
         at weblogic.servlet.internal.WebAppServletContext.start(WebAppServletContext.java:3153)
         at weblogic.servlet.internal.WebAppModule.startContexts(WebAppModule.java:1508)
    >
    ####<Nov 18, 2011 3:31:07 PM CST> <Warning> <netuix> <sa2apsp-spatialdev.sa2apsp.com> <AdminServer> <[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'> <weblogic> <> <> <1321651867900> <BEA-423420> <Redirect is executed in begin or refresh action. Redirect url is /console/console.portal?_nfpb=true&_pageLabel=AppApplicationOverviewPage&AppApplicationOverviewPortlethandle=com.bea.console.handles.AppDeploymentHandle%28%22com.bea%3AName%3Drouteserver%2CType%3DAppDeployment%22%29.>
    ####<Nov 18, 2011 3:31:34 PM CST> <Info> <Health> <sa2apsp-spatialdev.sa2apsp.com> <AdminServer> <weblogic.GCMonitor> <<anonymous>> <> <> <1321651894879> <BEA-310002> <43% of the total memory in the server is free>
    ####<Nov 18, 2011 3:57:36 PM CST> <Info> <Health> <sa2apsp-spatialdev.sa2apsp.com> <AdminServer> <weblogic.GCMonitor> <<anonymous>> <> <> <1321653456622> <BEA-310002> <67% of the total memory in the server is free>
    ####<Nov 18, 2011 3:58:36 PM CST> <Info> <Health> <sa2apsp-spatialdev.sa2apsp.com> <AdminServer> <weblogic.GCMonitor> <<anonymous>> <> <> <1321653516623> <BEA-310002> <51% of the total memory in the server is free>

    Below is the configuration of the routeserver.ear (web.xml):
    <?xml version="1.0"?>
    <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
    <web-app>
    <servlet>
    <servlet-name>RouteServerServlet</servlet-name>
    <servlet-class>oracle.spatial.router.server.RouteServerServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
    <!-- RouteServer initialization parameters -->
    <init-param>
    <param-name>routeserver_schema_jdbc_connect_string</param-name>
    <param-value>jdbc:oracle:[email protected]:1521:SPATLDB</param-value>
    <!--
    <description>
    Tells the Router how to connect to the database use the following
    as a template replaceing host_name, port_number and oracle_sid:
    jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=tcp)(HOST=host_name)(PORT=port_number)))(CONNECT_DATA=(SID=oracle_sid)))
    host_name: the name of the machine where the database is located
    for example mysystem.us.mycompany.com
    port_number: the database port number which can be found with the
    lsnrctl status command
    oracle_sid: the SID of your database
    </description>
    -->
    </init-param>
    <init-param>
    <param-name>routeserver_schema_username</param-name>
    <param-value>spatial</param-value>
    </init-param>
    <init-param>
    <param-name>routeserver_schema_password</param-name>
    <param-value>!spatial</param-value>
    </init-param>
    <init-param>
    <param-name>routeserver_network_name</param-name>
    <param-value>NDM_US</param-value>
    </init-param>
    <init-param>
    <param-name>routeserver_schema_connection_cache_min_limit</param-name>
    <param-value>3</param-value>
    </init-param>
    <init-param>
    <param-name>routeserver_schema_connection_cache_max_limit</param-name>
    <param-value>100</param-value>
    </init-param>
    <!-- Geocoder parameters -->
    <init-param>
    <param-name>geocoder_type</param-name>
    <param-value>httpclient</param-value>
    <!--
    <description>
    httpclient - interacts with geocoder Java Servlet
    thinclient - interacts with geocoder in Oracle Database
    none - no geocoder provided
    </description>
    -->
    </init-param>
    <init-param>
    <param-name>geocoder_match_mode</param-name>
    <param-value>DEFAULT</param-value>
    </init-param>
    <!-- These parameters are used if geocoder_type is httpclient -->
    <init-param>
    <param-name>geocoder_http_url</param-name>
    <param-value>http://127.0.0.1:7001/geocoder</param-value>
    </init-param>
    <init-param>
    <param-name>geocoder_http_proxy_host</param-name>
    <param-value></param-value>
    </init-param>
    <init-param>
    <param-name>geocoder_http_proxy_port</param-name>
    <param-value>-1</param-value>
    </init-param>
    <!-- These parameters are used if geocoder_type is thinclient -->
    <!--
    <init-param>
    <param-name>geocoder_schema_host</param-name>
    <param-value>sa2apsp-spatialdev.sa2apsp.com</param-value>
    </init-param>
    <init-param>
    <param-name>geocoder_schema_port</param-name>
    <param-value>1521</param-value>
    </init-param>
    <init-param>
    <param-name>geocoder_schema_sid</param-name>
    <param-value>SPATLDB</param-value>
    </init-param>
    <init-param>
    <param-name>geocoder_schema_username</param-name>
    <param-value>spatial</param-value>
    </init-param>
    <init-param>
    <param-name>geocoder_schema_password</param-name>
    <param-value>spatial</param-value>
    </init-param>
    <init-param>
    <param-name>geocoder_schema_mode</param-name>
    <param-value>thin</param-value>
    <description>
    thin, oci8, etc
    </description>
    </init-param>
    -->
    <!-- RouteServer Logging parameters -->
    <init-param>
    <param-name>log_filename</param-name>
    <param-value>/u01/app/routeserver/routeserver.ear/web.war/log/RouteServer.log</param-value>
    <!--
    <description>
    Create a log file for the Router.
    The log file can be specified as a relative path log/RouteServer.log
    This creates a log file relative to the Router install.
    In OC4j the log file created would be
    $OC4J_HOME/j2ee/home/applications/routeserver/web/log/RouteServer.log
    The log file can also be specified as an absolute path:
    /scratch/logfiles/router/Router.log
    If the <param-value></param-value> is left empty the Router
    creates a default log file:
    $OC4J_HOME/j2ee/home/applications/routeserver/web/log/RouteServer.log
    </description>
    -->
    </init-param>
    <init-param>
    <param-name>log_level</param-name>
    <param-value>INFO</param-value>
    <!--
    <description>
    What information should be written to log file?
    FATAL - highest level: only FATAL messages are logged
    ERROR - error and fatal messages are logged
    WARN - warn, error, and fatal messages are logged
    INFO - info, warn, error, and fatal messages are logged
    DEBUG - debug, info, warn, error, and fatal messages are logged
    FINEST - lowest level: everything is logged
    </description>
    -->
    </init-param>
    <init-param>
    <param-name>log_thread_name</param-name>
    <param-value>true</param-value>
    <!--
    <description>
    Whether or not to log the thread name which
    makes the log entry - (true or false).
    </description>
    -->
    </init-param>
    <init-param>
    <param-name>log_time</param-name>
    <param-value>true</param-value>
    <!--
    <description>
    Whether or not to log the time of day along
    with the log entry - (true or false).
    </description>
    -->
    </init-param>
    <!-- Road description parameters -->
    <init-param>
    <param-name>max_speed_limit</param-name>
    <param-value>34</param-value>
    <!--
    <description>
    Maximum speed limit of any road segment.
    In meters per second. Should be A
    POSITIVE INTEGER SMALLER THAN 32767.
    </description>
    -->
    </init-param>
    <init-param>
    <param-name>local_road_threshold</param-name>
    <param-value>25</param-value>
    <!--
    <description>
    If the estimated distance between source and destination nodes is
    less than this value, in miles, then keep local roads a viable
    option. This is done as an optimization for short routes.
    Increasing this value beyond the 25 mile default may generate more
    accurate routes using local roads but can also decrease the Routers
    performance by increasing size of the soluion set to be searched.
    Decreasing this value, the minimum allowed value is 10, can increase
    Router performance by decreasing the size of the solution set to be
    searched. However, this may cause the Router to abandon viable local
    routes and produce nonoptimal short routes.
    </description>
    -->
    </init-param>
    <init-param>
    <param-name>highway_cost_multiplier</param-name>
    <param-value>1.5</param-value>
    <!--
    <description>
    This is the amount by which to make
    highways less attractive when computing
    routes with route_preference="local".
    1.5 is a good value.
    </description>
    -->
    </init-param>
    <init-param>
    <param-name>driving_side</param-name>
    <param-value>R</param-value>
    <!--
    <description>
    Side of the road on which drivers drive.
    R for right side and L for left side.
    </description>
    -->
    </init-param>
    <init-param>
    <param-name>language</param-name>
    <param-value>English</param-value>
    <!--
    <description>
         Language to use to give driving directions.
    </description>
    -->
    </init-param>
    <init-param>
    <param-name>long_ids</param-name>
    <param-value>true</param-value>
    <!--
    <description>
    If true edge and node ids are Java long datatype (8 bytes)
    otherwise they are Java integers (4 bytes)
    </description>
    -->
    </init-param>
    <init-param>
    <param-name>distance_function_type</param-name>
    <param-value>geodetic</param-value>
    <!--
    <description>
    geodetic - Use the distance function for
    geodetic coordinate systems (e.g. SRID 8307).
    euclidean - Use the distance function for
    projected coordinate systems.
    </description>
    -->
    </init-param>
    <!-- Partitioning parameters -->
    <init-param>
    <param-name>partition_cache_size_limit</param-name>
    <param-value>125</param-value>
    <!--
    <description>
    The network partition cache can hold at
    most this many number of partitions.
    Set this based on how much memory you have.
    If partitions are already in the cache, the
    RouteServer will not have to load them from the
    database.
    WARNING: if you set this too high, you will
    run into a OutOfMemoryError.
    </description>
    -->
    </init-param>
    <init-param>
    <param-name>partition_table_name</param-name>
    <param-value>partition</param-value>
    <!--
    <description>
    Name of the partition table that contains the
    network partitions. The table is presumed
    to be contained in the schema described by
    routeserver_schema_jdbc_connect_string,
    routeserver_schema_username,
    and routeserver_schema_password parameters
    described above.
    </description>
    -->
    </init-param>
    </servlet>
    <servlet-mapping>
    <servlet-name>RouteServerServlet</servlet-name>
    <url-pattern>/routeserver</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
    <servlet-name>RouteServerServlet</servlet-name>
    <url-pattern>/servlet/RouteServerServlet</url-pattern>
    </servlet-mapping>
    <!-- Security parameters -->
    <security-constraint>
    <web-resource-collection>
    <web-resource-name>AdminPage</web-resource-name>
    <url-pattern>/admin.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint>
    <role-name>rs_admin_role</role-name>
    </auth-constraint>
    </security-constraint>
    <login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>Oracle RouteServer Administration</realm-name>
    </login-config>
    <security-role>
    <description>To perform RouteServer administration.</description>
    <role-name>rs_admin_role</role-name>
    </security-role>
    </web-app>

  • Oracle Spatial book sample application

    Hi all,
    On Monday I received the Oracle Spatial book and I would like to post a topic about it. First of all I would like to congratulate the authors for their huge effort doing this excellent book. I think it will be very useful to the people that works with Spatial.
    Next, my question is about the sample application showed in chapter 12 (SampleApplication.jsp). I run correctly mapviewer in my server and I can do the other examples, nevertheless when I want to start this application I recieve this error message about 'jdbc/spatial10g not found' in my web browser:
    500 Internal Server Error
    javax.naming.NameNotFoundException: jdbc/spatial10g not found
         at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.rmi.RMIContext.lookup(RMIContext.java:149)
         at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.ApplicationContext.lookup(ApplicationContext.java:248)
         at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.ApplicationContext.lookup(ApplicationContext.java:119)
         at javax.naming.InitialContext.lookup(InitialContext.java:347)
         at spatial2d_book._sample_2d_app._SampleApplication._jspService(_SampleApplication.java:264)
         [SRC:/spatial-book/sample-app/SampleApplication.jsp:248]
         at com.orionserver[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].http.OrionHttpJspPage.service(OrionHttpJspPage.java:56)
         at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:349)
         at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:509)
         at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:413)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
         at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:765)
         at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:317)
         at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:790)
         at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpRequestHandler.run(HttpRequestHandler.java:270)
         at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
         at com.evermind[Oracle Application Server Containers for J2EE 10g (9.0.4.0.0)].util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
         at java.lang.Thread.run(Thread.java:534)
    I am using Java 2 Runtime Environment version 1.4.2_02 and I think I have correctly configured the shared libraries in the oc4j server (sdoapi.jar, sdonm.jar, ojdbc14.jar, etc.). Anyway, I think I will be missing something but I don't know what.
    I would be very grateful if somebody could help me.
    Juan M.

    Hi Juan
    Thanks for purchasing our book, and thanks also for the kind words.
    I think I know what that problem is.
    The application uses the network API. That API needs a database connection for the initial loading of the network. The connection used is provided by OC4J. This is done in the following code lines in the SampleApplication.jsp:
    // Get JDBC database connection
    InitialContext ic = new InitialContext();
    DataSource ds = (DataSource) ic.lookup("jdbc/"+dataSource.toLowerCase());
    Connection conn = ds.getConnection();
    // Load network
    net = NetworkManager.readNetwork(conn, networkName);
    In other words, for this to work, you need a datasource defined for OC4J, called "jdbc/spatial10g" (since dataSource is defined by default to be "SPATIAL10G".
    To define the datasource, refer to chapter 11, page 499, at the bottom of the page. You need to add the following to your data-sources.xml config file ($OC4J_HOME/j2ee/home/config/data-sources.xml):
    <data-source
    class="com.evermind.sql.DriverManagerDataSource"
    name="spatial10g"
    location="jdbc/spatial10gCore"
    xa-location="jdbc/xa/spatial10gXA"
    ejb-location="jdbc/spatial10g"
    connection-driver="oracle.jdbc.driver.OracleDriver"
    username="spatial"
    password="spatial"
    url="jdbc:oracle:thin:@localhost:1521:orcl101"
    inactivity-timeout="30"
    />
    (Adapt the url parameter to match your database definition)
    Thanks for pointing out this problem. We will update the errata page (http://www.apress.com/book/errataDisplay.html?bID=315&sID=2374) with clearer instructions.
    Albert Godfrind

  • 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,
    Patrick

    Patrick, 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

Maybe you are looking for