+ All Categories
Home > Documents > Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes...

Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes...

Date post: 12-Jul-2020
Category:
Upload: others
View: 2 times
Download: 0 times
Share this document with a friend
76
ESRI Developer Summit 2008 ESRI Developer Summit 2008 1 1 Thomas Brown Thomas Brown Brijesh Shrivastav Brijesh Shrivastav Kevin Watt Kevin Watt Working with the Geodatabase Effectively Using SQL
Transcript
Page 1: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

ESRI Developer Summit 2008ESRI Developer Summit 2008 11

Thomas BrownThomas BrownBrijesh ShrivastavBrijesh Shrivastav

Kevin WattKevin Watt

Working with the GeodatabaseEffectively Using SQL

Page 2: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Today’s schedule

• 75 minute session– 60 – 65 minute lecture– 10 – 15 minutes Q & A following the lecture

• Cell phones and pagers

• Please complete the session survey – we take your feedback very seriously!

Page 3: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

ESRI Developer Summit 2008ESRI Developer Summit 2008

Database Services:•SQL Processing•Type Extensibility •Transaction Management

Database Management Services

Geodatabase in a Multi-tiered Architecture

User Interface Geodatabase Services:

•Networks and topologies•Relationships•Validation rules•Object behavior•Edit sessions•Version reconciliation

Binary Schema Spatial Type

Application Services

ArcObjects

ArcSDE services

File data sources

Geodatabase

ArcSDE Services:•Simple feature access•Multi-versioned data access •SQL queries

End-User Application

Page 4: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Geodatabase geometry storage optionsStorage formats vary by DBMS platformArcGIS 9.2

– Oracle • SDEBINARY Relational• ST_GEOMETRY Object Relational• SDO_GEOMETRY Object Relational

– SQL Server 2005• SDEBINARY Relational

– DB2• ST_GEOMETRY Object Relational

– Informix• ST_GEOMETRY Object Relational

New with ArcGIS 9.3 – PostgreSQL

• ST_GEOMETRY Object Relational– SQL Server 2008

• SDEBINARY Relational• GEOGRAPHY Object Relational• GEOMETRY Object Relational

Page 5: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Why Use a Spatial Type?

Efficiency – Spatial data and methods are stored in the database– Spatial operations are encapsulated within the type– Applications access native dbms type – no mapping layer

Accessed using common API’s and SQL– C, C++, C#, Java, OLEDB– SQL extensions enable spatial types and methods in DML and

select statement syntax

Page 6: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

What is a Spatial Type

DBMS datatype and properties– Geometry type, coordinates, dimension, spatial reference

Spatial Index– Access path for quick retrieval

Operators and Functions– Constructors – Accessor– Relational – Geometry

Page 7: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Geometry Properties

• Geometry Type• Extent (MBR)• Characteristics

– Simple, Empty, Dimension

• Spatial Reference• Coordinates

Name TypeName Type-------------------------- --------------------ENTITY NUMBER(38)ENTITY NUMBER(38)NUMPTS NUMBER(38)NUMPTS NUMBER(38)MINX FLOAT(64)MINX FLOAT(64)MINY FLOAT(64)MINY FLOAT(64)MAXX FLOAT(64)MAXX FLOAT(64)MAXY FLOAT(64)MAXY FLOAT(64)AREA FLOAT(64)AREA FLOAT(64)LEN FLOAT(64)LEN FLOAT(64)SRID NUMBER(38)SRID NUMBER(38)POINTS BLOBPOINTS BLOB

Page 8: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Spatial Index

Rtree or Grid, Grid-Tessellating

Modeled as separate table or dbms index

Associated to geometry type and operators

Enabled to the optimizer using statistics

Page 9: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Operators and Functions

Constructors - Builds a new instance of the type– Can be overloaded

– Derived Subtypes can construct Supertype

ST_POINT (X, Y, SRID)

ST_POINT (X, Y, Z, M, SRID)

ST_POINT (“X Y”, SRID)

ST_POINT (X, Y, SRID)

ST_POINT (X, Y, Z, M, SRID)

ST_POINT (“X Y”, SRID)

CREATE TABLE POINT_S (shape ST_GEOMETRY);

INSERT INTO POINTS (ST_POINT(10,10,1));

CREATE TABLE POINT_S (shape ST_GEOMETRY);

INSERT INTO POINTS (ST_POINT(10,10,1));

Page 10: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Operators and Functions

“A geometry’s internal representation is different from an applications external format to improve performance and storage efficiency”

Accessor functions convert geometry data stored in internal format to an external application format

Page 11: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Operators and Functions

Accessor– Well-Known Text

INSERT INTO POLYGON VALUES (ST_POLYGON(‘polygon((10 10,50 10,50 50,10 50,10 10))’,1));

SELECT ST_ASTEXT(A.SHAPE) FROM POINTS;

ST_ASTEXT(SHAPE)

---------------------------------------

POLYGON ((10.0 10.0, 50.0 10.0, 50.0 50.0, 10.0

50.0, 10.0 10.0))

INSERT INTO POLYGON VALUES (ST_POLYGON(‘polygon((10 10,50 10,50 50,10 50,10 10))’,1));

SELECT ST_ASTEXT(A.SHAPE) FROM POINTS;

ST_ASTEXT(SHAPE)

