Работа с FDO в Visual Studio на языке C#

Вопросы по нескольким пакетам сразу, или вопросы, которые непонятно к какой ГИС отнести
Davidow
Новоприбывший
Сообщения: 9
Зарегистрирован: 29 сен 2009, 11:47
Репутация: 0

Работа с FDO в Visual Studio на языке C#

Сообщение Davidow » 01 окт 2009, 08:52

Добрый день господа, у меня вопрос по поводу работы с FDO.

На странице www.fdo.osgo.org я скачал и установил

FDO Open Source 3.4.0. Инсталяция прошла успешно.

Вот теперь только я не знаю как прикрепить этот FDO механизм
в Visual Studio.

Моя задача такова:

Загрузить при помащью FDO механизма Геометрическии данные из базы данных Oracle и
периделать эти данные в Shape формат.


Пожалуйста помогите

Аватара пользователя
JEY
Активный участник
Сообщения: 228
Зарегистрирован: 17 июл 2008, 13:42
Статьи: 1
Репутация: 1

Re: Работа с FDO в Visual Studio на языке C#

Сообщение JEY » 02 окт 2009, 08:18

Добрый день! Постараюсь коротко ответить на Ваш вопрос.

Из всех многочисленных библиотек, вложенных в дистрибутив FDO, Вас интересуют только те, что подключаются к среде разработки приложений на основе .NET Framework (другими словами это managed code).

Так вот. Следующий список файлов и есть то, что Вам нужно:
  • OSGeo.FDO.dll
    OSGeo.FDO.Common.dll
    OSGeo.FDO.Geometry.dll
    OSGeo.FDO.Providers.MySQL.Overrides.dll
    OSGeo.FDO.Providers.ODBC.Overrides.dll
    OSGeo.FDO.Providers.Rdbms.Overrides
    OSGeo.FDO.Providers.SHP.Overrides.dll
    OSGeo.FDO.Providers.SQLServerSpatial.Overrides.dll
    OSGeo.FDO.Providers.WMS.Overrides.dll
    OSGeo.FDO.Spatial.dll
А в практике, после подключения основного файла OSGeo.FDO.dll, все остальные файлы будут подключены в среде программирования автоматически.

И в поиске примеров на Visual C#.NET могу настоятельно посоветовать Вам скачать исходный код FDO Toolbox.

Davidow
Новоприбывший
Сообщения: 9
Зарегистрирован: 29 сен 2009, 11:47
Репутация: 0

Re: Работа с FDO в Visual Studio на языке C#

Сообщение Davidow » 04 окт 2009, 18:02

Большое спасибо за ответ

исходный код FDO Toolbox на страничке не выложен.

Или я очень не внимательно смотрю. На страничке выложена только EXE.

Мне удалось найти SharpMapFdo.zip это и есть исходный код ?

Аватара пользователя
JEY
Активный участник
Сообщения: 228
Зарегистрирован: 17 июл 2008, 13:42
Статьи: 1
Репутация: 1

Re: Работа с FDO в Visual Studio на языке C#

Сообщение JEY » 05 окт 2009, 13:09

Ну если ничего не изменилось, то вполне возможно, что это исходный код провайдера данных SharpMap для FDO...

Davidow
Новоприбывший
Сообщения: 9
Зарегистрирован: 29 сен 2009, 11:47
Репутация: 0

Re: Работа с FDO в Visual Studio на языке C#

Сообщение Davidow » 05 окт 2009, 17:14

У меня возник вапрос по поваду создания схемы пространственных данных

по инструкции Я проделал следущии шаги ,


Создайте или выберите из реестра провайдер данных.
Создайте менеджер соединений.
Создайте соединение.
Определите тип источника данных.
Получите список файлов источника данных.
Получите состояние соединения.
Получите свойства соединения.
Получите значения свойств соединения.
Установите свойства соединения.
Откройте соединение.
Откройте продолжительное соединение.
Получите список файлов источника данных, если они существуют.

Я открыл папку с shp файлами...

теперь необходимо создать схему пространственных данных.

