非常に役立つプログラムを使用して、空間データを取得し、SQLServerデータベースに配置しました。データ型を使用して、geometry
互いに国境を接している米国の州を見つけることができるかどうか知りたいですか?
編集:2つの州が互いに境界を接している場合、それらの州のジオメトリデータの適切な部分は同じになると想定しています(境界に沿って輪郭を共有しているため)
非常に役立つプログラムを使用して、空間データを取得し、SQLServerデータベースに配置しました。データ型を使用して、geometry
互いに国境を接している米国の州を見つけることができるかどうか知りたいですか?
編集:2つの州が互いに境界を接している場合、それらの州のジオメトリデータの適切な部分は同じになると想定しています(境界に沿って輪郭を共有しているため)
私はSQL2005を使用してこれを少し前に行いましたが、ロジックはまだ適用される可能性があると思います。SQLにロードしたのと同じように、空間データを取得しました。そこで、分割して、各Coord(私の場合は境界geomフィールドに格納されているlat / longs)とそれに対応するStateを新しいテーブルに書き出すことにしました。完全に必要というわけではありませんが、データを確認するのに役立ち、進行中のロジックがそれほど複雑になりませんでした。これに入ると、異なる州が共有する国境にリストされているポイントは、両方の州にリストされているポイントと同じであると思いました(ありがたいことに)。新しい1対多(状態から座標)のテーブルができたら、次の擬似コードで何をしたかを説明します。私の作業コード(.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);
一部の郡や州では、水路の端(中央ではない)に境界があります。使用しているデータによると、それらは連続して表示されない場合があります。あなたはそれらを説明しなければならないかもしれません。
当時、私はおそらくこれに2日以上を費やしました。特に理由がない限り、1日しかかからない場合でも、工数とドルを比較すると、データ会社から購入する方が現実的です。あなたはここで隣接する郡を得ることができます、そしてあなたが尋ねれば彼らは州をするだろうと私は確信しています。それを超えて、それを購入していなかったので、私は誰を推薦するべきかわかりません...それはおそらくビンビンする価値があります。
これがお役に立てば幸いです