---------------------------------------

POLYGON ((10.0 10.0, 50.0 10.0, 50.0 50.0, 10.0

50.0, 10.0 10.0))

Page 12: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Operators and Functions

Accessor– Well-Known Binary

SELECT

ST_ASTEXT(ST_GEOMFROMWKB(ST_ASBINARY(SHAPE),1))

FROM POLYGON

ST_ASTEXT(ST_GEOMFROMWKB(ST_ASBINARY(SHAPE),0))

---------------------------------------

POLYGON ((10.0 10.0, 50.0 10.0, 50.0 50.0, 10.0

50.0, 10.0 10.0))

SELECT

ST_ASTEXT(ST_GEOMFROMWKB(ST_ASBINARY(SHAPE),1))

FROM POLYGON

ST_ASTEXT(ST_GEOMFROMWKB(ST_ASBINARY(SHAPE),0))

---------------------------------------

POLYGON ((10.0 10.0, 50.0 10.0, 50.0 50.0, 10.0

50.0, 10.0 10.0))

Page 13: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Relational operators

• Tests the spatial relationship between two geometry objects– Input (GEOMETRY_A, GEOMETRY_B)– Returns TRUE / 1 OR FALSE / 0

• Examples– ST_INTERSECTS– ST_TOUCHES– ST_CONTAINS

Page 14: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

• ST_TOUCHES (Geometry_A, Geometry_B) = 0 or 1

Relational operators

Point / Line

Point / Polygon

Line / Line

Line / Polygon

Polygon / Polygon

Page 15: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Geometry operators

• Builds a new geometry object from one or more existing geometry objects– Input: (GEOMETRY_A, ARGS…)– Returns: (GEOMETRY)

• Examples– ST_BUFFER,– ST_UNION– ST_DIFFERENCE

Page 16: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Geometry operators

• ST_Difference (geom1,geom2)

• ST_Union (geom1,geom2)

Page 17: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

ESRI Developer Summit 2008ESRI Developer Summit 2008 1717

Working with PostgreSQLSpatial Types

Page 18: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

What is PostgreSQL?What is PostgreSQL?

–– Open Source RDBMSOpen Source RDBMS

–– Conforms to SQL 92/99 standardsConforms to SQL 92/99 standards

–– Includes complex database featuresIncludes complex database features(Inheritance, stored procedures, UDT, views, extensible index (Inheritance, stored procedures, UDT, views, extensible index framework, etc.) framework, etc.)

ArcGIS Server Enterprise 9.3 includesArcGIS Server Enterprise 9.3 includes

–– ArcSdeArcSde for PostgreSQL (installs PostgreSQL for PostgreSQL (installs PostgreSQL rdbmsrdbms))

–– Support for SQL Spatial typesSupport for SQL Spatial types

Page 19: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Spatial types in PostgreSQLSpatial types in PostgreSQL

•• Two spatial typesTwo spatial types– ST_GEOMETRY (ESRI)(ESRI)– GEOMETRY (Open source project (Open source project -- POSTGIS)POSTGIS)

•• Both are OGC/ISO compliantBoth are OGC/ISO compliant–– support standard constructor, support standard constructor, accessoraccessor, analytical functions, analytical functions

•• Full Full geodatabasegeodatabase functionality supported on both functionality supported on both spatial typesspatial types–– geometric networks, topology, versioning, archiving, replicationgeometric networks, topology, versioning, archiving, replication

etc.etc.

•• Both types provide spatial index functionalityBoth types provide spatial index functionality

Page 20: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

What is different between the two spatial types?What is different between the two spatial types?

Developer Summit 2008Developer Summit 2008 2020

GEOMETRYGEOMETRY

• Resides under ‘public’ schema

• Only available in PostgreSQL

• Not supported

• Stored as Well Known Binary

ST_GEOMETRYST_GEOMETRY

• Resides under ‘sde’ schema

• Consistent implementation across databases (Oracle, Informix, DB2, PostgreSQL)

• Supports parametric curves, surfaces, and point-id

• Stored as compressed shape (less data transfer over network and no conversion required in geodatabase)

Page 21: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

• Default geodatabase spatial type– GEOMETRY_STORAGE parameter value defines the storage type– ‘ST_GEOMETRY’ or ‘PG_GEOMETRY’

• Superclass st_geometry implemented as a UDT• Subtype (st_point, st_linestring, st_polygon, st_multipoint…)

created as a domain type

• Spatial Index– Uses GiST indexing framework– Implements Rtree indexing strategy

St_geometry

CREATE DOMAIN sde.st_point AS sde.st_geometryCONSTRAINT st_point_checkCHECK ((point_constraint(VALUE) = true));

CREATE DOMAIN sde.st_point AS sde.st_geometryCONSTRAINT st_point_checkCHECK ((point_constraint(VALUE) = true));

Page 22: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with spatial data in PostgreSQLWorking with spatial data in PostgreSQL

Developer Summit 2008Developer Summit 2008 2222

•• Creating a table with a spatial attribute Creating a table with a spatial attribute

// ST_GEOMETRY typeCREATE TABLE john.blocks_st(objectid INTEGER NOT NULL, block VARCHAR(24), shape st_geometry);

