создание Шейп-файла

0 голосов
спросил 03 Июнь, 04 от Гость (210,080 баллов) в категории Программные продукты Esri

Уважаемые знатоки. не подскажите ,как добавить собственно данные в шейп и прежде всего каким образом можно определить количество существующих записей в шейпе(для получения стартового значения IFeatureCursor)

Текс процедуры для создания шейпа в котором отсутствуют записи следующий:

Public Sub CreateShapefile()

  Const strFolder As String = "D:\Data"
  Const strName As String = "MyShapeFile" ' Dont include .shp extension
  Const strShapeFieldName As String = "Shape"
 
  ' Open the folder to contain the shapefile as a workspace
  Dim pFWS As IFeatureWorkspace
  Dim pWorkspaceFactory As IWorkspaceFactory
  Set pWorkspaceFactory = New ShapefileWorkspaceFactory
  Set pFWS = pWorkspaceFactory.OpenFromFile(strFolder, 0)
 
  ' Set up a simple fields collection
  Dim pFields As IFields
  Dim pFieldsEdit As IFieldsEdit
  Set pFields = New esriCore.Fields
  Set pFieldsEdit = pFields
 
  Dim pField As IField
  Dim pFieldEdit As IFieldEdit
 
  ' Make the shape field
  ' it will need a geometry definition, with a spatial reference
  Set pField = New esriCore.Field
  Set pFieldEdit = pField
  pFieldEdit.Name = strShapeFieldName
  pFieldEdit.Type = esriFieldTypeGeometry
 
  Dim pGeomDef As IGeometryDef
  Dim pGeomDefEdit As IGeometryDefEdit
  Set pGeomDef = New GeometryDef
  Set pGeomDefEdit = pGeomDef
  With pGeomDefEdit
    .GeometryType = esriGeometryPolygon
    Set .SpatialReference = New UnknownCoordinateSystem
  End With
  Set pFieldEdit.GeometryDef = pGeomDef
  pFieldsEdit.AddField pField

  ' Add another miscellaneous text field
  Set pField = New esriCore.Field
  Set pFieldEdit = pField
  With pFieldEdit
      .Length = 30
      .Name = "MiscText"
      .Type = esriFieldTypeString
  End With
  pFieldsEdit.AddField pField
 
  ' Create the shapefile
  ' (some parameters apply to geodatabase options and can be defaulted as Nothing)
  Dim pFeatClass As IFeatureClass
  Set pFeatClass = pFWS.CreateFeatureClass(strName, pFields, Nothing, _
                                           Nothing, esriFTSimple, strShapeFieldName, "")
End Sub

Заранее благодарен.

5 Ответы

0 голосов
ответил 03 Июнь, 04 от Tatkis (2,420 баллов)

Количество записей в шейпе можно посмотреть с помощью процедуры

Set pfcl = pfWS.OpenFeatureClass(FileName)
i= pfcl.FeatureCount(Nothing)

вместо Nothing может стоять любой QueryFilter

Данные в шейп-файл могут добавляться либо с помощью Set pfeatureCursor = pFeatureClass.Insert(True)
Set pFeatureBuffer = pFeatureClass.CreateFeatureBuffer

далее заполняются нужные поля для pFeatureBuffer, после чего     pFeatureCursor.InsertFeature pFeatureBuffer

Также возможно вставить записи в шейп с помощью команды

Set pFeature = pfeatureclass.CreateFeature, после заполнения полей нужными значениями нужна команда

 pFeature.Store

Но это возможно только внутри сеанса редактирования

0 голосов
ответил 03 Июнь, 04 от Гость (210,080 баллов)

Спасибо за помощь

0 голосов
ответил 03 Июнь, 04 от Гость (210,080 баллов)

Уважаемый Tatkis, еще один вопрос.

 Каким образом можно добавить запись на место уже существующей, а не в режиме дозаписи?(В AV версии 3.* такая возможность существовала).

0 голосов
ответил 08 Июнь, 04 от Tatkis (2,420 баллов)

Если Вы хотите удалить одну запись, и на ее место ( по идентификатору FID) добавить другую, то у Вас к сожалению ничего не получится, добавление новой записи возможно только в конец таблицы...

Но Вы можете изменить существующую запись, начав редактирование - при этом ее номер сохранится, а остальные атрибуты можно поменять.

pfeatclass.Update (pQueryFilter,False )

и т.д.

0 голосов
ответил 15 Июнь, 04 от Гость (210,080 баллов)
Спасибо! Я именно об этом и хотел узнать. В версии 3, я поступал именно таким образом. 
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...