Программное создание SHP-слоя
-
- Участник
- Сообщения: 70
- Зарегистрирован: 04 сен 2009, 16:47
- Репутация: 1
Программное создание SHP-слоя
Доброго времени суток.
Подскажите пожалуйста как можно программно создать новый SHP-слой.
При этом систему координат скопировать из имеющегося произвольного слоя.
Заранее спасибо
Подскажите пожалуйста как можно программно создать новый SHP-слой.
При этом систему координат скопировать из имеющегося произвольного слоя.
Заранее спасибо
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Программное создание SHP-слоя
Вам шейп-файл создать надо или слой в карте (ArcMap)? С использование ArcObject или без?
-
- Участник
- Сообщения: 70
- Зарегистрирован: 04 сен 2009, 16:47
- Репутация: 1
Re: Программное создание SHP-слоя
Доброго время суток.
Спасибо что откликнулись
Надо конечно сделать слой
, но если бы он сохранялся как Shp-файл и Lyr.
То так, был бы мой вопрос полным.
Заранее Вам спасибо. Жду Вашей помощи.

Спасибо что откликнулись

Надо конечно сделать слой


То так, был бы мой вопрос полным.
Заранее Вам спасибо. Жду Вашей помощи.

- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Программное создание SHP-слоя
Создание шейпа/класса в БД
http://resources.esri.com/help/9.3/arcg ... 8181d1.htm
Создание слоя из созданного шейпа/класса в БД
http://edndoc.esri.com/arcobjects/8.3/d ... rfiles.htm
http://edndoc.esri.com/arcobjects/8.3/d ... rfiles.htm
http://edndoc.esri.com/arcobjects/8.3/d ... rfiles.htm
Сохранение в lyr
http://edndoc.esri.com/arcobjects/8.3/S ... RFILES.htm
Это может быть интересно
http://edndoc.esri.com/arcobjects/8.3/d ... rfiles.htm
http://resources.esri.com/help/9.3/arcg ... 8181d1.htm
Создание слоя из созданного шейпа/класса в БД
http://edndoc.esri.com/arcobjects/8.3/d ... rfiles.htm
http://edndoc.esri.com/arcobjects/8.3/d ... rfiles.htm
http://edndoc.esri.com/arcobjects/8.3/d ... rfiles.htm
Сохранение в lyr
http://edndoc.esri.com/arcobjects/8.3/S ... RFILES.htm
Это может быть интересно
http://edndoc.esri.com/arcobjects/8.3/d ... rfiles.htm
-
- Участник
- Сообщения: 70
- Зарегистрирован: 04 сен 2009, 16:47
- Репутация: 1
Re: Программное создание SHP-слоя
Большое Вам спасибо за помощь.
Но я не могу понять как работать с IFeatureWorkspace?
Они там могут быть унаследованы двумя способами.
Подскажите где можно почитать об этом.
Заранее спасибо

Но я не могу понять как работать с IFeatureWorkspace?

Они там могут быть унаследованы двумя способами.
Подскажите где можно почитать об этом.
Заранее спасибо
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Программное создание SHP-слоя
http://edndoc.esri.com/arcobjects/9.0/S ... tabase.htm
http://edndoc.esri.com/arcobjects/8.3/S ... alVCPP.htm
http://edndoc.esri.com/arcobjects/8.3/S ... onalVB.htm
http://resources.esri.com/help/9.3/arcg ... d8574f.htm
после открытия IWorkspace приводиться к IFeatureWorkspace
http://edndoc.esri.com/arcobjects/8.3/S ... alVCPP.htm
http://edndoc.esri.com/arcobjects/8.3/S ... onalVB.htm
http://resources.esri.com/help/9.3/arcg ... d8574f.htm
после открытия IWorkspace приводиться к IFeatureWorkspace
-
- Участник
- Сообщения: 70
- Зарегистрирован: 04 сен 2009, 16:47
- Репутация: 1
Re: Программное создание SHP-слоя
Большое спасибо
Буду пробовать