// POSTGIS GEOMETRY – Add spatial column duringregistrationCREATE TABLE john.blocks_pg(objectid INTEGER NOT NULL, block VARCHAR(24));

// ST_GEOMETRY typeCREATE TABLE john.blocks_st(objectid INTEGER NOT NULL, block VARCHAR(24), shape st_geometry);

// POSTGIS GEOMETRY – Add spatial column duringregistrationCREATE TABLE john.blocks_pg(objectid INTEGER NOT NULL, block VARCHAR(24));

Page 23: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with spatial data in PostgreSQLWorking with spatial data in PostgreSQL

•• Registering spatial attributesRegistering spatial attributes

// With SQL, ST_GEOMETRY typeSELECT sde.st_register_spatial_column (‘john’, ‘blocks_st’, ‘shape’, ‘mycitydb’, 4);

// PostGIS GEOMETRY typeSELECT public.Addgeometrycolumn (‘john’, ’blocks_pg’, ’shape’, -1, ’POLYGON’, 2);

// Geodatabasesdelayer -o register -l blocks_st,shape -e a -C objectid,SDE -t ST_GEOMETRY -i esri_sde-D mycitydb -u john -p super

// With SQL, ST_GEOMETRY typeSELECT sde.st_register_spatial_column (‘john’, ‘blocks_st’, ‘shape’, ‘mycitydb’, 4);

// PostGIS GEOMETRY typeSELECT public.Addgeometrycolumn (‘john’, ’blocks_pg’, ’shape’, -1, ’POLYGON’, 2);

// Geodatabasesdelayer -o register -l blocks_st,shape -e a -C objectid,SDE -t ST_GEOMETRY -i esri_sde-D mycitydb -u john -p super

Page 24: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with spatial data in PostgreSQL

Developer Summit 2007Developer Summit 2007 2424

• Inserting a row with a spatial attribute

• Creating the spatial index

INSERT INTO john.blocks_st VALUES (1,‘block', st_geometry('polygon((52 28,58 28,58 23,52 23, 52 28))',1));

INSERT INTO john.blocks_st VALUES (2,‘block', st_geometry('polygon ((12 28,18 28,18 23,12 23,12 28))',1));

INSERT INTO john.blocks_st VALUES (1,‘block', st_geometry('polygon((52 28,58 28,58 23,52 23, 52 28))',1));

INSERT INTO john.blocks_st VALUES (2,‘block', st_geometry('polygon ((12 28,18 28,18 23,12 23,12 28))',1));

CREATE INDEX blockssp_idx ON blocks_stUSING gist(shape st_geometry_ops); // ST_GEOMETRY TYPE

CREATE INDEX blockssp_idx ON blocks_stUSING gist(shape gist_geometry_ops); // GEOMETRY TYPE

CREATE INDEX blockssp_idx ON blocks_stUSING gist(shape st_geometry_ops); // ST_GEOMETRY TYPE

CREATE INDEX blockssp_idx ON blocks_stUSING gist(shape gist_geometry_ops); // GEOMETRY TYPE

Page 25: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with spatial data in PostgreSQLWorking with spatial data in PostgreSQL

Developer Summit 2007Developer Summit 2007 2525

• Querying spatial attributes

SELECT st.objectid, st_astext(shape)

FROM map.blocks_st st

WHERE st_astext(sde.st_intersection

(sde.st_geometry('polygon ((52 28,58 28,58 23,

52 23,52 8))’ ,1),st.shape))::text

NOT LIKE '%EMPTY%';

OBJECTID SHAPE_WKT-------- -------------------------------------------1 POLYGON ((2217028.84 399516.70, 2217028.84

399507.82, 2217039.12 399507.82, 2217039.12399516.70, 2217028.84 399516.70))

SELECT st.objectid, st_astext(shape)

FROM map.blocks_st st

WHERE st_astext(sde.st_intersection

(sde.st_geometry('polygon ((52 28,58 28,58 23,

52 23,52 8))’ ,1),st.shape))::text

NOT LIKE '%EMPTY%';

OBJECTID SHAPE_WKT-------- -------------------------------------------1 POLYGON ((2217028.84 399516.70, 2217028.84

399507.82, 2217039.12 399507.82, 2217039.12399516.70, 2217028.84 399516.70))

Page 26: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

ESRI Developer Summit 2008ESRI Developer Summit 2008 2626

Working with SQL Server 2008Spatial Types

Page 27: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Developer Summit 2008Developer Summit 2008 2727

Spatial data in SQL Server 2008

• Microsoft introduces two new Spatial data typesGEOMETRY– XY coordinates on arbitrary plane– Supports geographic and projected coordinate systems– OGC compliant

GEOGRAPHY– Latitude, longitude (ellipsoidal) coordinates– Supports only geographic coordinate system

Spatial reference must match SQL Server-supported EPSG codes defined in sys.spatial_reference_systems

• Implemented as .NET CLR (UDT) data type• Available in all 2008 editions except CE

Page 28: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Spatial data in SQL Server 2008Spatial data in SQL Server 2008

Developer Summit 2008Developer Summit 2008 2828

• Spatial Index– Grid index with 4-level grid hierarchy– Multiple spatial indexes can be built on a spatial column– geodatabase will create one index per spatial attribute using layer

extent and values specified by B_MS_SPINDEX and A_MS_SPINDEX parameters within the dbtune