Я не понемаю для чего создаётся схему пространственных данных.

Читал документ на английском и ничего не понял.....

Помоните пожалуйста

Аватара пользователя
JEY
Активный участник
Сообщения: 228
Зарегистрирован: 17 июл 2008, 13:42
Статьи: 1
Репутация: 1

Re: Работа с FDO в Visual Studio на языке C#

Сообщение JEY » 06 окт 2009, 08:08

Под схемой пространственных данных подразумевается информация о данных, содержащихся в источнике данных. То есть, в Вашем случае, каждый шейп-файл является для FDO источником данных. Для того, чтобы FDO мог считывать данные из шейп-файла, необходимо получить информацию о количестве полей и их типе данных (если тип данных для конкретного поля является строчным, то и длину этого поля в байтах), вот это и называется схемой пространственных данных.

Davidow
Новоприбывший
Сообщения: 9
Зарегистрирован: 29 сен 2009, 11:47
Репутация: 0

Re: Работа с FDO в Visual Studio на языке C#

Сообщение Davidow » 08 окт 2009, 14:45

Добрый день господа, помогите пожалуйста в вапросе о захвате данный из Базы данных Оракла.

Соединиться с базой данной у меня получается без всяких проблем. Вот код:

class FDOOracleClass
{
private static IProviderRegistry FDORegistry = FeatureAccessManager.GetProviderRegistry();
private IConnectionManager FDOManager = FeatureAccessManager.GetConnectionManager();
ProviderCollection pcol = FDORegistry.GetProviders();
private IConnection FDOConnection = FeatureAccessManager.GetConnectionManager().CreateConnection("OSGeo.KingOracle.3.4");
public ConnectionState Constate;
string featureclsname;
// Connect to Oracle

public FDOOracleClass(string username, string password, string servicename, string featureclassname)
{
FDOConnection.ConnectionInfo.ConnectionProperties.SetProperty("USERNAME", username);
FDOConnection.ConnectionInfo.ConnectionProperties.SetProperty("PASSWORD", password);
FDOConnection.ConnectionInfo.ConnectionProperties.SetProperty("SERVICE", servicename);
FDOConnection.ConnectionInfo.ConnectionProperties.SetProperty("OracleSchema", servicename);
FDOConnection.ConnectionInfo.ConnectionProperties.SetProperty("KingFdoClass", featureclassname);

featureclsname = featureclassname;
Constate = FDOConnection.Open();

}
Проблеммы возникают когда я хочу захватить определённую гиометрию

Вот мой код

public GeometryCollection SelectAllQuery()
{
GeometryCollection Geo_Collection = new GeometryCollection();
try {
ISelect select = FDOConnection.CreateCommand(CommandType.CommandType_Select)as ISelect;
select.SetFeatureClassName(featureclsname);
Filter filter = Filter.Parse("ID >= 0");
select.Filter = filter;
ComputedIdentifier computedId = Expression.Parse("(ToString(DateTimeProp) as computedId)") as ComputedIdentifier;
select.PropertyNames.Add(computedId);
IFeatureReader reader = select.Execute();

FgfGeometryFactory gFac = new FgfGeometryFactory();

while (reader.ReadNext())
{
Byte[] Tmppts = reader.GetGeometry("Geometry");
Geo_Collection.Add(gFac.CreateGeometryFromFgf(Tmppts));
}
}
catch(OSGeo.FDO.Common.Exception ex)
{
Console.WriteLine(ex.Message.ToString());
}
return Geo_Collection;
}

Дело в том, что мне не удаёться получить какие либо данные.

Посли компиляции IFeatureReader reader = select.Execute();
В reader равен нулю....

Кно может исправить код ?

Или подсказать как получить Все стрики Базы данных ?

Аватара пользователя
JEY
Активный участник
Сообщения: 228
Зарегистрирован: 17 июл 2008, 13:42
Статьи: 1
Репутация: 1

Re: Работа с FDO в Visual Studio на языке C#

Сообщение JEY » 14 окт 2009, 08:32

Добрый день!

Извините, что так поздно просмотрел Ваш вопрос...

На первый взгляд в Вашем исходном коде я ошибок не нашел, вроде все правильно. Однако смутила всего одна вещь, а именно:

Код: Выделить всё

Filter filter = Filter.Parse("ID >= 0");
Попробуйте заменить на:

Код: Выделить всё

Filter filter = Filter.Parse("FeatID >= 0");
Если не получится, то напишите мне...

Davidow
Новоприбывший
Сообщения: 9
Зарегистрирован: 29 сен 2009, 11:47
Репутация: 0

Re: Работа с FDO в Visual Studio на языке C#

Сообщение Davidow » 14 окт 2009, 10:18

Dobryj den', izvinite chto ispol'zuju latinskii bukvy, u menja voznikli problemy s russkoj klaviaturoj.

Soedinenije s Oraclom proizashlo udachno. Probema byla w tom, chto ja peredaval ne pravel'nyje dannyje dlja featureclassname.

Sejchas ja peredaju nazvanije Bazy Dannych, -element Bazy Dannych i straku gde nahoditsja geometrija. -eto vygledit takim obrazom: featureclassname = FDO_TEST~BKM_BAUM~GEOM.
FDO_TEST - nazvanije Bazy Dannych
BKM_Baum - -element w Baze Dannych
GEOM - Odna iz strok Bazy Dannych, gde hranitsja Geometrija w vide Punktov.

U menja voznik takoj vapros, mozhno li s FDO poluchit' wse stroki iz Elementa BKM_Baum?

Naprimer moj Element BKM_Baum soderzhit tri stroki: "Paroda Dereva", "Vysota Derivy" i "GEOM".

Cto by ne zadavat' kazhduju stoku v ruchnuju, a schityvat' ich avtomaticheski.

Dlja Failov est' klass IConnectionInfo s metodoj GetDependetFileNames, pri pomoshchi kotoroj mozhno poluchit' StringCollection so nazvanijami Failov w Papke.

Sushestvuet takoje dlja Baz Dannych?

Davidow
Новоприбывший
Сообщения: 9
Зарегистрирован: 29 сен 2009, 11:47
Репутация: 0

Re: Работа с FDO в Visual Studio на языке C#

Сообщение Davidow » 14 окт 2009, 13:03

Dobryj Den'

Mne udalos' poluchit' wse Stroki iz Elementa BKM_BAUM, ja -eto s'delal pri pomashchi SQL zaprosa. Wot cod:

Код: Выделить всё

public void DatenbankTabelen()
        {

            ISQLCommand sqlCommand = FDOConnection.CreateCommand(CommandType.CommandType_SQLCommand) as ISQLCommand;
            sqlCommand.SQLStatement = "Select *from BKM_BAUM";
            ISQLDataReader reader = sqlCommand.ExecuteReader();
            string[] ColumName = new string[100];
            int stop = reader.GetColumnCount();
            int i = 0;
            for (; i < stop; i++)
            {
                ColumName[i] = reader.GetColumnName(i);

            }
            for (i = 0; i < stop; i++)
            {
                Console.WriteLine(ColumName[i]);
            }


        }
Opjat' zhe voznikaet vopros. A mozhno li pri pomashchi FDO poluchit' wse tablizy USERA FDO_TEST ? Odna iz -etich Tabliz i est' BKM_BAUM.

Davidow
Новоприбывший
Сообщения: 9
Зарегистрирован: 29 сен 2009, 11:47
Репутация: 0

Re: Работа с FDO в Visual Studio на языке C#

Сообщение Davidow » 15 окт 2009, 09:29

Gospoda, pomogite pozhalujsta,

Ja ishchju vozmozhnost' vydat' wse tablizy iz Bazy Dannych pri pomashchi FDO, gde nahodjatsja tol'ko Geomatrija.

Mne udalos' s'delat' eto pri pomashchi SQL, tak wygledit cod

Код: Выделить всё


