以文本方式查看主題 - 昂捷論壇 (http://www.26035.net/bbs/index.asp) -- □-技術(shù)研討會 (http://www.26035.net/bbs/list.asp?boardid=36) ---- 如何檢索SQL Server的GML格式空間數(shù)據(jù) (http://www.26035.net/bbs/dispbbs.asp?boardid=36&id=6807) |
-- 作者:飛絮 -- 發(fā)布時間:2010/1/19 14:26:56 -- 如何檢索SQL Server的GML格式空間數(shù)據(jù) 【IT168 技術(shù)文檔】在此練習(xí)中,您將創(chuàng)建返回以地理標(biāo)記語言 (GML) 表示的空間數(shù)據(jù)的存儲過程。GML 是一個由開放地理空間聯(lián)盟 (OGC) 定義的標(biāo)準(zhǔn),用于在應(yīng)用程序和系統(tǒng)之間交換地理數(shù)據(jù)。SQL Server 中的空間數(shù)據(jù)類型支持 GML 作為空間數(shù)據(jù)類型實(shí)例的數(shù)據(jù)源,也支持 GML 作為表示空間數(shù)據(jù)值的格式。借助對 GML 的這種支持,可以輕松地在 SQL Server 中的空間數(shù)據(jù)和其他地理空間系統(tǒng)(如 Microsoft Virtual Earth)之間進(jìn)行集成。 注意:您可以從 C:\\SQLHOLS\\Spatial and VE\\Solution\\StoredProcs.sql 復(fù)制此練習(xí)中使用的代碼 創(chuàng)建包含空間數(shù)據(jù)的數(shù)據(jù)庫 1. 從開始菜單中的 Microsoft SQL Server 2008 程序組中啟動 SQL Server Management Studio。收到提示時,使用 Windows 身份驗(yàn)證連接到數(shù)據(jù)庫引擎的 (local) 實(shí)例。 2. 打開 C:\\SQLHOLs\\Spatial and VE\\Starter 文件夾中的 Create DB.sql 查詢文件。 3. 檢查此腳本中的 Transact-SQL 代碼。請注意,此代碼執(zhí)行下列任務(wù): ? 刪除名為 StoreData的數(shù)據(jù)庫并重新創(chuàng)建它。 ? 創(chuàng)建一個名為 Stores 表,其中包含名為 StoreLocation 的 geography列。 ? 在 StoreLocation 列上創(chuàng)建一個空間索引。 ? 在 Stores 表中插入大量記錄。每個記錄都包含一個由緯度和經(jīng)度坐標(biāo)定義的表示地理點(diǎn)的 StoreLocation 值。 4. 單擊執(zhí)行運(yùn)行此腳本。如果尚不存在 StoreData 數(shù)據(jù)庫,請忽略任何有關(guān)無法刪除該數(shù)據(jù)庫的錯誤。 5. 保持 SQL Server Management Studio 打開,下一個過程還要使用此程序。 創(chuàng)建檢索所有商店的存儲過程 1. 單擊新建查詢創(chuàng)建新查詢。如果收到提示,請使用 Windows 身份驗(yàn)證連接到 (local) 數(shù)據(jù)庫引擎實(shí)例。 2. 在查詢編輯器中鍵入以下 Transact-SQL 代碼。 <!--
Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> USE StoreData GO CREATE PROCEDURE GetStoresGML AS -- Return the store location geography data as GML SELECT StoreName, StoreAddress + \', Tel:\' + StorePhone AS ContactDetails, StoreLocation.AsGml() As StoreGML FROM Stores GO 創(chuàng)建查找指定位置附近的商店的存儲過程
1. 在您在上一過程中添加的 EXECUTE 語句下,添加以下 Transact-SQL 代碼。 <!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> CREATE PROCEDURE GetNearbyStoresGML @Lat nvarchar(10), @Long nvarchar(10) AS -- Create a point geography instance based on the supplied location DECLARE @SearchPoint geography SET @SearchPoint = geography::Point(@Lat, @Long, 4326) -- Create a polygon geography instance by adding a 100km buffer to the point DECLARE @SearchArea geography SET @SearchArea = @SearchPoint.STBuffer(100000) --Return the search area and all store locations that intersect it SELECT \'Search Area\', \'100 KM radius\', @SearchArea.AsGml() UNION ALL SELECT StoreName, StoreAddress + \', Tel:\' + StorePhone AS ContactDetails, StoreLocation.AsGml() As StoreGML FROM Stores WHERE StoreLocation.STIntersects(@SearchArea) = 1 GO
注意:此代碼創(chuàng)建一個 geography 實(shí)例,該實(shí)例中包含一個基于傳遞到存儲過程的緯度和經(jīng)度參數(shù)的點(diǎn)。然后此代碼使用 geography 數(shù)據(jù)類型的 STBuffer 方法創(chuàng)建表示搜索點(diǎn)周圍方圓 100km 范圍內(nèi)的多邊形 geography 實(shí)例。最后,此代碼返回定義搜索區(qū)域的 geography 實(shí)例的 GML 表示形式以及搜索區(qū)域中的所有商店,通過使用 geography 數(shù)據(jù)類型的 STIntersects 方法可以找到這些商店。 2. 選擇剛剛添加的 CREATE PROCEDURE 語句,然后單擊執(zhí)行運(yùn)行所選的代碼。 3. 在 CREATE PROCEDURE 語句下,添加下面的代碼以測試存儲過程。 <!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> EXECUTE GetNearbyStoresGML \'34.000000\', \'-118.000000\'
4. 選擇剛剛添加的 EXECUTE 語句,然后單擊執(zhí)行運(yùn)行所選的代碼。 5. 在結(jié)果窗格中,單擊第一個 XML 值,以在 XML 查看器中查看搜索區(qū)域的 GML 表示形式。 6. 關(guān)閉 XML 查看器并返回到查詢編輯器。 7. 將查詢腳本文件另存為 C:\\SQLHOLs\\Spatial and VE\\Starter\\StoredProcs.sql,然后關(guān)閉 SQL Server Management Studio。
注意:此代碼使用地理數(shù)據(jù)類型的 AsGml 方法返回 GML 格式的空間數(shù)據(jù)值。 3. 單擊執(zhí)行運(yùn)行此腳本。 4. 在 CREATE PROCEDURE 語句下,添加下面的代碼以測試存儲過程。 <!-- Code highlighting produced by Actipro CodeHighlighter (freeware) http://www.CodeHighlighter.com/ --> EXECUTE GetStoresGML 5. 選擇剛剛添加的 EXECUTE 語句,然后單擊執(zhí)行運(yùn)行所選的代碼。 6. 在結(jié)果窗格中,單擊任意 StoreGML 值在 XML 查看器中查看空間數(shù)據(jù)的 GML 表示形式。 7. 關(guān)閉 XML 查看器并返回到查詢編輯器。 |