• Storage type in geodatabase determined by GEOMETRY_STORAGE parameter value

– Specify ‘GEOMETRY’ or ‘GEOGRAPHY’ value to create the appropriate spatial type

Page 29: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with spatial data in SQL Server 2008Working with spatial data in SQL Server 2008

Developer Summit 2007Developer Summit 2007 2929

•• Creating a table with a spatial attributeCreating a table with a spatial attribute

• Adding a primary key index

CREATE TABLE world_rivers

(id INT IDENTITY (1,1),

geography_col geography); -- Geography type

CREATE TABLE parcels

(id INT IDENTITY (1,1),

geometry_col geometry); -- Geometry type

CREATE TABLE world_rivers

(id INT IDENTITY (1,1),

geography_col geography); -- Geography type

CREATE TABLE parcels

(id INT IDENTITY (1,1),

geometry_col geometry); -- Geometry type

ALTER TABLE world_rivers ADD CONSTRAINT wc_pk

PRIMARY KEY CLUSTERED (id); -- Geography type

ALTER TABLE parcels… -- Geometry type

ALTER TABLE world_rivers ADD CONSTRAINT wc_pk

PRIMARY KEY CLUSTERED (id); -- Geography type

ALTER TABLE parcels… -- Geometry type

Page 30: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with spatial data in SQL Server 2008Working with spatial data in SQL Server 2008

Developer Summit 2007Developer Summit 2007 3030

• Inserting a row with a spatial attribute

INSERT INTO world_rivers (geography_col) VALUES