Буду пробовать
-
- Участник
- Сообщения: 70
- Зарегистрирован: 04 сен 2009, 16:47
- Репутация: 1
Re: Программное создание SHP-слоя
Доброго времени суток.
Простите за долгое молчание
Подскажите пожалуйста от какого объекта (или каким образом) получается входной параметр
IWorkspace workspace в этом примере:
http://resources.esri.com/help/9.3/arcg ... 3DF855.htm
В моем случае мне необходимо создать:
1. Базу геоданных на локальной машине;
2. В созданной базе геоданных создать и заполнить значениями Shp-файл (Точечных объектов);
3. Открыть созданный Shp-файл в проекте ArcMap в виде слоя;
4. В открытом слое задать необходимые условные обозначения точкам, в зависимости от параметра.
И все это желательно проделать в автоматическом режиме.
Возможно ли это?
Заранее спасибо за ответ.
Простите за долгое молчание

Подскажите пожалуйста от какого объекта (или каким образом) получается входной параметр
IWorkspace workspace в этом примере:
http://resources.esri.com/help/9.3/arcg ... 3DF855.htm
В моем случае мне необходимо создать:
1. Базу геоданных на локальной машине;
2. В созданной базе геоданных создать и заполнить значениями Shp-файл (Точечных объектов);
3. Открыть созданный Shp-файл в проекте ArcMap в виде слоя;
4. В открытом слое задать необходимые условные обозначения точкам, в зависимости от параметра.
И все это желательно проделать в автоматическом режиме.

Возможно ли это?

Заранее спасибо за ответ.

- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
Re: Программное создание SHP-слоя
Все возможно
Для получения IWorkspace см.
http://resources.esri.com/help/9.3/arcg ... xample.htm
http://edndoc.esri.com/arcobjects/9.0/c ... actory.htm
Уточните какую базу вы создавать хотите enterprise, personal или file?
По созданию шейпа в базе см.
http://edndoc.esri.com/arcobjects/9.2/N ... 1d4fb6.htm
Для получения IWorkspace см.
http://resources.esri.com/help/9.3/arcg ... xample.htm
http://edndoc.esri.com/arcobjects/9.0/c ... actory.htm
Уточните какую базу вы создавать хотите enterprise, personal или file?
По созданию шейпа в базе см.
http://edndoc.esri.com/arcobjects/9.2/N ... 1d4fb6.htm
-
- Участник
- Сообщения: 70
- Зарегистрирован: 04 сен 2009, 16:47
- Репутация: 1
Re: Программное создание SHP-слоя
Пункт 1-3 реализовал таким образомBodyZ писал(а):Доброго времени суток.
Простите за долгое молчание![]()
Подскажите пожалуйста от какого объекта (или каким образом) получается входной параметр
IWorkspace workspace в этом примере:
http://resources.esri.com/help/9.3/arcg ... 3DF855.htm
В моем случае мне необходимо создать:
1. Базу геоданных на локальной машине;
2. В созданной базе геоданных создать и заполнить значениями Shp-файл (Точечных объектов);
3. Открыть созданный Shp-файл в проекте ArcMap в виде слоя;
4. В открытом слое задать необходимые условные обозначения точкам, в зависимости от параметра.
И все это желательно проделать в автоматическом режиме.![]()
Возможно ли это?![]()
Заранее спасибо за ответ.
Код: Выделить всё
public override void OnClick()
{
// TODO: Add Command_Body_Test.OnClick implementation
//MessageBox.Show("Автоматическое добавление слоя");
IMxDocument pMxDocument = m_application.Document as IMxDocument;
IMap pLocalMap;
IMaps pMaps = pMxDocument.Maps;
ILayer pLayer;
for (int i = 0; i <= pMaps.Count - 1; i++)
{
pLocalMap = pMaps.get_Item(i);
string s1 = pLocalMap.Name;
IEnumLayer pEnumLayer = pLocalMap.get_Layers(null, true);
pEnumLayer.Reset();
pLayer = pEnumLayer.Next();
Form_Select_Layer form = new Form_Select_Layer(m_application);
form.ShowDialog();
if (form.IsNeedCopy)
{
while (pLayer.Name != form.SelectedLayerName)//"Комерційні")
pLayer = pEnumLayer.Next();
// Создание БАЗЫ геоданных
try
{
//Клонирование коллекции колонок
IFieldsEdit pNewFields = new FieldsClass();
IClone pCloneField;
IField pNewField;
IFeatureClass pFClass = (pLayer as IFeatureLayer).FeatureClass;
for (int k = 0; k < pFClass.Fields.FieldCount; k++)
{
pCloneField = (IClone)pFClass.Fields.get_Field(k);
pNewField = (IField)pCloneField.Clone();
pNewFields.AddField(pNewField);
}
// END //Клонирование коллекции колонок
//Клонирование системы координат из исходного слоя
ISpatialReference pSR;
IGeoDataset pGeoDS = (IGeoDataset)pLayer;
IClone pClone = pGeoDS.SpatialReference as IClone;
pSR = (ISpatialReference)pClone.Clone();
// END //Клонирование системы координат из исходного слоя
// Создание базы геоданных
IWorkspace pWorkSpace = CreateFileGdbWorkspace("D:\\Gis\\Testing\\", "SampleBodyTest.gdb");
// END // Создание базы геоданны
// Создание набора данных в базе геоданных
IFeatureDataset ftDataSet = CreateFeatureDataset(pWorkSpace, "DatasetBody", pSR);
// END // // Создание набора данных в базе геоданных
// Создание SHP-файла в наборе данных
IFeatureClass ft_Class = CreateFeatureDatasetFeatureClass(ftDataSet, "body_featureclass", pNewFields, "premier");
// END // Создание SHP-файла в наборе данных
// Добавление созданого SHP-файла в проект
IFeatureLayer pNewLayer = new FeatureLayerClass();
pNewLayer.FeatureClass = ft_Class;
pNewLayer.Name = "добавление получилось";
pMxDocument.AddLayer(pNewLayer);
pMxDocument.ActiveView.Refresh();
// CopyShapFile();
// END // Добавление созданого SHP-файла в проект
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
// END // Создание БАЗЫ геоданных
}
}
MessageBox.Show("Слоев больше нет");
}
//++++++++++++++++
//Из документации
//++++++++++++++++
//Функция создания базы геоданных
public IWorkspace CreateFileGdbWorkspace(string PathToGDB, string NameGDB)
{
try
{
// Instantiate a file geodatabase workspace factory and create a file geodatabase.
// The Create method returns a workspace name object.
IWorkspaceFactory workspaceFactory = new FileGDBWorkspaceFactoryClass();
string NewName = NameGDB;// +DateTime.Now.Date.ToString() + DateTime.Now.Hour.ToString();
IWorkspaceName workspaceName = workspaceFactory.Create(PathToGDB,
NewName,
null,
0);
// Cast the workspace name object to the IName interface and open the workspace.
IName name = (IName)workspaceName;
IWorkspace workspace = (IWorkspace)name.Open();
return workspace;
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
return null;
}
}
//Не понятно откуда брать параметр --> workspace????
public IFeatureDataset CreateFeatureDataset(IWorkspace workspace, string fdsName, ISpatialReference fdsSR)
{
IFeatureWorkspace featureWorkspace = (IFeatureWorkspace)workspace;
return featureWorkspace.CreateFeatureDataset(fdsName, fdsSR);
}
// End // //Функция создания базы геоданных
public IFeatureClass CreateFeatureDatasetFeatureClass(IFeatureDataset featureDataset,
String featureClassName, IFields fieldsCollection, String shapeFieldName)
{
IFeatureClassDescription fcDesc = new FeatureClassDescriptionClass();
IObjectClassDescription ocDesc = (IObjectClassDescription)fcDesc;
// Use IFieldChecker to create a validated fields collection.
IFieldChecker fieldChecker = new FieldCheckerClass();
IEnumFieldError enumFieldError = null;
IFields validatedFields = null;
fieldChecker.ValidateWorkspace = featureDataset.Workspace;
fieldChecker.Validate(fieldsCollection, out enumFieldError, out validatedFields);
// The enumFieldError enumerator can be inspected at this point to determine
// which fields were modified during validation.
IFeatureClass featureClass = featureDataset.CreateFeatureClass(featureClassName,
validatedFields, ocDesc.InstanceCLSID, ocDesc.ClassExtensionCLSID,
esriFeatureType.esriFTSimple, fcDesc.ShapeFieldName, "");
return featureClass;
}
в зависимости от атрибутивных данных?
Заранее спасибо
- Дмитрий Барышников
- Гуру
- Сообщения: 2572
- Зарегистрирован: 17 ноя 2009, 19:17
- Репутация: 261
- Откуда: Москва
-
- Участник
- Сообщения: 70
- Зарегистрирован: 04 сен 2009, 16:47
- Репутация: 1
Re: Программное создание SHP-слоя
Большое спасибо.
По ссылке все нашел что надо.
Там же есть и отличные куски готового кода.

По ссылке все нашел что надо.
Там же есть и отличные куски готового кода.

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