понедельник, 11 июля 2011 г.

Получение центроида объекта из БД MS SQL Server без использования ArcSDE

Существует БД MS SQL Server с установленным ArcSDE и Spatial слоями. Требуется в веб-приложении без использования ArcSDE получить координаты точечного объекта по его идентификатору и имени таблицы.
Задача решена на C# созданием следующего метода:
    private int[] getCoordinates(SqlConnection connection, string tablename, int shape) 
    {
        int[] coord = new int[2];
        string g_table_name = "";
        SqlCommand command1 = new SqlCommand("select g_table_name from" +
            " M10_DATABASE.dbo.SDE_geometry_columns where f_table_name='" + 
            tablename + "'", connection);
        SqlDataReader reader1;
        reader1 = command1.ExecuteReader();
        if (reader1.Read())
            g_table_name = reader1["g_table_name"].ToString();
        reader1.Close();
        if (!String.IsNullOrEmpty(g_table_name))
        {
            SqlCommand command2 = new SqlCommand("select eminx, eminy, emaxx, emaxy" +
                " from M10_DATABASE.dbo." + 
                g_table_name + " where fid=" + shape, connection);
            SqlDataReader reader2 = command2.ExecuteReader();
            if (reader2.Read())
            {
                double x = ((Double)reader2["eminx"] + (Double)reader2["emaxx"]) / 2;
                double y = ((Double)reader2["eminy"] + (Double)reader2["emaxy"]) / 2;
                coord[0] = (int)Math.Round(x);
                coord[1] = (int)Math.Round(y);
            }
            reader2.Close();
        }
        return coord;
    }

Комментариев нет:

Отправить комментарий