Oracle LiveLabs实验:Introduction to Oracle Spatial
本實驗介紹了適用于 Oracle Spatial功能。
此實驗申請地址在這里,時間為60分鐘。
此實驗的幫助見這里。
Oracle Spatial以前是單獨收費的數據庫選件,目前已包含在數據庫企業版中。
Introduction
關于 Oracle Spatial
Oracle 的使命是幫助人們以新的方式查看數據、發現洞察并釋放無限可能。 空間分析是關于理解基于地理關系的復雜交互——根據人員、資產和資源的位置來回答問題。 空間洞察力使您能夠提供更好的客戶服務、優化員工隊伍、定位零售和配送中心、評估銷售和營銷活動等。 借助 Oracle 的空間產品,開發人員、數據庫專業人員和分析師可以使用一整套空間數據管理、分析和可視化工具,將空間分析和映射集成到企業級數據管理基礎架構(Oracle 數據庫和 Oracle Exadata)上的應用程序中。
如下圖所示,Oracle 數據庫的空間特性為基本和高級空間數據類型提供了可擴展的高性能存儲、處理和分析。 還提供了一系列可部署的 Java EE 組件來支持常見的中間層服務。
更多信息,請訪問 https://oracle.com/goto/spatial
研討會概述
在本次研討會中,您將創建和配置空間數據并執行一些基本的空間查詢。 該方案涉及WAREHOUSES, BRANCHES,和 COASTAL_ZONE。 WAREHOUSES 和 BRANCHES 是點,COASTAL_ZONE 是多邊形。 您將創建和配置這些空間表,然后執行空間查詢以識別鄰近和包含的項目。
先決條件
- 本次研討會需要訪問 Oracle 數據庫和 SQL 客戶端(即 SQL Developer、SQL Developer Web、SQL*Plus),以創建示例數據。
- 不需要以前使用過 Oracle Spatial 的經驗。
致謝
本實驗的作者為David Lapp, 數據庫產品經理,以及Marion Smith。
實驗 1:配置自治數據庫
在OCI中創建,ATP或ADW都可以。很快,幾分鐘就好。
其實此實驗有一個Oracle普通的數據庫也是可以的
實驗 2:連接到 ADB 并運行您的第一個查詢
介紹
在本實驗中,您將使用 SQL 工作表探索數據庫實例隨附的示例數據集。約5分鐘。
本實驗使用 SQL 工作表,它是 Oracle 自治數據庫的數據庫操作基于 Web 的界面的功能之一。
本實驗將演示對 ADW 開箱即用提供的示例數據集的查詢。 ADW 提供 Oracle 銷售歷史示例模式和星型模式基準 (SSB) 數據集。 這些數據集分別位于 SH 和 SSB 模式中。但實際上這兩個模式都不會在實驗中使用到。
您將對 SSB 數據集運行基本查詢,該數據集是一個 1 TB 的數據集,其中包含一個包含大約 60 億行的事實表和多個維度表。
目標
- 了解如何使用 SQL Worksheet 連接到新的自治數據庫
- 了解 Star Schema Benchmark (SSB) 和 Sales History (SH) 樣本數據集
- 對 ADW 示例數據集運行查詢
任務 1:連接 SQL Worksheet
其實SQL Worksheet既可以用本地版的SQL Developer,也可以用云端Database Action中的SQL Developer Web版(Database Action>Development>SQL)。使用后者,可以免除配置接口的工作。
任務 2:在 SQL Worksheet 中運行腳本
運行以下SQL
select /* low */ c_city,c_region,count(*) from ssb.customer c_low group by c_region, c_city order by count(*);UNITED KI1 EUROPE 119082 UNITED ST4 AMERICA 119245 MOZAMBIQU2 AFRICA 119283 INDIA 2 ASIA 119380 ETHIOPIA 5 AFRICA 119393 ...如果可能,ADW 還會為您緩存查詢結果。 如果您多次運行相同的查詢,您會注意到緩存結果后的響應時間要短得多。
實驗 3:創建示例空間數據
本實驗將引導您完成在 Oracle 數據庫中創建示例空間數據的步驟。約10分鐘。
Oracle 數據庫原生數據類型 SDO_GEOMETRY存儲空間數據(點、線、多邊形)。 Oracle 數據庫還為高性能空間操作提供原生空間索引。 此空間索引依賴于為存儲空間數據的每個表和幾何列輸入的空間元數據。 一旦空間數據被發布和索引,強大的 API 就可以用于執行空間分析、計算和處理。
SDO_GEOMETRY 類型具有以下格式:
SDO_GEOMETRY( [geometry type], --ID for point/line/polygon[coordinate system], --ID of coordinate system[point coordinate], --for points only[line/polygon info], --for lines/polygons only[line/polygon coordinates] --for lines/polygons only)最常見的幾何類型是二維的:
| 2001 | Point |
| 2002 | Line |
| 2003 | Polygon |
最常見的坐標系是:
| 4326 | Latitude/Longitude (經緯度) |
| 3857 | World Mercator(世界墨卡托) |
使用緯度/經度時,請注意緯度是 Y 坐標,經度是 X 坐標。 由于坐標被列為 X,Y 對,因此這些值實際上按經度、緯度的順序排列。
以下是使用緯度/經度坐標的示例幾何點形狀:
SDO_GEOMETRY( 2001, --2D point4326, --latitude/longitudeSDO_POINT_TYPE( -100.123, 20.456 --coordinate), NULL, --for lines/polygons onlyNULL --for lines/polygons only)以下是使用緯度/經度坐標的示例幾何多邊形:
SDO_GEOMETRY( 2003, --2D polygon4326, --latitude/longitudeNULL, --for points only SDO_ELEM_INFO_ARRAY(1, 1003, 1 --indicates simple exterior polygon), SDO_ORDINATE_ARRAY( -98.789065,39.90973, -- coordinates-101.2522,39.639537,-99.84374,37.160316,-96.67987,35.460699,-94.21875,39.639537,-98.789025,39.90973)) );SDO_ELEM_INFO_ARRAY中的數值(1, 1003, 1)是固定搭配,表示一個多邊形(外部多邊形環)。
在本實驗中,您將:
- 創建帶有幾何列的表
- 填充幾何圖形
- 創建空間元數據和索引
任務 1:創建帶坐標的表
我們首先創建帶有緯度、經度坐標的表格。 這是創建空間數據的常見起始任務,例如來自 GPS 的坐標,或來自地理編碼街道地址或 IP 地址的坐標。
運行以下腳本:
CREATE TABLE WAREHOUSES (WAREHOUSE_NAME VARCHAR2(30), LAT NUMBER, LON NUMBER); CREATE TABLE BRANCHES (BRANCH_NAME VARCHAR2(30),ZIPCODE VARCHAR2(5), LAT NUMBER, LON NUMBER, BRANCH_TYPE VARCHAR2(30)); INSERT INTO WAREHOUSES VALUES ('Amarillo Warehouse',35.532226,-101.557617); INSERT INTO WAREHOUSES VALUES ('Odessa Warehouse',31.334871,-102.062988); INSERT INTO WAREHOUSES VALUES ('San Antonio Warehouse',29.496987,-98.833007); INSERT INTO WAREHOUSES VALUES ('Dallas Warehouse',33.027087,-97.316894); INSERT INTO WAREHOUSES VALUES ('Houston Warehouse',30.069093,-95.317382); INSERT INTO WAREHOUSES VALUES ('Abelene Warehouse',32.583849,-99.667968); INSERT INTO WAREHOUSES VALUES ('Waco Warehouse',31.27855,-97.097167); INSERT INTO BRANCHES VALUES('Marshall Branch','75672',32.50555,-94.35579,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Austin Branch-2','78745',30.20538,-97.75902,'RETAIL'); INSERT INTO BRANCHES VALUES('Grand Prairie Branch','75050',32.76199,-96.99732,'RETAIL'); INSERT INTO BRANCHES VALUES('Pasadena Branch','77505',29.64587,-95.15763,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Sulphur Springs Branch','75482',33.12357,-95.5972,'RETAIL'); INSERT INTO BRANCHES VALUES('San Angelo Branch-1','76901',31.44721,-100.49426,'RETAIL'); INSERT INTO BRANCHES VALUES('Houston Branch-6','77025',29.67853,-95.43044,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Mount Pleasant Branch','75455',33.17527,-94.98048,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Palestine Branch','75802',31.77344,-95.63011,'RETAIL'); INSERT INTO BRANCHES VALUES('Amarillo Branch-3','79119',35.11141,-101.91082,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Weatherford Branch','76086',32.75696,-97.70715,'RETAIL'); INSERT INTO BRANCHES VALUES('Port Lavaca Branch','77979',28.66005,-96.422,'RETAIL'); INSERT INTO BRANCHES VALUES('Tomball Branch','77375',30.015,-95.5912,'RETAIL'); INSERT INTO BRANCHES VALUES('Hebbronville Branch','78361',27.30652,-98.67612,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Beaumont Branch-1','77706',30.11087,-94.13984,'RETAIL'); INSERT INTO BRANCHES VALUES('Mabank Branch','75147',32.36565,-96.10197,'RETAIL'); INSERT INTO BRANCHES VALUES('Quitman Branch','75783',32.79578,-95.44701,'RETAIL'); INSERT INTO BRANCHES VALUES('Kerrvile Branch','78028',30.04845,-99.13948,'RETAIL'); INSERT INTO BRANCHES VALUES('Goldthwaite Branch','76844',31.44557,-98.5275,'RETAIL'); INSERT INTO BRANCHES VALUES('Katy Branch','77450',29.7848,-95.7326,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Bowie Branch-1','76230',33.53709,-97.87829,'RETAIL'); INSERT INTO BRANCHES VALUES('Weslaco Branch','78596',26.17235,-97.98209,'RETAIL'); INSERT INTO BRANCHES VALUES('Eagle Pass Branch','78852',28.6865,-100.47394,'RETAIL'); INSERT INTO BRANCHES VALUES('Tyler Branch','75711',32.32208,-95.30069,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Uvalde Branch','78801',29.23102,-99.75492,'RETAIL'); INSERT INTO BRANCHES VALUES('Odessa Branch','79760',31.8467,-102.36689,'RETAIL'); INSERT INTO BRANCHES VALUES('Houston Branch-1','77025',29.67853,-95.43044,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Decatur Branch','76234',33.24962,-97.54674,'RETAIL'); INSERT INTO BRANCHES VALUES('Lewisville Branch','75067',33.05725,-97.01165,'RETAIL'); INSERT INTO BRANCHES VALUES('Brenham Branch','77833',30.15595,-96.41905,'RETAIL'); INSERT INTO BRANCHES VALUES('Austin Branch-1','78751',30.32012,-97.71481,'RETAIL'); INSERT INTO BRANCHES VALUES('Rockdale Branch','76567',30.6503,-97.01023,'RETAIL'); INSERT INTO BRANCHES VALUES('San Antonio Branch-3','78216',29.55217,-98.48661,'RETAIL'); INSERT INTO BRANCHES VALUES('Abilene Branch-2','79605',32.4517,-99.77579,'RETAIL'); INSERT INTO BRANCHES VALUES('Cleburne Branch','76033',32.42166,-97.38356,'WHOLESALE'); INSERT INTO BRANCHES VALUES('College Station Branch','77845',30.6355,-96.30516,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Denton Branch','76210',33.14925,-97.09016,'RETAIL'); INSERT INTO BRANCHES VALUES('Alvin Branch-1','77512',29.41878,-95.24026,'RETAIL'); INSERT INTO BRANCHES VALUES('Amarillo Branch-1','79120',35.18857,-101.81719,'RETAIL'); INSERT INTO BRANCHES VALUES('Henderson Branch','75654',32.10862,-94.82693,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Paris Branch','75460',33.66771,-95.5678,'RETAIL'); INSERT INTO BRANCHES VALUES('Waxahachie Branch','75167',32.42936,-96.86103,'RETAIL'); INSERT INTO BRANCHES VALUES('Slaton Branch','79364',33.45031,-101.6518,'RETAIL'); INSERT INTO BRANCHES VALUES('Brady Branch','76825',31.13424,-99.3349,'RETAIL'); INSERT INTO BRANCHES VALUES('Fordt Worth Branch','76119',32.66555,-97.2406,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Carrollton Branch','75006',32.94441,-96.90386,'RETAIL'); INSERT INTO BRANCHES VALUES('Itasca Branch','76055',32.15944,-97.15097,'RETAIL'); INSERT INTO BRANCHES VALUES('Winnie Branch','77665',29.81749,-94.37706,'RETAIL'); INSERT INTO BRANCHES VALUES('Burkburnett Branch','73654',34.08013,-98.55913,'RETAIL'); INSERT INTO BRANCHES VALUES('Boerne Branch','78006',29.80671,-98.70248,'RETAIL'); INSERT INTO BRANCHES VALUES('Mesquite Branch','75150',32.80576,-96.62761,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Baytown Branch','77521',29.80219,-94.9955,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Orange Branch','77630',30.09311,-93.74627,'RETAIL'); INSERT INTO BRANCHES VALUES('Kaufman Branch','75142',32.58899,-96.30101,'RETAIL'); INSERT INTO BRANCHES VALUES('Frisco Branch','75034',33.08329,-96.8487,'RETAIL'); INSERT INTO BRANCHES VALUES('Portland Branch','78374',27.8892,-97.31627,'RETAIL'); INSERT INTO BRANCHES VALUES('Fort Stockton Branch','79735',30.86708,-102.84237,'RETAIL'); INSERT INTO BRANCHES VALUES('San Antonio Branch-1','78220',29.41375,-98.4102,'WHOLESALE'); INSERT INTO BRANCHES VALUES('San Angelo Branch-3','76901',31.44748,-100.494,'RETAIL'); INSERT INTO BRANCHES VALUES('Crosby Branch','77532',29.88909,-95.06142,'RETAIL'); INSERT INTO BRANCHES VALUES('Jacksonville Branch','75766',31.96639,-95.2485,'RETAIL'); INSERT INTO BRANCHES VALUES('La Grange Branch','78945',29.92131,-96.88931,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Corpus Christi Branch-2','78410',27.84873,-97.63101,'RETAIL'); INSERT INTO BRANCHES VALUES('Graham Branch','76450',33.10964,-98.56536,'RETAIL'); INSERT INTO BRANCHES VALUES('Corsicana Branch','75110',32.0986,-96.44383,'WHOLESALE'); INSERT INTO BRANCHES VALUES('San Antonio Branch-2','78238',29.40633,-98.51827,'RETAIL'); INSERT INTO BRANCHES VALUES('Kenedy Branch-1','78119',28.79531,-97.85081,'RETAIL'); INSERT INTO BRANCHES VALUES('Comanche Branch','76442',31.90838,-98.59057,'RETAIL'); INSERT INTO BRANCHES VALUES('Hutto Branch','78634',30.53991,-97.56444,'RETAIL'); INSERT INTO BRANCHES VALUES('Plainview Branch','79072',34.19627,-101.72565,'WHOLESALE'); INSERT INTO BRANCHES VALUES('El Paso Branch-1','79925',31.78992,-106.39392,'RETAIL'); INSERT INTO BRANCHES VALUES('Temple Branch','76503',31.10109,-97.33947,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Edna Branch-1','77957',28.96753,-96.6678,'RETAIL'); INSERT INTO BRANCHES VALUES('Dallas Branch-2','75228',32.79436,-96.69455,'RETAIL'); INSERT INTO BRANCHES VALUES('El Paso Branch-3','79925',31.78385,-106.41769,'RETAIL'); INSERT INTO BRANCHES VALUES('Whitesboro Branch','76273',33.67134,-96.90732,'RETAIL'); INSERT INTO BRANCHES VALUES('Galvston Branch','77554',29.28626,-94.85884,'WHOLESALE'); INSERT INTO BRANCHES VALUES('New Boston Branch','75570',33.45857,-94.42665,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Wharton Branch','77488',29.31394,-96.10216,'RETAIL'); INSERT INTO BRANCHES VALUES('Tulia Branch','79088',34.54383,-101.77545,'RETAIL'); INSERT INTO BRANCHES VALUES('Alvin Branch-2','77512',29.45094,-95.23649,'RETAIL'); INSERT INTO BRANCHES VALUES('Marble Falls Branch','78654',30.50005,-98.26728,'RETAIL'); INSERT INTO BRANCHES VALUES('Houston Branch-7','77074',29.71841,-95.49676,'RETAIL'); INSERT INTO BRANCHES VALUES('Arlington Branch-2','76004',32.73479,-97.10408,'RETAIL'); INSERT INTO BRANCHES VALUES('Wichita Falls Branch','76310',33.87128,-98.57951,'RETAIL'); INSERT INTO BRANCHES VALUES('Floresville Branch','78114',29.16354,-98.19341,'RETAIL'); INSERT INTO BRANCHES VALUES('El Paso Branch-2','79936',31.73947,-106.32398,'RETAIL'); INSERT INTO BRANCHES VALUES('Terrell Branch','75616',32.73366,-96.25685,'RETAIL'); INSERT INTO BRANCHES VALUES('Texas City Branch','77590',29.39525,-94.9323,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Humble Branch','77338',29.99421,-95.27188,'RETAIL'); INSERT INTO BRANCHES VALUES('Richwood Branch','77531',29.03962,-95.40011,'RETAIL'); INSERT INTO BRANCHES VALUES('Coleman Branch','76834',31.85603,-99.44611,'RETAIL'); INSERT INTO BRANCHES VALUES('Seguin Branch','78155',29.56276,-97.96538,'RETAIL'); INSERT INTO BRANCHES VALUES('Georgetown Branch','78627',30.62275,-97.68708,'RETAIL'); INSERT INTO BRANCHES VALUES('Mckinney Branch','75070',33.1688,-96.68446,'RETAIL'); INSERT INTO BRANCHES VALUES('Houston Branch-5','77034',29.62228,-95.2223,'RETAIL'); INSERT INTO BRANCHES VALUES('Muenster Branch','76252',33.66937,-97.37965,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Abilene Branch-1','79605',32.45175,-99.77668,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Big Spring Branch-1','79720',32.24941,-101.48127,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Corpus Christi Branch-3','78412',27.70189,-97.35781,'RETAIL'); INSERT INTO BRANCHES VALUES('Hondo Branch','78861',29.3483,-99.12811,'RETAIL'); INSERT INTO BRANCHES VALUES(' Corpus Christi Branch-1','78412',27.70189,-97.35781,'RETAIL'); INSERT INTO BRANCHES VALUES('Lufkin Branch-1','75901',31.34264,-94.69127,'RETAIL'); INSERT INTO BRANCHES VALUES('Port Arthur Branch','77642',29.93701,-93.9351,'RETAIL'); INSERT INTO BRANCHES VALUES('Arlington Branch-1','76017',32.67551,-97.1301,'RETAIL'); INSERT INTO BRANCHES VALUES('Copperas Cove Branch','76522',31.10028,-97.89377,'RETAIL'); INSERT INTO BRANCHES VALUES('Burleson Branch','76028',32.55993,-97.31844,'RETAIL'); INSERT INTO BRANCHES VALUES('Silsbee Branch','77625',30.38197,-94.34406,'RETAIL'); INSERT INTO BRANCHES VALUES('Kenedy Branch-2','78119',28.79531,-97.85081,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Raymondville Branch','78580',26.48079,-97.77893,'RETAIL'); INSERT INTO BRANCHES VALUES('Livingston Branch','77351',30.70821,-94.91611,'RETAIL'); INSERT INTO BRANCHES VALUES('Beeville Branch','78102',28.40093,-97.74818,'RETAIL'); INSERT INTO BRANCHES VALUES('Liberty Branch','77575',30.05823,-94.77322,'RETAIL'); INSERT INTO BRANCHES VALUES('Victoria Branch-1','77904',28.83684,-97.00175,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Kingsville Branch-1','78364',27.51574,-97.85543,'RETAIL'); INSERT INTO BRANCHES VALUES('Carthage Branch','75633',32.14415,-94.33211,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Dalhart Branch-2','79022',36.10865,-102.55245,'RETAIL'); INSERT INTO BRANCHES VALUES('Bay City Branch','77414',28.99702,-95.9164,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Mexia Branch','76667',31.68292,-96.48395,'RETAIL'); INSERT INTO BRANCHES VALUES('San Antonio Branch-5','78233',29.29499,-98.63473,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Amarillo Branch-2','79120',35.18857,-101.81719,'RETAIL'); INSERT INTO BRANCHES VALUES('Beaumont Branch-2','77706',30.11087,-94.13984,'RETAIL'); INSERT INTO BRANCHES VALUES('Houston Branch-2','77054',29.67793,-95.42368,'RETAIL'); INSERT INTO BRANCHES VALUES('Houston Branch-3','77040',29.88204,-95.57178,'RETAIL'); INSERT INTO BRANCHES VALUES('Sour Lake Branch','77659',30.14708,-94.38847,'RETAIL'); INSERT INTO BRANCHES VALUES('Nixon Branch','78140',29.29947,-97.76736,'RETAIL'); INSERT INTO BRANCHES VALUES('Alice Branch','78332',27.75495,-98.05881,'RETAIL'); INSERT INTO BRANCHES VALUES('Anson Branch','79601',32.74837,-99.89681,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Manvel Branch','77578',29.54028,-95.38673,'RETAIL'); INSERT INTO BRANCHES VALUES('Marlin Branch','76661',31.30914,-96.87926,'RETAIL'); INSERT INTO BRANCHES VALUES('Levelland Branch','79336',33.58844,-102.38274,'RETAIL'); INSERT INTO BRANCHES VALUES('Buda Branch','78610',30.08571,-97.82003,'RETAIL'); INSERT INTO BRANCHES VALUES('Stafford Branch','77477',29.64631,-95.57441,'RETAIL'); INSERT INTO BRANCHES VALUES('Madisonville Branch','77864',30.96249,-95.87933,'RETAIL'); INSERT INTO BRANCHES VALUES('Schulenburg Branch','78956',29.69367,-96.90506,'RETAIL'); INSERT INTO BRANCHES VALUES('Lufkin Branch-2','75901',31.34264,-94.69127,'RETAIL'); INSERT INTO BRANCHES VALUES('Edna Branch-2','77957',28.96753,-96.6678,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Gordon Branch','76453',32.54932,-98.37008,'RETAIL'); INSERT INTO BRANCHES VALUES('Houston Branch-4','77024',29.78386,-95.55237,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Nacogdoches Branch','75964',31.61312,-94.65307,'RETAIL'); INSERT INTO BRANCHES VALUES('San Antonio Branch-4','78224',29.34856,-98.53987,'RETAIL'); INSERT INTO BRANCHES VALUES('North Richland Hills Branch','76180',32.84109,-97.22351,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Plano Branch-2','75093',33.01631,-96.77654,'RETAIL'); INSERT INTO BRANCHES VALUES('Bowie Branch-2','76230',33.53709,-97.87829,'RETAIL'); INSERT INTO BRANCHES VALUES('Perryton Branch','79070',36.39554,-100.80268,'RETAIL'); INSERT INTO BRANCHES VALUES('Gilmer Branch','75644',32.75561,-94.98716,'RETAIL'); INSERT INTO BRANCHES VALUES('Kingsville Branch-2','78364',27.51574,-97.85543,'RETAIL'); INSERT INTO BRANCHES VALUES('Jasper Branch','75951',30.94009,-93.99693,'RETAIL'); INSERT INTO BRANCHES VALUES('Dallas Branch-1','75247',32.80804,-96.88519,'RETAIL'); INSERT INTO BRANCHES VALUES('Plano Branch-1','75093',33.01631,-96.77654,'RETAIL'); INSERT INTO BRANCHES VALUES('Angleton Branch','77515',29.16828,-95.4472,'RETAIL'); INSERT INTO BRANCHES VALUES('Gruver Branch','79040',36.30556,-101.49286,'RETAIL'); INSERT INTO BRANCHES VALUES('Pleasanton Branch','78064',28.95839,-98.48412,'RETAIL'); INSERT INTO BRANCHES VALUES('El Campo Branch','77437',29.21313,-96.28317,'RETAIL'); INSERT INTO BRANCHES VALUES('Frankston Branch','75763',32.05138,-95.50602,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Ennis Branch','75120',32.32955,-96.6237,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Clifton Branch','76634',31.82186,-97.50742,'RETAIL'); INSERT INTO BRANCHES VALUES('Edinburg Branch','78539',26.30616,-98.19573,'RETAIL'); INSERT INTO BRANCHES VALUES('Austin Branch-3','78759',30.41233,-97.74605,'RETAIL'); INSERT INTO BRANCHES VALUES('Devine Branch','78016',29.14836,-98.87534,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Andrews Branch','79714',32.3428,-102.5541,'RETAIL'); INSERT INTO BRANCHES VALUES('Hillsboro Branch','76645',31.97179,-97.12218,'RETAIL'); INSERT INTO BRANCHES VALUES('Galveston Branch','77554',29.28684,-94.85711,'RETAIL'); INSERT INTO BRANCHES VALUES('Manor Branch','78653',30.22456,-97.95029,'RETAIL'); INSERT INTO BRANCHES VALUES('Sherman Branch-2','75091',33.66046,-96.60687,'RETAIL'); INSERT INTO BRANCHES VALUES('Dalhart Branch-1','79022',36.10865,-102.55245,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Farmersville Branch','75442',33.1661,-96.35521,'RETAIL'); INSERT INTO BRANCHES VALUES('Caldwell Branch','77836',30.52876,-96.67828,'RETAIL'); INSERT INTO BRANCHES VALUES('Big Spring Branch-2','79720',32.24941,-101.48127,'RETAIL'); INSERT INTO BRANCHES VALUES('Stephenville Branch','76401',32.20144,-98.24628,'RETAIL'); INSERT INTO BRANCHES VALUES('San Angelo Branch-2','76902',31.46196,-100.44465,'RETAIL'); INSERT INTO BRANCHES VALUES('Dickinson Branch','77539',29.46108,-95.05394,'RETAIL'); INSERT INTO BRANCHES VALUES('Midland Branch','79704',31.97118,-102.12296,'RETAIL'); INSERT INTO BRANCHES VALUES('Sherman Branch-1','75090',33.62946,-96.58004,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Victoria Branch-2','77904',28.83684,-97.00175,'RETAIL'); INSERT INTO BRANCHES VALUES('Gonzales Branch','78629',29.50051,-97.46726,'WHOLESALE'); INSERT INTO BRANCHES VALUES('Kilgore Branch','75662',32.39171,-94.87641,'WHOLESALE'); INSERT INTO BRANCHES VALUES('West Branch','76691',31.79749,-97.10157,'RETAIL'); INSERT INTO BRANCHES VALUES('Del Rio Branch','78840',29.37022,-100.86395,'RETAIL');任務 2:從坐標創建幾何形狀
可以使用 SQL 填充幾何,例如,本例通過基于緯度和經度列指定點幾何的坐標。
添加幾何形狀列:
ALTER TABLE WAREHOUSES ADD (GEOMETRY SDO_GEOMETRY );ALTER TABLE BRANCHES ADD (GEOMETRY SDO_GEOMETRY );發布幾何形狀列:
UPDATE WAREHOUSES SETGEOMETRY = SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(LON, LAT, NULL), NULL, NULL);UPDATE BRANCHESSETGEOMETRY = SDO_GEOMETRY(2001, 4326, SDO_POINT_TYPE(LON, LAT, NULL), NULL, NULL);任務 3:創建帶多邊形的表
可以以相同的方式創建線和多邊形。 雖然點幾何需要一個坐標,但線和多邊形需要定義幾何形狀的所有坐標。 在這種情況下,我們創建一個表來存儲一個多邊形。
CREATE TABLE COASTAL_ZONE (ZONE_ID NUMBER,GEOMETRY SDO_GEOMETRY ); INSERT INTO COASTAL_ZONE VALUES (1,SDO_GEOMETRY(2003, 4326, NULL, SDO_ELEM_INFO_ARRAY(1, 1003, 1), SDO_ORDINATE_ARRAY(-93.719934, 30.210638,-95.422592, 29.773714, -95.059698, 29.322204, -96.013892, 28.787021, -96.660964, 28.925638, -97.528688, 28.042050, -97.858501, 27.447461, -97.497364, 25.880056, -96.977826, 25.969716, -97.211445, 27.054605, -96.870226, 27.816077, -93.794290, 29.535729, -93.719934, 30.210638)) );任務 4:添加空間元數據和索引
Oracle 數據庫為高性能空間操作提供原生空間索引。 我們的樣本數據非常小,實際上可能不需要空間索引。 但是,我們仍執行以下步驟,因為它們對于典型的生產數據量很重要。 空間索引需要一行用于被索引的幾何的元數據。 我們創建此元數據,然后創建空間索引。
-- 添加元數據 INSERT INTO USER_SDO_GEOM_METADATA VALUES ('WAREHOUSES','GEOMETRY',SDO_DIM_ARRAY(SDO_DIM_ELEMENT('x', -180, 180, 0.05), SDO_DIM_ELEMENT('y', -90, 90, 0.05)),4326);INSERT INTO USER_SDO_GEOM_METADATA VALUES ('BRANCHES','GEOMETRY',SDO_DIM_ARRAY(SDO_DIM_ELEMENT('x', -180, 180, 0.05), SDO_DIM_ELEMENT('y', -90, 90, 0.05)),4326);INSERT INTO USER_SDO_GEOM_METADATA VALUES ('COASTAL_ZONE','GEOMETRY',SDO_DIM_ARRAY(SDO_DIM_ELEMENT('x', -180, 180, 0.05), SDO_DIM_ELEMENT('y', -90, 90, 0.05)),4326); -- 創建索引 CREATE INDEX WAREHOUSES_SIDX ONWAREHOUSES (GEOMETRY)INDEXTYPE IS MDSYS.SPATIAL_INDEX;CREATE INDEX BRANCHES_SIDX ONBRANCHES (GEOMETRY)INDEXTYPE IS MDSYS.SPATIAL_INDEX;CREATE INDEX COASTAL_ZONE_SIDX ONCOASTAL_ZONE (GEOMETRY)INDEXTYPE IS MDSYS.SPATIAL_INDEX;創建索引后,刷新表列表。 您將看到 3 個名稱以 MDRT_ 開頭的表。 這些是空間索引的產物,由 Oracle 數據庫自動管理。 您不要手動操作這些表。
我們的示例數據現在已準備好,可以開始進行空間查詢。
如果您需要還原此實驗室并刪除創建的項目,請運行以下命令:
DROP TABLE BRANCHES; DROP TABLE WAREHOUSES; DROP TABLE COASTAL_ZONE; DELETE FROM USER_SDO_GEOM_METADATA; COMMIT;學到更多
- Spatial產品門戶
- Spatial文檔
- Spatial博客
實驗 4:運行空間查詢
本實驗將引導您完成 Oracle 數據庫中的基本空間查詢。 您將使用在上一個實驗室中創建的示例數據來根據接近度和包含來識別項目。約15分鐘。
Oracle 數據庫包括用于空間分析的強大的函數和運算符庫。 這包括空間關系、測量、聚合、轉換等等。 這些操作可通過本機 SQL、PL/SQL、Java API 以及與 Oracle 數據庫通信的任何其他語言進行訪問。
在本實驗中,您將:
- 識別與 WAREHOUSE 具有鄰近關系的 BRANCHES
- 識別與 COASTAL_ZONE 具有包含和鄰近關系的 BRANCHES
空間查詢
Oracle 數據庫中的空間查詢與您習慣的任何其他傳統查詢一樣。 唯一的區別是一組對您來說可能是新的空間函數和運算符。
確定離達拉斯倉庫最近的 5 個分店:
SELECTBRANCH_NAME,BRANCH_TYPE FROMBRANCHES B,WAREHOUSES W WHEREW.WAREHOUSE_NAME = 'Dallas Warehouse'AND SDO_NN(B.GEOMETRY, W.GEOMETRY, 'sdo_num_res=5') = 'TRUE';BRANCH_NAME BRANCH_TYPE --------------------------- ----------- Decatur Branch RETAIL Lewisville Branch RETAIL Denton Branch RETAIL Arlington Branch-2 RETAIL North Richland Hills Branch WHOLESALE說明:
- SDO_NN 使用空間索引來識別幾何形狀的最近鄰居(NN表示Nearest Neighbour),第一個參數(上例中的 B.GEOMETRY)是要搜索的列,即搜索結果。第二個參數(上例中的 W.GEOMETRY)是您想要找到最近的鄰居的位置,即中心位置。第三個參數表示行為,sdo_num_res=5表示返回的結果數量(number of results)為5。不應假設返回結果的順序。例如,不能保證返回的第一行是最接近的。如果兩個或更多分支與倉庫的距離相等,則任何一個都可能在隨后調用 SDO_NN 時返回。
- 使用 SDO_NUM_RES 參數時,WHERE 子句中不使用其他條件。 SDO_NUM_RES 只考慮接近度。例如,如果您向 WHERE 子句添加了一個條件,因為您希望五個最近的分支具有特定的郵政編碼,并且五個最近的分支中有四個具有不同的郵政編碼,那么上面的查詢將返回一行。此行為特定于 SDO_NUM_RES 參數。在下面的查詢中,您將為附加查詢條件的場景使用替代參數。
確定距離達拉斯倉庫最近的 5 個分店,并顯示距離:
SELECTBRANCH_NAME,BRANCH_TYPE,ROUND(SDO_NN_DISTANCE(1), 2) DISTANCE_KM FROMBRANCHES B,WAREHOUSES W WHEREW.WAREHOUSE_NAME = 'Dallas Warehouse'AND SDO_NN(B.GEOMETRY, W.GEOMETRY, 'sdo_num_res=5 unit=km', 1) = 'TRUE' ORDER BYDISTANCE_KM;BRANCH_NAME BRANCH_TYPE DISTANCE_KM --------------------------- ----------- ----------- North Richland Hills Branch WHOLESALE 22.4 Denton Branch RETAIL 25.13 Lewisville Branch RETAIL 28.71 Decatur Branch RETAIL 32.7 Arlington Branch-2 RETAIL 38.05說明:
- SDO_NN_DISTANCE 算子是 SDO_NN 算子的輔助算子; 它只能在 SDO_NN 運算符中使用。 此運算符的參數是一個與指定為 SDO_NN 的最后一個參數的數字匹配的數字; 在這個例子中它是 1。這個參數沒有隱藏的含義,它只是一個標簽。 如果指定了 SDO_NN_DISTANCE(),您可以按距離對結果進行排序,并保證返回的第一行是最近的。 如果您要查詢的數據存儲為經度和緯度,則 SDO_NN_DISTANCE 的默認單位是米。
- SDO_NN 運算符還有一個 UNIT 參數,用于確定 SDO_NN_DISTANCE 返回的測量單位。
- ORDER BY DISTANCE 子句確保按順序返回距離,最短距離在前。
確定距離達拉斯倉庫最近的 5 個批發分店:
SELECTBRANCH_NAME,BRANCH_TYPE,ROUND(SDO_NN_DISTANCE(1), 2) DISTANCE_KM FROMBRANCHES B,WAREHOUSES W WHEREW.WAREHOUSE_NAME = 'Dallas Warehouse'AND B.BRANCH_TYPE = 'WHOLESALE'AND SDO_NN(B.GEOMETRY, W.GEOMETRY, 'sdo_batch_size=5 unit=km', 1) = 'TRUE'AND ROWNUM <= 5 ORDER BYDISTANCE_KM;BRANCH_NAME BRANCH_TYPE DISTANCE_KM --------------------------- ----------- ----------- North Richland Hills Branch WHOLESALE 22.4 Fordt Worth Branch WHOLESALE 40.73 Cleburne Branch WHOLESALE 67.43 Mesquite Branch WHOLESALE 68.99 Muenster Branch WHOLESALE 71.48說明:
- SDO_BATCH_SIZE 是一個可調參數,它可能會影響查詢的性能。 SDO_NN 在內部一次計算該距離數。 返回的初始批次的行可能不滿足 WHERE 子句中的約束,因此會不斷返回 SDO_BATCH_SIZE 指定的行數,直到滿足 WHERE 子句中的所有約束。 您應該選擇一個 SDO_BATCH_SIZE,它最初返回可能滿足 WHERE 子句中的約束的行數。
- B.BRANCH_TYPE = ‘WHOLESALE’ AND ROWNUM <= 5 是 WHERE 子句中的附加約束。 rownum 子句對于將返回的結果數限制為 5 是必要的。
識別休斯頓倉庫 50 公里范圍內的分支機構
SELECTB.BRANCH_NAME,B.BRANCH_TYPE FROMBRANCHES B,WAREHOUSES W WHEREW.WAREHOUSE_NAME = 'Houston Warehouse'AND SDO_WITHIN_DISTANCE(B.GEOMETRY, W.GEOMETRY, 'distance=50 unit=km') = 'TRUE';BRANCH_NAME BRANCH_TYPE ---------------- ----------- Houston Branch-2 RETAIL Houston Branch-1 WHOLESALE Houston Branch-6 WHOLESALE Houston Branch-7 RETAIL Houston Branch-4 WHOLESALE Baytown Branch WHOLESALE Houston Branch-3 RETAIL Crosby Branch RETAIL Humble Branch RETAIL Tomball Branch RETAIL Pasadena Branch WHOLESALE 11 rows selected.說明:
- SDO_WITHIN_DISTANCE 的第一個參數是要搜索的列。 第二個參數是您要確定距離的位置。 不應假設返回結果的順序。 例如,返回的第一行不保證是離倉庫 3 最近的客戶。
- SDO_WITHIN_DISTANCE 運算符中使用的 DISTANCE 參數指定距離值; 在本例中為 50。
- SDO_WITHIN_DISTANCE 運算符中使用的 UNIT 參數指定 DISTANCE 參數的測量單位。 默認單位是與數據關聯的度量單位。 對于經緯度數據,默認為米; 在這個例子中,它是英里。
識別距離休斯頓倉庫 50 公里范圍內的分支機構,并顯示距離
SELECTB.BRANCH_NAME,B.BRANCH_TYPE,ROUND(SDO_GEOM.SDO_DISTANCE(B.GEOMETRY, W.GEOMETRY, 0.05, 'unit=km'), 2) AS DISTANCE_KM FROMBRANCHES B,WAREHOUSES W WHEREW.WAREHOUSE_NAME = 'Houston Warehouse'AND SDO_WITHIN_DISTANCE(B.GEOMETRY, W.GEOMETRY, 'distance=50 unit=km') = 'TRUE' ORDER BYDISTANCE_KM;BRANCH_NAME BRANCH_TYPE DISTANCE_KM ---------------- ----------- ----------- Humble Branch RETAIL 9.39 Tomball Branch RETAIL 27.08 Crosby Branch RETAIL 31.75 Houston Branch-3 RETAIL 32.14 Houston Branch-4 WHOLESALE 38.92 Houston Branch-7 RETAIL 42.56 Baytown Branch WHOLESALE 42.91 Houston Branch-2 RETAIL 44.56 Houston Branch-6 WHOLESALE 44.65 Houston Branch-1 WHOLESALE 44.65 Pasadena Branch WHOLESALE 49.39 11 rows selected.說明:
- SDO_GEOM.SDO_DISTANCE 函數計算分支位置和休斯頓倉庫之間的距離。
- SDO_GEOM.SDO_DISTANCE 的前 2 個參數是用于計算距離的 BRANCH 和 WAREHOUSE 位置。
- SDO_GEOM.SDO_DISTANCE 的第三個參數是公差值。 容差是 Oracle Spatial 使用的舍入誤差值。 經度和緯度數據的容差以米為單位。 在本例中,公差為 50 毫米(0.05米)。
- SDO_GEOM.SDO_DISTANCE 參數中使用的 UNIT 參數指定由 SDO_GEOM.SDO_DISTANCE 函數計算的距離的測量單位。 默認單位是與數據關聯的度量單位。 對于經度和緯度數據,默認值為米。 在此示例中,它是英里。
- ORDER BY DISTANCE_IN_MILES 子句確保按順序返回距離,最短距離在前,距離以英里為單位。
確定沿海地區的分支機構
SELECTB.BRANCH_NAME,B.BRANCH_TYPE FROMBRANCHES B,COASTAL_ZONE C WHERESDO_ANYINTERACT(B.GEOMETRY, C.GEOMETRY) = 'TRUE';BRANCH_NAME BRANCH_TYPE ------------------------ ----------- Baytown Branch WHOLESALE Winnie Branch RETAIL Port Arthur Branch RETAIL Orange Branch RETAIL Corpus Christi Branch-1 RETAIL Corpus Christi Branch-3 RETAIL Corpus Christi Branch-2 RETAIL Portland Branch RETAIL Port Lavaca Branch RETAIL Richwood Branch RETAIL Galvston Branch WHOLESALE Galveston Branch RETAIL Texas City Branch WHOLESALE Dickinson Branch RETAIL Houston Branch-5 RETAIL Pasadena Branch WHOLESALE 16 rows selected.說明:
- SDO_ANYINTERACT 運算符接受 2 個參數,geometry1 和 geometry2。 對于geometry1 在geometry2 內部或邊界上的行,運算符返回TRUE。
- 在此示例中,geometry1 是 B.GEOMETRY,即分支機構的幾何形狀,geometry2 是 C.GEOMETRY,即海岸帶的幾何形狀。 COASTAL_ZONE 表只有 1 行,因此不需要其他條件。
確定沿海地區外 10 公里內的分支機構
( SELECTB.BRANCH_NAME,B.BRANCH_TYPE FROMBRANCHES B,COASTAL_ZONE C WHERESDO_WITHIN_DISTANCE(B.GEOMETRY, C.GEOMETRY, 'distance=10 unit=km') = 'TRUE' ) MINUS ( SELECTB.BRANCH_NAME,B.BRANCH_TYPE FROMBRANCHES B,COASTAL_ZONE C WHERESDO_ANYINTERACT(B.GEOMETRY, C.GEOMETRY) = 'TRUE' );BRANCH_NAME BRANCH_TYPE ------------------- ----------- Alvin Branch-1 RETAIL Alvin Branch-2 RETAIL Angleton Branch RETAIL Beaumont Branch-1 RETAIL Beaumont Branch-2 RETAIL Crosby Branch RETAIL Edna Branch-1 RETAIL Edna Branch-2 WHOLESALE Houston Branch-1 WHOLESALE Houston Branch-2 RETAIL Houston Branch-6 WHOLESALE Houston Branch-7 RETAIL Kingsville Branch-1 RETAIL Kingsville Branch-2 RETAIL 14 rows selected.說明:
- 在此查詢的第一部分,SDO_WITHIN_DISTANCE 運算符識別 COASTAL_ZONE 10 公里內的分支機構。 這包括 COASTAL_ZONE 內的分支機構。
- 該查詢使用 MINUS 刪除 COASTAL_ZONE 內的分支機構,只留下 10 公里內和 COASTAL_ZONE 外的 分支機構。
學到更多
總結
以上是生活随笔為你收集整理的Oracle LiveLabs实验:Introduction to Oracle Spatial的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓TextView完美展示html格式
- 下一篇: D5M数据手册英文版