(geography::STGeomFromText('LINESTRING(47.66 -122.30,

47.65 -122.33)',4326));

INSERT INTO parcels (geometry_col) VALUES

(geometry::STGeomFromText('POLYGON((47.653 -122.35,

47.64 -122.38,47.68 -122.34,47.658 -122.358,

47.653 -122.358))',4326));

INSERT INTO world_rivers (geography_col) VALUES

(geography::STGeomFromText('LINESTRING(47.66 -122.30,

47.65 -122.33)',4326));

INSERT INTO parcels (geometry_col) VALUES

(geometry::STGeomFromText('POLYGON((47.653 -122.35,

47.64 -122.38,47.68 -122.34,47.658 -122.358,

47.653 -122.358))',4326));

Page 31: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with spatial data in SQL Server 2008Working with spatial data in SQL Server 2008

• Creating a spatial index

CREATE SPATIAL INDEX spidx_geography

ON world_rivers (geography_col)

USING GEOMETRY_GRID WITH

(GRIDS = (LOW, LOW, MEDIUM, HIGH),

CELLS_PER_OBJECT = 64); -- Geography type

CREATE SPATIAL INDEX spidx_geography

ON parcels (geography_col)

USING GEOMETRY_GRID WITH

BOUNDING_BOX = (0, 0, 500, 200),

(GRIDS = (LOW, LOW, MEDIUM, HIGH),

CELLS_PER_OBJECT = 64); -- Geometry type

CREATE SPATIAL INDEX spidx_geography

ON world_rivers (geography_col)

USING GEOMETRY_GRID WITH

(GRIDS = (LOW, LOW, MEDIUM, HIGH),

CELLS_PER_OBJECT = 64); -- Geography type

CREATE SPATIAL INDEX spidx_geography

ON parcels (geography_col)

USING GEOMETRY_GRID WITH

BOUNDING_BOX = (0, 0, 500, 200),

(GRIDS = (LOW, LOW, MEDIUM, HIGH),

CELLS_PER_OBJECT = 64); -- Geometry type

Page 32: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with spatial data in SQL Server 2008Working with spatial data in SQL Server 2008

• Querying spatial attributes

DECLARE @geom1 geometry;

SELECT @geom1 =

geometry::STGeomFromWKB(geography_col.STAsBinary(),4326)

FROM world_rivers

WHERE id = 1;

SELECT id, (@geom1.stintersection(geometry_col)).stastext() geometry_col

FROM parcels;

id geometry_col-- -----------------1 LINESTRING (47.65 -122.34, 47.65 -122.35)

DECLARE @geom1 geometry;

SELECT @geom1 =

geometry::STGeomFromWKB(geography_col.STAsBinary(),4326)

FROM world_rivers

WHERE id = 1;

SELECT id, (@geom1.stintersection(geometry_col)).stastext() geometry_col

FROM parcels;

id geometry_col-- -----------------1 LINESTRING (47.65 -122.34, 47.65 -122.35)

Page 33: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Spatial data in SQL Server 2008Spatial data in SQL Server 2008

Developer Summit 2008Developer Summit 2008 3333

•• Tables with spatial attributes must be registered with Tables with spatial attributes must be registered with the the geodatabasegeodatabase

sdelayer –o register –l blocks,shape –e a –C objectid,sde-t GEOGRAPHY –i esri_sde –D mycitydb

sdelayer –o register –l blocks,shape –e a –C objectid,sde-t GEOGRAPHY –i esri_sde –D mycitydb

Page 34: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Using SQL with the Geodatabase

Page 35: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Editing ArcGIS feature classes with SQL

• Edit simple features only– Points, lines, polygons (single or multipart)– Without geodatabase behavior

• Not part of topology, geometric network

• Editing non-versioned feature classes– Applies directly to business table (no delta tables)

• Editing versioned feature classes requires a defined workflow

Page 36: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Editing non-versioned feature classes

• Requires a unique identifier (objectid) when inserting– Obtained from classes sequence or procedure

• Can leverage DBMS functionality– Unique indexes, constraints, referential integrity, default values,

triggers

Page 37: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Editing Versioned feature classes

• Use SQL to access multiversioned views– Ability to modify geometry when stored as a spatial type– Documentation is located within ArcGIS Desktop Help

• Recommended workflow– Create multiversioned views– Create a new version– Perform edits within the new version– Use ArcMap to reconcile/post to its parent version

Page 38: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with multiversioned views

• For non-ESRI applications which require SQL access to versioned tables– Ability to access any version– View derives a result set based on a version query– Procedures provided with SDE installation

• SDE administration command for creating the view

sdetable –o create_mv_view –T <view_name> -t <table_name>[-i <service>] [-s <server_name>] [-D <database>] –u <DB_User_name> [-p <DB_User_password>] [-N] [-q]

sdetable –o create_mv_view –T parcels_mv –t parcels –i 5151–s alex –u tomb -N

sdetable –o create_mv_view –T <view_name> -t <table_name>[-i <service>] [-s <server_name>] [-D <database>] –u <DB_User_name> [-p <DB_User_password>] [-N] [-q]

sdetable –o create_mv_view –T parcels_mv –t parcels –i 5151–s alex –u tomb -N

Page 39: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with multiversioned views

• DBMS procedure for setting the version for the view to reference

//Oracle

SQL> exec sde.version_util.set_current_version (‘tomb.PROPOSED_SUBDIVISION’);

SQL> SELECT owner, parcel_id FROM parcel_mvWHERE st_envintersects(shape, 5,5,10,10) = 1;

//SQL*Server

exec sde.set_current_version (‘tomb.PROPOSED_SUBDIVISION’)or

exec dbo.set_current_version (‘tomb.PROPOSED_SUBDIVISION’)

//DB2

call setcurrentversion (‘tomb.PROPOSED_SUBDIVISION’)

//Oracle

SQL> exec sde.version_util.set_current_version (‘tomb.PROPOSED_SUBDIVISION’);

SQL> SELECT owner, parcel_id FROM parcel_mvWHERE st_envintersects(shape, 5,5,10,10) = 1;

//SQL*Server

exec sde.set_current_version (‘tomb.PROPOSED_SUBDIVISION’)or

exec dbo.set_current_version (‘tomb.PROPOSED_SUBDIVISION’)

//DB2

call setcurrentversion (‘tomb.PROPOSED_SUBDIVISION’)

Page 40: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with multiversioned views

• DBMS procedures for editing a versioned geodatabase and multiversioned views

//Oracle

SQL> exec sde.version_user_ddl.edit_version (‘tomb.PROPOSED_SUBDIVISION’, 1);

SQL> UPDATE parcel_mv SET owner = ‘Ethan Thomas’WHERE parcel_id = ‘322-2002-001’ AND st_intersects(shape,st_geom) = 1;

SQL> COMMIT;

SQL> exec sde.version_user_ddl.edit_version (‘tomb.PROPOSED_SUBDIVISION’, 2);

//SQL*Server

exec sde.edit_version (‘tomb.PROPOSED_SUBDIVISION’, 1)exec dbo.edit_version (‘tomb.PROPOSED_SUBDIVISION’, 2)

//Oracle

SQL> exec sde.version_user_ddl.edit_version (‘tomb.PROPOSED_SUBDIVISION’, 1);

SQL> UPDATE parcel_mv SET owner = ‘Ethan Thomas’WHERE parcel_id = ‘322-2002-001’ AND st_intersects(shape,st_geom) = 1;

SQL> COMMIT;

SQL> exec sde.version_user_ddl.edit_version (‘tomb.PROPOSED_SUBDIVISION’, 2);

//SQL*Server

exec sde.edit_version (‘tomb.PROPOSED_SUBDIVISION’, 1)exec dbo.edit_version (‘tomb.PROPOSED_SUBDIVISION’, 2)

Page 41: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with multiversioned views

• DBMS procedures for obtaining unique identifiers

//Oracle

SQL> SELECT registration_id FROM sde.table_registryWHERE owner = ‘TOMB’ AND table_name = ‘PARCELS’;

SQL> SELECT sde.version_user_ddl.next_row_id(‘TOMB’, 114) FROM dual;

//SQL*Server

SELECT registration_id FROM sde.sde_table_registryWHERE owner = ‘TOMB’ AND table_name = ‘PARCELS’

DECLARE @id AS INTEGERDECLARE @num_ids AS INTEGERexec sde.i114_get_ids 2, 1, @id OUTPUT, @num_ids OUTPUT

//Oracle

SQL> SELECT registration_id FROM sde.table_registryWHERE owner = ‘TOMB’ AND table_name = ‘PARCELS’;

SQL> SELECT sde.version_user_ddl.next_row_id(‘TOMB’, 114) FROM dual;

//SQL*Server

SELECT registration_id FROM sde.sde_table_registryWHERE owner = ‘TOMB’ AND table_name = ‘PARCELS’

DECLARE @id AS INTEGERDECLARE @num_ids AS INTEGERexec sde.i114_get_ids 2, 1, @id OUTPUT, @num_ids OUTPUT

Page 42: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Rules when working with multiversioned views

• Do not update the objectid (row_id) value

• Do not modify geometries for classes participating in topologies or geometric networks– Will not create dirty areas or be validated– Will not maintain connectivity in the logical network

• Do not update attributes which define geodatabase behavior– Enabled/Disabled attributes– Ancillary attributes– Weight attributes– Subtypes

Page 43: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Spatial views

• Spatial views are stored as any other view -- in the database

• Views can be created with sdetable or created in the database and registered with ArcGIS

Page 44: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Registration

• Registration informs the geodatabase of tables or views containing spatial attributes created outside ArcGIS

• Registration writes information about these tables and the spatial attribute into the geodatabase system tables so ArcGIS can access them properly– Description of the table’s attributes– Type of features in the spatial attribute– Spatial reference information

Page 45: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with st_geometry for Oracle

Page 46: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Migration options for moving towards a spatial type

• ArcGIS 9.3 default storage with Oracle becomes st_geometry

• Geoprocessing tool for converting non-versioned and versioned layers in place

Page 47: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Oracle Export/Import with st_geometry and spatial indexes

• ArcGIS 9.2 - SP4– Spatial reference must exist in the “import” instance (and have the

same srid value)– If the spatial index imported will be invalid and must be re-created

• ArcGIS 9.2 SP5– Spatial reference imported and st_geometry updated allowing the

spatial index to be created correctly

• ArcGIS 9.3– Spatial index no longer exported, but created during the import

See Knowledge Base article: 34342

Page 48: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Oracle partitioning and st_geometry

• Supports range partitioning with global or local spatial indexes

• Service Pack 5 address two issues for supporting partitioned tables with st_geometry attributes

• ArcGIS 9.3 will provide further support for creating partitioned spatial indexes via the dbtune– Future development work for providing partitioned statistics

See Knowledge Base article: 34119

Page 49: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Index scans or Full table scans– Clustering

• Represents how well the table is clustered based on the indexed attribute

• For the rows where owner = ‘BROWN’– Are the rows stored in the same data block – Or are the rows dispersed among many data blocks

• When clustered, less i/o is required to retrieve the row

Page 50: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Example: Clustered table

Key Column Values

149

151

152

IndexLeaf Block

Data Block

Table Extent

Rows149151152

Page 51: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Example: Non-clustered table

Key Column Values

149

151

152

Row 149Row 151 Row 152

IndexLeaf Block

Data Block

Table Extent

Page 52: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Clustering applies to spatial attributes

• Very important when the majority of queries are spatial– Every map display…

• SDE administration command for non-versioned layers

• Able to use SQL to spatially cluster data

See Knowledge Base article: 32423See Knowledge Base article: 33341

sdeexport –o create –t <table_name> -f <export_file> [-i <service>] [-s <server_name>] [-D <database>] –u <DB_User_name> [-p <DB_User_password>] [-N] [-q]

sdeexport –o create –t <table_name> -f <export_file> [-i <service>] [-s <server_name>] [-D <database>] –u <DB_User_name> [-p <DB_User_password>] [-N] [-q]

Page 53: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

st_geometry synonyms

• Best practice when developing SQL applications is to fully qualify all objects

See Knowledge Base article: 34004

See Knowledge Base article: 34328

SELECT owner, sde.st_astext(shape) AS GEOMETRY

FROM tb.parcles

WHERE sde.st_envintersects(shape,10,10,20,20) = 1

SELECT owner, sde.st_astext(shape) AS GEOMETRY

FROM tb.parcles

WHERE sde.st_envintersects(shape,10,10,20,20) = 1

Page 54: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

st_geometry synonyms

Oracle 11g prohibits the creation of public synonyms named st_* (st_geometry, st_contains, st_relate…)

• ArcGIS 9.3 will no longer create public synonyms for types and operators for new installations– Application developers must fully qualify all references to types

and operators

• Upgrading from an ArcGIS 9.2 instance will not drop existing public synonyms– Application developers can continue to leverage existing public

synonyms

Page 55: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Power of aggregation

• New functionality with ArcGIS 9.3 for Oracle– st_union_all– st_intersection_all– st_convexhull_all

SELECT owner, sde.st_astext(

sde.st_union_all(shape)) AS GEOMETRY

FROM tb.centerlines

WHERE street_name = ‘CENTER ST’;

INSERT INTO lightning_areas SELECT oid.nextval,

sde.st_convexhull_all(shape)

FROM lightning_strikes

WHERE strike_date = TO_DATE(’03-15-08’,’MM-DD-YYYY');

SELECT owner, sde.st_astext(

sde.st_union_all(shape)) AS GEOMETRY

FROM tb.centerlines

WHERE street_name = ‘CENTER ST’;

INSERT INTO lightning_areas SELECT oid.nextval,

sde.st_convexhull_all(shape)

FROM lightning_strikes

WHERE strike_date = TO_DATE(’03-15-08’,’MM-DD-YYYY');

Page 56: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Indexing st_geometry properties

• Area and length are properties of the st_geometry type can be queried directly– Verses deriving the property from the geometry directly via an

operator

SELECT name, species, a.shape.area AS AREA

FROM forrest_stands a

WHERE a.shape.area > 100000

// Create the index…

CREATE INDEX forrest_area

ON forrest_stands (shape.area);

SELECT name, species, a.shape.area AS AREA

FROM forrest_stands a

WHERE a.shape.area > 100000

// Create the index…

CREATE INDEX forrest_area

ON forrest_stands (shape.area);

Page 57: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Working with relational operators

Page 58: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Relational operators

Difference between a.shape and b.shapeIs it… st_contains (a.shape, b.shape)

or st_contains (b.shape, a.shape)

• Review the operator definition

• Check join aliases (a table, b table)

• Impacts the optimizer and access path

• Test and know the results!

Page 59: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

st_relate

• Compares spatial relationship using Dimensionally Extended 9 Intersection Model (DE-9IM)

• Performs better than multiple (st_intersects,st_touches…) relational operators

• Not all matrix combinations will leverage the spatial index

Question:Question:““ I want to find all Census Blocks adjacent to a specific I want to find all Census Blocks adjacent to a specific Voting District that have a common linear boundaryVoting District that have a common linear boundary…”…”

Page 60: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

st_relate

ExteriorBoundaryInterior

***Exterior

**Boundary

**Interior

SHAPE BSHAPE B

SHAPE ASHAPE A

SELECT c.block_id, c.shape

FROM census_blocks c, voting_districts v

WHERE v.district = 1394

AND st_relate(c.shape,v.shape,’F***1****’) = 1

SELECT c.block_id, c.shape

FROM census_blocks c, voting_districts v

WHERE v.district = 1394

AND st_relate(c.shape,v.shape,’F***1****’) = 1

““Census Blocks and Voting Dist. interiors do not Intersect Census Blocks and Voting Dist. interiors do not Intersect ““FF”” but have a but have a common Linear common Linear ““11”” boundary boundary ““

0 Dim Point0 Dim Point

1 Dim Line1 Dim Line

2 dim Polygon2 dim Polygon

T T –– Intersection(0,1,2)Intersection(0,1,2)

F F –– No IntersectionNo Intersection

F1

Page 61: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

st_relate

• Results

SELECT c.block_id, c.shape

FROM census_blocks c, voting_districts v

WHERE v.district = 1394

AND st_relate(c.shape,v.shape,’F***1****’) = 1

SELECT c.block_id, c.shape

FROM census_blocks c, voting_districts v

WHERE v.district = 1394

AND st_relate(c.shape,v.shape,’F***1****’) = 1

Page 62: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

st_relate

• Caution: without a spatial filter st_envintersects, the st_relate proposition will result in a full table scan of census_blocks

SELECT c.block_id, c.shape

FROM census_blocks c, voting_districts v

WHERE v.district = 1394

AND st_relate(c.shape,v.shape,’F***1****’) = 1

AND st_envintersects(c.shape,st_envelope(v.shape)) = 1

SELECT c.block_id, c.shape

FROM census_blocks c, voting_districts v

WHERE v.district = 1394

AND st_relate(c.shape,v.shape,’F***1****’) = 1

AND st_envintersects(c.shape,st_envelope(v.shape)) = 1

Page 63: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

st_distance

• Is NOT a relational operator which leverages the spatial index

• It is a function for computing distance between two objects

Question:Question:““ Locate all wells within 5 miles from a given location Locate all wells within 5 miles from a given location and order the results based on the distanceand order the results based on the distance…… ””

Page 64: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

st_distance

• Inefficient approach…

– Results in a full table scan of wells, calculating the distance between each well and the input geometry to detect if the distance is less than 5 miles

SELECT name, volume, st_distance(shape,

st_point(125,350,3)) AS DISTANCE

FROM wells

WHERE st_distance(shape,st_point(125,350,3)) < 5

ORDER BY distance

SELECT name, volume, st_distance(shape,

st_point(125,350,3)) AS DISTANCE

FROM wells

WHERE st_distance(shape,st_point(125,350,3)) < 5

ORDER BY distance

Page 65: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

st_distance

• Efficient approach…

– Results in a full table scan of wells calculating the distance between each well and the input geometry to detect if the distance is less than 5 units

SELECT name, volume, st_distance(shape,

st_point(125,350,3)) AS DISTANCE

FROM wells

WHERE st_intersects(shape,

st_buffer(st_point(125,350,3),5)) = 1

ORDER BY distance

SELECT name, volume, st_distance(shape,

st_point(125,350,3)) AS DISTANCE

FROM wells

WHERE st_intersects(shape,

st_buffer(st_point(125,350,3),5)) = 1

ORDER BY distance

Page 66: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

How st_intersects and st_buffer interacts

• A very common access path for finding relationships between objects is to buffer an input shape and use the output as input to st_intersects

Question:Question:““ I want to discover all single family residential parcels with I want to discover all single family residential parcels with an appraisal value less than 125K and are within a an appraisal value less than 125K and are within a ½½ mile mile distance from a bus stopdistance from a bus stop…… ””

Page 67: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

How st_intersects and st_buffer interacts

• Efficient access path (but still expensive…)

– Initial access path is via a composite attribute index on appraisal and zoning returning each parcel’s shape as input to st_buffer, which is than input to st_intersects and busstops’ spatial index

– For each candidate two spatial operations

SELECT a.address, a.pin, st_distance(a.shape,b.shape)

FROM parcels a, busstops b

WHERE a.appraisal < 125000 AND a.zoning = ‘SFR’

AND st_intersects(b.shape,

st_buffer(a.shape,2640)) = 1

SELECT a.address, a.pin, st_distance(a.shape,b.shape)

FROM parcels a, busstops b

WHERE a.appraisal < 125000 AND a.zoning = ‘SFR’

AND st_intersects(b.shape,

st_buffer(a.shape,2640)) = 1

Page 68: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

How are geometries passed to operators…

• Step 1: Access path via the parcel’s composite index for the predicate filter to obtain the parcel geometry

WHERE a.appraisal < 125000 AND a.zoning = ‘SFR’WHERE a.appraisal < 125000 AND a.zoning = ‘SFR’

ROWID APPRAISAL ZONINGAADA… 45000 SFR

AABA… 52000 MPR

AACD… 79000 SFR

AABA… 59000 SFR

AACD… 79000 COM

AABC… 94000 SFR

AABC… 105000 COM

AABC… 122000 SFR

AABC… 130000 SFR

Index

ROWID OBJECTID … SHAPEAADA… 136072

AACD… 854211

AABA… 852018

AABC… 29375

AABC… 482190

Parcel’s table

Page 69: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

How are geometries passed to operators…

• Step 2: Each geometry is passed individually to the st_buffer operator

ROWID OBJECTID … SHAPEAADA… 136072

AACD… 854211

AABA… 852018

AABC… 29375

AABC… 482190

Parcel’s table

st_buffer(a.shape,2640)st_buffer(a.shape,2640)

Buffered Shape

Page 70: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

How are geometries passed to operators…

• Step 3: The buffered shape becomes the input to st_intersects

– Using the buffered shape’s envelope as the primary filter to search busstop’s spatial index

AND st_intersects(b.shape,

st_buffer(a.shape,2640)) = 1

AND st_intersects(b.shape,

st_buffer(a.shape,2640)) = 1

Page 71: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

How are geometries passed to operators…

• Step 4: The envelope is applied to the spatial index to detect all intersecting busstops

GY

GX60 61 62 63

94

95

96

97

AABAAABA……

AADAAADA……

AACDAACD……

AABCAABC……

SP_ID GX GY MINX MINY MAXX MAXYAADA… 62 97 26 34 28 38

AABA… 60 96 5 22 12 29

AACD… 62 95 28 14 32 18

AABA… 61 96 5 22 12 29

AACD… 62 95 28 14 32 18

AABC… 61 95 13 4 23 14

AABC… 62 95 13 4 23 14

AABC… 61 94 13 4 23 14

AABC… 62 94 13 4 32 14

Page 72: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

How are geometries passed to operators…

• Step 5: Each envelope intersecting busstops is passed to the st_intersects function to return their relation – (true or false)

Returns true, has relation Returns false, no relation

Page 73: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

st_buffer_intersects (Oracle st_geometry)

• ArcGIS 9.3 optimization reduces the number of individual calls to the shape engine– Allowing the request to be processed in one call…

– st_distance elapsed time: 00:14:28.47– st_intersects/st_buffer elapsed time: 00:00:52.21– st_buffer_intersects elapsed time: 00:00:17.89

SELECT a.address, a.pin, st_distance(a.shape,b.shape)

FROM parcels a, busstops b

WHERE a.appraisal < 125000 AND a.zoning = ‘SFR’

AND st_buffer_intersects(b.busstops,a.shape,2640) = 1

SELECT a.address, a.pin, st_distance(a.shape,b.shape)

FROM parcels a, busstops b

WHERE a.appraisal < 125000 AND a.zoning = ‘SFR’

AND st_buffer_intersects(b.busstops,a.shape,2640) = 1

Page 74: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

Additional geodatabase sessionsAdditional geodatabase sessions……

•• Other recommended sessionsOther recommended sessionsEffective Geodatabase Programming– Thursday 1:30 – 2:45Implementing Enterprise Applications with the Geodatabase– Wednesday 2:45 – 4:00 Distributed Geodatabase Development– Wednesday 4:30 – 5:45,– Thursday 8:30 – 9:45Developing with Rasters in ArcGIS– Thursday 8:30 – 9:45

ESRI Developer Summit 2008ESRI Developer Summit 2008 7474

Page 75: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

ConclusionConclusion……

•• All sessions are recorded and will be available on EDNAll sessions are recorded and will be available on EDN–– Slides and code will also be availableSlides and code will also be available

•• Please fill out session surveys!Please fill out session surveys!

•• Still have questions?Still have questions?1.1. Tech talk, Demo Theatres, Meet the TeamTech talk, Demo Theatres, Meet the Team2.2. ““Ask a DeveloperAsk a Developer”” link on web pagelink on web page

•• www.esri.com/devsummit/techquestionswww.esri.com/devsummit/techquestions

ESRI Developer Summit 2008ESRI Developer Summit 2008 7575

Page 76: Working with the Geodatabase Effectively Using SQL...–Conforms to SQL 92/99 standards –Includes complex database features (Inheritance, stored procedures, UDT, views, extensible

7676

Tech TalkTech TalkMapMap


Recommended