посадить точки

0 голосов
спросил 24 Апр, 06 от Erik (160 баллов) в категории Программные продукты Esri

Всем привет

не знаю как сделатьтакую задачу-

есть перечень точек с координатами ,мне надо програмно создать слой из этих точек (посадить их на слой в соотвествии с координатами)

 

 

6 Ответы

0 голосов
ответил 01 Май, 06 от bess (800 баллов)
Для начал нужно базу создать, где будут храниться координаты... Я это так делал:

    Dim pWorkspaceFactory As IWorkspaceFactory
    Dim pPropset As IPropertySet
    
    Set pPropset = New PropertySet
    pPropset.SetProperty "Database", "C\TEMP\temp.mdb"
    Set pWorkspaceFactory = New AccessWorkspaceFactory
    Set pWorkspaceName = pWorkspaceFactory.Create("C\TEMP", "temp", pPropset, 0)
0 голосов
ответил 01 Май, 06 от bess (800 баллов)
Затем в базе нужно создать новый FeatureClass...
Это будет выглядеть примерно слдеующим образом:

Private Function createDatasetFeatureClass(pFDS As IFeatureDataset, _
                                              Name As String, featType As esriFeatureType, _
                                              Optional geomType As esriGeometryType = esriGeometryPoint, _
                                              Optional pfields As IFields, _
                                              Optional pCLSID As UID, _
                                              Optional pCLSEXT As UID, _
                                              Optional ConfigWord As String = "" _
                                              ) As IFeatureClass

Dim pFieldsEdit As IFieldsEdit
Dim pGeomDef As IGeometryDef
Dim pGeomDefEdit As IGeometryDefEdit
Dim pField As IField
Dim pFieldEdit As IFieldEdit
Dim strShapeFld As String
Dim j As Integer

On Error GoTo EH

Set createDatasetFeatureClass = Nothing
If pFDS Is Nothing Then Exit Function
If Name = "" Then Exit Function

If (pCLSID Is Nothing) Or IsMissing(pCLSID) Then
    Set pCLSID = Nothing
    Set pCLSID = New UID
    
    '' determine the appropriate geometry type corresponding the the feature type
    Select Case featType
      Case esriFTSimple
        pCLSID.Value = "esriGeoDatabase.Feature"
      Case esriFTSimpleJunction
        'geomType = esriGeometryPoint
        pCLSID.Value = "esriGeoDatabase.SimpleJunctionFeature"
      Case esriFTSimpleEdge
        'geomType = esriGeometryPolyline
        pCLSID.Value = "esriGeoDatabase.SimpleEdgeFeature"
      Case esriFTComplexJunction
        pCLSID.Value = "esriGeoDatabase.ComplexJunctionFeature"
      Case esriFTComplexEdge
        'geomType = esriGeometryPolyline
        pCLSID.Value = "esriGeoDatabase.ComplexEdgeFeature"
      Case esriFTAnnotation
        'Exit Function
        pCLSID.Value = "esriGeoDatabase.AnnotationFeature"
      Case esriFTCoverageAnnotation
        pCLSID.Value = "esriGeoDatabase.CoverageAnnotationFeature"
      Case esriFTDimension
        pCLSID.Value = "esriGeoDatabase.DimensionFeature"
      Case esriFTRasterCatalogItem
        pCLSID.Value = "esriGeoDatabase.RasterCatalogItemFeature"
       
    End Select
End If

' establish a fields collection
If (pfields Is Nothing) Or IsMissing(pfields) Then
    Set pFieldsEdit = New Fields
    ''
    '' create the geometry field
    Set pGeomDef = New GeometryDef
    Set pGeomDefEdit = pGeomDef
    
    '' assign the geometry definiton properties.
    With pGeomDefEdit
      .GeometryType = geomType
      .GridCount = 1
      .GridSize(0) = 10
      .AvgNumPoints = 2
      .HasM = False
      .HasZ = False
    End With

    Set pField = New Field
    Set pFieldEdit = pField
    
    'Добавляем поле SHAPE
    pFieldEdit.Name = "shape"
    pFieldEdit.AliasName = "geometry"
    pFieldEdit.Type = esriFieldTypeGeometry
    Set pFieldEdit.GeometryDef = pGeomDef
    pFieldsEdit.AddField pField

    Set pField = New Field
    Set pFieldEdit = pField
    
    'Добавляем поле OBJECTID
    pFieldEdit.Name = "OBJECTID"
    pFieldEdit.AliasName = "object identifier"
    pFieldEdit.Type = esriFieldTypeOID
    pFieldsEdit.AddField pField
    Set pfields = pFieldsEdit
    
    Set pField = New Field
    Set pFieldEdit = pField
    
    'Добавляем поле NAMEOBJECT
    pFieldEdit.Name = "NAMEOBJECT"
    pFieldEdit.AliasName = "object name"
    pFieldEdit.Type = esriFieldTypeString
    pFieldsEdit.AddField pField
    Set pfields = pFieldsEdit

End If

' establish the class extension
If (pCLSEXT Is Nothing) Or IsMissing(pCLSEXT) Then
    Set pCLSEXT = Nothing
End If

' locate the shape field
For j = 0 To pfields.FieldCount - 1
    If pfields.Field(j).Type = esriFieldTypeGeometry Then
      strShapeFld = pfields.Field(j).Name
    End If
Next

Set createD
0 голосов
ответил 01 Май, 06 от bess (800 баллов)
Я если честно и сам до конца в этот текст не въехал... image

Но перед созданием FeatureClass возможно понадобится создать Dataset... Что-то вроде того...

Public Sub CreateNewFeatureDataset(NameFeatureDataset As String, MapSpatialReference As ISpatialReference)
    
    Dim pSpatialReference As ISpatialReference
    Set pSpatialReference = MapSpatialReference
    
    'Создание нового Dataset
    Dim pFeatureDataset As IFeatureDataset
    Set pFeatureDataset = pFeatureWorkspace.CreateFeatureDataset(NameFeatureDataset, pSpatialReference)
    
End Sub
0 голосов
ответил 01 Май, 06 от bess (800 баллов)
Ну а чтобы добавить к слою новую точку, вначале нужно добраться до FeatureClass а уж там колдовать...

    Set pWorFact = New AccessWorkspaceFactory
    Set pWor = pname.Open
    Set pFeatWor = pWor
    Set pWorEdit = pWor
    Set pFeatureClass = pFeatWor.OpenFeatureClass(NameFeature)
    
    pWorEdit.StartEditing True
    pWorEdit.StartEditOperation &nb sp; 
       
    Set pFeature = pFeatureClass.CreateFeature
    Set pPoint = New Point
    pPoint.x = MinX
    pPoint.y = MinY
    Set pFeature.Shape = pPoint

    pFeature.Value(2) = NameObject
    pFeature.Store

    pWorEdit.StopEditOperation
    pWorEdit.StopEditing True

где pname это следующее - Dim pname As IName и в нем хранится имя базы данных которая была создана ранее...
0 голосов
ответил 01 Май, 06 от bess (800 баллов)
Надеюся хоть чего-то прояснил.... image (если еще больше не запутал... image )
0 голосов
ответил 10 Май, 06 от Erik (160 баллов)

Всем спасибо!

попробую использовать ваши советы

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