Daugiau

Sukurti statmenas nurodyto ilgio polines linijas, kurios išsaugotų originalių daugiakryptių atributus, naudojant „ArcObjects“ ir VBA?


Aš naudoju „ArcGIS 9.2“ ir beviltiškai bandau sukurti statmenas linijas esamoms polilinijoms. Norėčiau, kad statmenos linijos kirtų pradines linijas jų vidurio taške, o statmenos linijos išlaikytų pradinių linijų atributus ir galiausiai norėčiau turėti galimybę kontroliuoti, kiek laiko noriu statmenų (pvz. . 50 metrų)

Scenarijus, kurį radau ir kurį įklijavau žemiau, nuveda mane ten, nes sukuria statmenas linijas vidurio taškuose, tačiau neišlaiko atributų ir neleidžia nustatyti ilgio. Ar kas nors gali pasiūlyti, ką turėčiau pakeisti, kad būtų perkelti atributai, ir leiskite man nustatyti nubrėžtų linijų ilgį.

Parinktis „Explicit Sub Test“ () Dim pEditor kaip IEditor Set pEditor = Application.FindExtensionByName ("ESRI Object Editor") Jei pEditor.EditState <> esriStateEditing Tada MsgBox "pirmiausia pradės redaguoti" Exit Sub End If Dim pEL As IEditLayers Set pEL = pEditor pEL.CurrentLayer.FeatureClass.ShapeType <> esriGeometryPolyline Tada „MsgBox“ tikslinis sluoksnis turi būti polilinija „Exit Sub End If If pEditor.Map.SelectionCount = 0 Tada MsgBox" nieko nepasirinkta "Exit Sub End If Dim pEnumFeat As IEnumFeature IEnumFeat Map.FeatureSelection pEnumFeat.Reset pEditor.StartOperation Dim pFeat As IFeature Set pFeat = pEnumFeat.Toliau darykite, kol pFeat nieko, jei pFeat.Shape.GeometryType = esriGeometryPolyline Tada Dim pNeFePeFeet Set. Shape = MakePerp (pFeat.Shape, _ GetLength (pFeat.Shape)) pNewFeat.Store End if Set pFeat = pEnumFeat.Next Loop pEditor.StopOperation "makeperps" Dim pAV As IActiveView Set pAV = pEd.Pef. Pabaiga Pabaigos funkcija GetLength (pPolyline As IPolyline) Kaip dviguba GetLength = pPolyline.Length End Function Function MakePerp (pBaseLine As IPolyline, ByVal dLen As Double) As IPolyline Dim pPointColl As IPointCollection Set pPointColl = New Polyline Dim pPerpLer As ILine Set pBaseLine.QueryNormal esriNoExtension, 0.5, True, dLen / 2#, pPerpLine pPointColl.AddPoint pPerpLine.ToPoint pBaseLine.QueryNormal esriNoExtension, 0.5, True, dLen / -2#, pPerpLine pPointPollPollPollPollPollPollPollPollPoll.Pol.PollPoll.Pol.Pol.Pol.Pol.Pol.Pol.Pol.Pol.Poll

Norėdami sukurti funkciją, turėsite pataisyti šį kodą.

Pavyzdžiui, įsivaizduokite, kad pasirinkote visas linijas, kurias norite tai padaryti, naudodami „IQueryFilter“.

Kiekvienoje eilutėje jūs nustatysite kirtimo geometriją naudodami savo antrinę dalį ir sukuriate naują įrašą (tam tikroje funkcijų klasėje), nukopijuodami atributus.

Patikrinkite šias nuorodas:

http://edndoc.esri.com/arcobjects/9.1/ComponentHelp/esriGeoDatabase/IQueryFilter.htm

http://edndoc.esri.com/arcobjects/9.0/ComponentHelp/esriGeoDatabase/IRow.htm

http://resources.esri.com/help/9.3/ArcGISEngine/arcobjects/esriGeodatabase/IFeature.htm

http://edndoc.esri.com/arcobjects/9.1/ComponentHelp/esriGeoDatabase/ICursor.htm


Žiūrėti video įrašą: Lesson 1. Macros in Excel. VBA for beginners 2020 (Rugsėjis 2021).