使用ESRI shapefile SQL Server 2008查找边界县和州

时间:2012-08-24 19:57:43

标签: sql-server reporting-services polygon

我使用了一个非常有用的程序来获取空间数据并将其放入SQL Server数据库中。我很好奇是否有可能使用geometry数据类型来查找彼此相邻的美国州?

编辑:我假设如果两个状态相互接近,那些状态的几何数据的相当一部分将是相同的(因为它们沿着它们的边界共享轮廓)

1 个答案:

答案 0 :(得分:1)

我前段时间使用SQL2005做过这个,但我相信逻辑可能仍然适用。得到了空间数据,类似于我加载到SQL中。在那里,我决定分解并将每个Coord(在我的情况下,存储在边界geom字段中的lat / long)写入一个新表中。虽然不是完全必要的,但它帮助我查看数据并使得进程逻辑不那么复杂。谈到这一点,我怀疑(但不确定)为不同国家共享的边界列出的点数将与两个州列出的点相同(幸运的是)。一旦我有了新的一对多(状态到坐标)表,下面的伪代码就解释了我的所作所为。我的工作代码(在.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,如果你问的话,我相信他们会做各州。除此之外,没有买它,我不知道推荐谁...它可能值得一试。

我希望这会有所帮助