Suite

Comment exporter par lots vers PMF à l'aide d'ArcGIS 10.2 et de VB.Net


J'ai modifié un code que j'ai trouvé en ligne pour exporter par lots une série de documents cartographiques (mxds) vers des fichiers ArcPublisher (PMF). J'ai toutes les licences pertinentes et le code "fonctionne", le seul problème est que les PMF résultants sont tous vides.

Je pense que je sais où réside le problème, en ce sens que je pense que le code peut ne pas (bien le plus probable) lire les données dans les MXD.

J'ai inclus le code :

Protected Overrides Sub OnClick() Dim pGxDialog As IGxDialog Dim pGxObjectFilter As IGxLocationFilter Dim anySelected As Boolean Dim pGxMaps As IEnumGxObject Dim pGxMap As IGxMap Dim pGxFolders As IEnumStartGxObject Dim As pGxLongxObject Dim pGxMap As IGxMap Dim pGxFolders As IEnumStartGxObject Dim As str Dim pGxMapPageLayout As IGxMapPageLayout Dim pPageLayout As IPageLayout ' input mxds pGxObjectFilter = New GxFilterMaps pGxDialog = New GxDialog With pGxDialog .Title = "Sélectionner l'entrée MXDs" = TrueGxFilterMaps pGxDialog = New GxDialog With pGxDialog .Title = "Sélectionner l'entrée MXDs" = TrueGxDo Application.hWnd, pGxMaps) If NotthingSelected Then MsgBox("Cancel") Exit Sub End If ' emplacement de départ, nom strStartingLocation = pGxDialog.FinalLocation.Parent.Name ' dossier de sortie pGxObjectFilter = New GxFilterBasicTypes pGxDialog = New GxDialog = New GxDialog With pGxDialog With pGxObjectFilter = New GxFilterBasicTypes "Sélectionner le dossier de sortie" .AllowMultiSelect = False .St artingLocation = strStartingLocation End With pGxDialog.ObjectFilter = pGxObjectFilter anySelected = pGxDialog.DoModalOpen(My.ArcMap.Application.hWnd, pGxFolders) Si quelque chose est sélectionné Alors pGxFolder = pGxFolders.Next Else MsgBox("Annuler". pGxMap = pGxMaps.Next Do Until pGxMap Is Nothing lngMXDCount = lngMXDCount + 1 pGxMap = pGxMaps.Next Loop If lngMXDCount = 0 Then Exit Sub With My.ArcMap.Application.StatusBar.ProgressBar .Message = "Exportation de MXD vers PMF… " = 0 .MaxRange = lngMXDCount .StepValue = 1 .Show() End With pGxMaps.Reset() pGxMap = pGxMaps.Next Do jusqu'à ce que pGxMap Is Nothing"new Dim Publisherengine As IPMFPublish3 = New PublisherEngine Dim Publishersettings As IPropertySet = PublisherDefaultengine.G pGxMap pGxMapPageLayout = pGxMap pPageLayout = pGxMapPageLayout.PageLayout sFullPathName = pGxFolder.FullName & "" & pGxObject.BaseName & ".pmf" Dim App As IApplication Dim mapdoc As IMxDocument App = My.Arc Map.ThisApplication mapdoc = App.Document Dim pagelayout As IPageLayout = mapdoc.PageLayout Dim defaultview As IActiveView = mapdoc.ActiveView Dim settings As IPropertySet = Publishersettings Dim relativepaths As Boolean = True Dim document As String = sFullPathName Publisherengine.Publish(pagelayout, defaultview settings, relativepaths, document)"end My.ArcMap.Application.StatusBar.ProgressBar.Step() pGxMap = pGxMaps.Next Loop My.ArcMap.Application.StatusBar.ProgressBar.Hide() MsgBox("L'outil ArcPublisher a terminé l'exportation : " & lngMXDCount & vbNewLine & "dans le répertoire suivant : " & pGxFolder.FullName, MsgBoxStyle.OkOnly, "Le processus s'est terminé avec succès") My.ArcMap.Application.CurrentTool = Nothing End Sub

Je suppose que vous essayez de l'exécuter en tant que bouton AddIn depuis ArcMap?

Tout d'abord vous obtenez la mise en page de la carte puis l'ignorez en utilisant la mise en page du Actif MapDocument. Vous obtenez également l'activeview de l'Active MapDocument, pas le document de votre liste de MXD…

Lorsque vous vous connectez à d'autres MapDocuments pour faire quelque chose avec eux, vous devez utiliser le ICarteDocument interface. Cela vous permet de manipuler des mxds sans qu'ArcMap soit ouvert, mais comme ArcMap est ouvert et que le code est en cours d'exécution, vous vous êtes retrouvé dans un problème en utilisant l'objet incorrect. Une erreur facile mais frustrante à commettre.

Voici donc le code corrigé que vous insérez après avoir réinitialisé l'énumérateur. En remarque, je vous suggère de nommer votre pointeur après l'objet et non ce que l'objet crache car cela rend votre code très difficile à lire. Donc dans ton cas renommerpGxMapsaprès l'objet c'est vraiment qui seraitpEnumGxObject. Alors vous et moi savons de quoi vous parlez réellement.

pGxMaps.Reset() pGxMap = pGxMaps.Next Dim pMapDocument As IMapDocument Dim Publisherengine As IPMFPublish3 = Nouveau PublisherEngine Dim Publishersettings As IPropertySet = Publisherengine.GetDefaultPublisherSettings Do Until pGxMap =Nom du chemin d'accès complet FullName & "" & pGxObject.BaseName & ".pmf" ' Se connecter à MapDocument pMapDocument = New MapDocument pMapDocument.Open(pGxObject.FullName) ' Définir les propriétés en fonction de la vue par défaut MapDocument Dim As IActiveView = pMapPageDocument.ActiveView pLapPageLayout = pMapPageLayout = pMapPageLayout = Dim settings As IPropertySet = Publishersettings Dim relativepaths As Boolean = True ' Publish Publisherengine.Publish(pPageLayout, defaultview, settings, relativepaths, sFullPathName) 'Update My.ArcMap.Application.StatusBar.ProgressBar.Step() pGxDoMap = pGapMapsment.Next pMap Boucle fermée


Voir la vidéo: Мехедов. Кастомизация ArcGIS Desktop с помощью надстроек (Octobre 2021).