Daha çox

ArcObjects və VBA istifadə edərək orijinal polylines xüsusiyyətlərini saxlayan müəyyən uzunluqdakı dik polylines yaratmaq?

ArcObjects və VBA istifadə edərək orijinal polylines xüsusiyyətlərini saxlayan müəyyən uzunluqdakı dik polylines yaratmaq?


ArcGIS 9.2 istifadə edirəm və var olan polylinlərə dik polylinlər yaratmağa can atıram. Dik xətlərin orta nöqtələrdə orijinal xətləri keçməsini istərdim və dik xətlərin orijinal xətlərin xüsusiyyətlərini qorumasını istərdim və nəhayət, dik xətlərin nə qədər olmasını istədiyimi idarə edə bilmək istərdim (məs. 50 metr)

Tapdığım və aşağıda yapışdırdığım bir skript, oranın yaxşı bir hissəsini götürür, çünki orta nöqtələrdə dik xətlər yaradır, lakin atributları saxlamır və ya uzunluğu təyin etməyə icazə vermir. Kimsə atributları ortaya çıxarmaq üçün nəyi dəyişməyim lazım olduğunu təklif edə bilər və çəkilmiş xətlərin uzunluğunu təyin etməyimə icazə verə bilərmi?

Seçim Açıq Alt Testi () Dim pEditor IEditor Set olaraq pEditor = Application.FindExtensionByName ("ESRI Object Editor") Əgər pEditor.EditState <> esriStateEditing Sonra MsgBox "əvvəlcə" Alt pillədən çıxın, əgər Dim pEL IEditLayers Ayarlayarsa pEL.CurrentLayer.FeatureClass.ShapeType <> esriGeometryPolyline Sonra MsgBox "hədəf təbəqəsi polyline olmalıdır" Əgər pEditor.Map.SelectionCount = 0 Əgər MsgBox "heç bir şey seçilməyibsə" Alt Enddən Çıx "Dim pEnumFeat IEnumFeat Olaraq pEnumFeat = pEnumFeature Set p. Map.FeatureSelection pEnumFeat.Reset pEditor.StartOperation Dim pFeat IFeature Set pFeat = pEnumFeat.Next qədər heç bir şey yoxdursa pFeat.Shape.GeometryType = esriGeometryPolyline Sonra Dim pNeFeFetFetFetFetFetFet Shape = MakePerp (pFeat.Shape, _ GetLength (pFeat.Shape)) pNewFeat.Store Ayarlanarsa Bitir pFeat = pEnumFeat.Next Loop pEditor.StopOperation "makeperps" Dim pAV IActiveView Set pAV = pEditor.Mresh pAV olaraq Alt Alt Fonksiyonu GetLength (IP Polyline Olaraq) Double GetLength = pPolyline.Length End Function Funksiyası MakePerp (pBaseLine IPolyline olaraq, ByVal dLen Double) IPolyline Olaraq Dim pPointColl IPointCollection Set olaraq pPointColl = Yeni Polyline Dim pPerpLine Yeni pBaseLine.QueryNormal esriNoExtension, 0.5, True, dLen / 2#, pPerpLine pPointColl.AddPoint pPerpLine.ToPoint pBaseLine.QueryNormal esriNoExtension, 0.5, True, dLen / -2#, pPerPpPPPPPPPPPin

Bir xüsusiyyət yaradan kodu düzəltməlisiniz.

Məsələn, bir IQueryFilter istifadə edərək bunu etmək istədiyiniz bütün çoxlu xətləri seçdiyinizi düşünün.

Hər bir sıra üçün alt hissənizdən istifadə edərək kəsişmə həndəsəsini təyin edəcəksiniz və atributları kopyalayaraq yeni bir qeyd (müəyyən bir xüsusiyyət sinifində) yaradırsınız.

Bu bağlantıları yoxlayın:

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


Videoya baxın: Tech - ArcGIS Engine Application