C# - Shape файлы, атрибутивная таблица

0 голосов
спросил 13 Июль, 05 от Geolog1 (1,060 баллов) в категории Программные продукты Esri

Как?

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

Может кто-нибудь подкинет исходник решения?

 

 

3 Ответы

0 голосов
ответил 13 Июль, 05 от Geolog1 (1,060 баллов)
Вот пример исходника: ESRI.ArcGIS.Geodatabase.IWorkspaceFactory pWSFact; ESRI.ArcGIS.esriSystem.PropertySetClass connectionProperties; ESRI.ArcGIS.Geodatabase.IFeatureWorkspace pShapeWS; ESRI.ArcGIS.Geodatabase.IWorkspaceEdit pShapeWSE; ESRI.ArcGIS.Geodatabase.IFeatureClass Res; ESRI.ArcGIS.Geodatabase.IQueryFilter qFilter=new ESRI.ArcGIS.Geodatabase.QueryFilterClass(); bool isShapeWS; pWSFact=new ESRI.ArcGIS.DataSourcesFile.ShapefileWorkspaceFactoryClass() ; isShapeWS= pWSFact.IsWorkspace("e:\\"); if(!isShapeWS)return; connectionProperties=new ESRI.ArcGIS.esriSystem.PropertySetClass(); connectionProperties.SetProperty("DATABASE", "e:\\"); pShapeWS=(ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)pWSFact. Open(connectionProperties,0); pShapeWSE=(ESRI.ArcGIS.Geodatabase.IWorkspaceEdit)pShapeWS; Res=pShapeWS.OpenFeatureClass("geof"); pShapeWSE.StartEditing(true); pShapeWSE.StartEditOperation(); qFilter.AddField("*"); int i; string s; s="zzz"; Res.GetFeature(0).set_Value(3,s); //первый объект и третие поле Res.Update(qFilter,true); pShapeWSE.StopEditOperation(); pShapeWSE.StopEditing(true);   Я уже 2 дня с этим копаюсь, но так понять не могу. Может я вообще все неправильно делаю и надо реализовать через другие классы?  
0 голосов
ответил 13 Июль, 05 от Alexander1 (32,520 баллов)
Посмотри пример "Insert features using an insert cursor" в ArcObjects Developer Help (там есть исходники и на C#) и адаптируй его под свои нужды.
0 голосов
ответил 14 Июль, 05 от Geolog1 (1,060 баллов)

Спасибо за подсказку. Оттуда наковырял следующее, если кого заинтересует:

//подключение к шейпу

private static IFeatureClass OpenFeatureClass(string stringWorkspace, string stringFeatureClass)

{

IWorkspaceName workspaceName = new WorkspaceNameClass();

workspaceName.PathName = stringWorkspace;

workspaceName.WorkspaceFactoryProgID = "esriDataSourcesFile.ShapefileWorkspaceFactory";

IDatasetName datasetName = new FeatureClassNameClass();

datasetName.Name = stringFeatureClass;

datasetName.WorkspaceName = workspaceName;

IName name = (IName) datasetName;

return (IFeatureClass) name.Open();

}

//сама реализация

private void Form1_Load(object sender, System.EventArgs e)

{

IQueryFilter qFilter=new QueryFilterClass();

qFilter.AddField("*");

int intFeatureCount = 0;

IFeatureClass featureClassOut = OpenFeatureClass(@"e:\", "geof");

if (featureClassOut == null)

{

throw new Exception("Cannot Open Output FeatureClass");

}

 

IFeatureCursor fCursor = featureClassOut.Update(qFilter,true);

IFeature feature = fCursor.NextFeature();

while (feature != null)

{

if (++intFeatureCount == 100)

{

fCursor.Flush();

intFeatureCount = 0;

}

feature.set_Value(feature.Fields.FindField("Name"),"aaa");

listBox1.Items.Add(feature.get_Value(3).ToString());

fCursor.UpdateFeature(feature);

feature = fCursor.NextFeature();

}

fCursor.Flush(); }  
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...