 public void DatenbankTabelen()
        {

            ISQLCommand sqlCommand = FDOConnection.CreateCommand(CommandType.CommandType_SQLCommand) as ISQLCommand;
            sqlCommand.SQLStatement ="select SDO_TABLE_NAME from MDSYS.SDO_GEOM_METADATA_TABLE where SDO_OWNER='FDO_TEST'";
            ISQLDataReader reader = sqlCommand.ExecuteReader();
            while (reader.ReadNext())
            {
                Console.WriteLine(reader.GetString("SDO_TABLE_NAME"));
            }
            
        }


Podskazhite pozhalujsta kak s'delat' tozhe samoje pri pomashchi FDO ?

Аватара пользователя
JEY
Активный участник
Сообщения: 228
Зарегистрирован: 17 июл 2008, 13:42
Статьи: 1
Репутация: 1

Re: Работа с FDO в Visual Studio на языке C#

Сообщение JEY » 15 окт 2009, 14:21

Приветствую еще раз! Ответ на Ваш вопрос находится здесь. Или я ошибаюсь?

MaZaika
Новоприбывший
Сообщения: 3
Зарегистрирован: 24 фев 2010, 19:26
Репутация: 0
Контактная информация:

Re: Работа с FDO в Visual Studio на языке C#

Сообщение MaZaika » 22 мар 2010, 18:06

Пытаюсь хоть как-нибудь достучаться до FDO... Но он генерирует "странное" исключение.

1. Скачала с сайта http://fdo.osgeo.org/ dll-ки FDO 3.5.0

2. Создала новый проект в MSVS 2008 на C#, подключила библиотеки
OSGeo.FDO.dll
OSGeo.FDO.Common.dll
OSGeo.FDO.Geometry.dll
OSGeo.FDO.Spatial.dll

3. Пыталась обратиться к методам FDO, например:
IProviderRegistry fdoRegistry = FeatureAccessManager.GetProviderRegistry();
или
IConnectionManager fdoManager = FeatureAccessManager.GetConnectionManager();
Выдаёт один и тот же Exception, независимо от действий:

"SEHException was unhandled. Внешний компонент создал исключение"

Перерыла весь интернет, перечитала все Essential, FAQ, cookbook, DeveloperGUIDE, но ничего не смогла обнаружить, что помогло бы в решении моей проблемы.

Конечная цель - получить доступ к SHP-файлу. Может у кого-то есть примеры?

Помогите, пожалуйста...?
Заранее большое спасибо!
Последний раз редактировалось MaZaika 25 мар 2010, 12:19, всего редактировалось 1 раз.

Аватара пользователя
JEY
Активный участник
Сообщения: 228
Зарегистрирован: 17 июл 2008, 13:42
Статьи: 1
Репутация: 1

Re: Работа с FDO в Visual Studio на языке C#

Сообщение JEY » 23 мар 2010, 15:53

Похоже на то, что библиотеки FDO у Вас не в полной комплектации. Опишите последовательность Ваших действий и приложите фрагменты исходного кода, в которых возникает данная ошибка.

MaZaika
Новоприбывший
Сообщения: 3
Зарегистрирован: 24 фев 2010, 19:26
Репутация: 0
Контактная информация:

Re: Работа с FDO в Visual Studio на языке C#

Сообщение MaZaika » 25 мар 2010, 12:18

Спасибо большое за помощь!Вы оказались правы :)

1. Я подключала 4 библиотеки FDO 3.5.0 (хотя в папке с этими библиотеками был ещё целый ряд, которые не удалось явно подключить к проекту, вылетала ошибка). Из всех подключились только вот эти:
OSGeo.FDO.dll
OSGeo.FDO.Common.dll
OSGeo.FDO.Geometry.dll
OSGeo.FDO.Spatial.dll

2. Написала строчку
IProviderRegistry fdoRegistry = FeatureAccessManager.GetProviderRegistry();

Постоянно вылетал Exception:
"SEHException was unhandled. Внешний компонент создал исключение"

3. Как выяснилось, необходимо было дополнительно скопировать все остальные библиотеки в папку Bin/Debug проекта. После того, как скопировала, всё заработало... :)

Ответить

Вернуться в «Общий - ПО»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 24 гостя