2012-08-24 52 views
0

我使用了一個非常有用的程序來獲取空間數據並將其放入SQL Server數據庫。我很好奇,如果有可能使用geometry數據類型來查找相互接壤的美國國家?查找與ESRI shapefile相鄰的縣和州SQL Server 2008

編輯:我假設,如果兩個國家邊境的狀態幾何數據的對方一個體面的部分將是相同的(因爲它們沿着其邊界共享的輪廓)

+1

雖然我什麼都不知道了'geometry'數據類型,如果你的基本邏輯是:個州共享幾何數據,那不是[交叉多邊形](HTTP的情況: //msdn.microsoft.com/en-us/library/bb933899.aspx)? – Pondlife

+0

我沒有碰到過這個。這絕對是我會研究的,謝謝。 – wootscootinboogie

回答

1

我這樣做了一段時間以前使用SQL2005,但我相信邏輯可能仍然適用。獲得了空間數據,與我加載到SQL中的類似。一旦出現,我決定分解並將每個Coord(在我的案例中存儲在邊界geom字段中的lat/longs)與其相應的狀態寫入一個新表格。儘管不是完全必要的,但它幫助我看到了數據並使得前面的邏輯更加簡單。考慮到這一點,我懷疑(但不是確定),爲不同國家分享的邊界所列出的要點與兩個國家(幸好它們是)列出的要點相同。一旦我有了新的一對多(狀態到座標)表,下面的僞代碼解釋了我所做的。 (在.net中完成)我工作的代碼複雜了這裏沒有提到,如建立一個序列號,接壤距離等

大綱:

Loop through each State (StatePoints table) 
    Get all coords/points of current State (coords in my case are lat/long combos) 
    Loop through each coord of current State 
     _lat = row["Latitude"] 
     _long = row["Longitude"]; 

     //Using the above, locate other States in the same table with shared Coords. Something like the following. 
     //the where condition state_id <> currState_id is simply to omit the current state's borders since you're only bordering Contiguous states. 

     strSQL = "SELECT state_id, Latitude, Longitude from ..." + 
       " WHERE (ROUND(Latitude, 6, 1) = " + _lat + ") AND (ROUND(Longitude, 6, 1) = " + _long + ") AND (state_id <> " + currState_id + ")" + 

     dtStateSharedPoints = db.ExecuteDataSet(CommandType.Text, strSQL).Tables[0]; 

     //-------------------------------------------------- 
     //Loop through the shared lat/long matches. Note: typically there will only be one, 
     //however several States can meet at a single point 
     //-------------------------------------------------- 
      Loop through the shared lat/long matches (dtStateSharedPoints). 
       borderState_id = Convert.ToInt32(row["state_id"]); 
       strSQL = "INSERT INTO ContigStates(state_id, borderState_id, Latitude, Longitude) ..." 
       db.ExecuteNonQuery(CommandType.Text, strSQL); 

部分縣和國家有邊界水道的邊緣(不是中心)。根據您使用的數據,這些數據可能不會顯示爲連續的。你可能需要考慮這些。

我當時可能花了兩天多的時間。除非您有其他理由,否則即使僅需要一天,當您將工時與美元進行比較時,從數據公司購買此數據可能也更爲可行。你可以得到連續的縣here,我敢肯定,他們會做的州,如果你問。除此之外,沒有購買它,我不知道該推薦誰......這可能是值得的。

我希望這有助於

+0

很有意思。 – wootscootinboogie