Sunday, July 31, 2022

Getting Started with ArcGIS and QGIS Python Scripting API - ArcPy and PyQGIS


On this blog, I intend to document some common GIS operation via the Python Scripting API for both ArcGIS (ArcPy) and QGIS (PyQGIS).

Lets begin....


1) The documentation

When you decided to work with a new API, then its documentation should always be your first place to learn more about the API's capabilities. Here below is where you will find the respective docs as at the time of writing.

The ArcGIS (ArcPy) is available at: http://desktop.arcgis.com/en/documentation/
Note that there are two versions of the ArcGIS desktop software: ArcMap (Including ArcCatalog, ArcScene, & ArcGlobe) and ArcGIS Pro. The focus of this blog is on: ArcMap.




 The QGIS (PyQGIS) is available at: QGIS Python API documentation project



You can compliment this docs with good books written by different authors:-

ArcPy related Books:
~ ArcPy and ArcGIS – Geospatial Analysis with Python by Silas Toms
~ Python Scripting for ArcGIS by Paul A. Zandbergen
~ Python For ArcGIS by Laura Tateosian
~ Python Scripting for ArcGIS by Paul A. Zandbergen


PyQGIS related Books:
~ PyQGIS developer cookbook by QGIS Project Team
~ The PyQGIS Programmer's Guide: Extending QGIS 3 with Python 3 by Gary Sherman
~ The Pyqgis Programmer's Guide by Gary Sherman
~ Mastering Geospatial Development with QGIS 3.x: An in-depth guide to becoming proficient in spatial data analysis using QGIS 3.4 and 3.6 with Python by Shammunul Islam, Simon Miles, et al.
~ QGIS Python Programming Cookbook by Joel Lawhead
~ Building Mapping Applications with QGIS by by Erik Westra


2) Launch and customize python window/console

In ArcGIS it is located under 'Geoprocessing' menu while in QGIS, it is under the 'Plugin' menu. Access the respective menus and launch the python window/console. you could also launch the window/console from the related icon on the tools bar.





To customize the ArcGIS python window, right click on the environment and select what you want to customize.



To customize the QGIS python console, click on the 'options' button as seen below. Then select the settings you want to customize accordingly.



3) The built-in documentation

Lets try to see the list of valid methods and attributes for the APIs. The primary object in the ArcGIS API is 'arcpy' so lets call the dir() method on it like this: dir(arcpy)
>>> dir(arcpy)
['ASCII3DToFeatureClass_3d', 'ASCIIToRaster_conversion', 'AcceptConnections', 'AddAttachments_management', 'AddCADFields_conversion', 'AddCodedValueToDomain_management', 'AddColormap_management', 'AddDataStoreItem', 'AddEdgeEdgeConnectivityRuleToGeometricNetwork_management', 'AddEdgeJunctionConnectivityRuleToGeometricNetwork_management', 'AddError', 'AddFeatureClassToTerrain_3d', 'AddFeatureClassToTopology_management', 'AddFieldConflictFilter_management', 'AddFieldDelimiters', 'AddFieldToAnalysisLayer_na', 'AddField_management', 'AddFilesToLasDataset_management', 'AddGeometryAttributes_management', 'AddGlobalIDs_management', 'AddIDMessage', 'AddIncrementingIDField_management', 'AddIndex_management', 'AddItem_arc', 'AddJoin_management', 'AddLocations_na', 'AddMessage', 'AddRasterToGeoPackage_conversion', 'AddRastersToMosaicDataset_management', 'AddRepresentation_cartography', 'AddReturnMessage', 'AddRuleToTopology_management', 'AddSpatialIndex_management', 'AddSubtype_management', 'AddSurfaceInformation_3d', 'AddTerrainPyramidLevel_3d', 'AddToolbox', 'AddWarning', 'AddXY_arc', 'AddXY_management', 'AddZInformation_3d', 'Adjust3DZ_management', 'AggregatePoints_cartography', 'AggregatePolygons_arc', 'AggregatePolygons_cartography', 'AlignFeatures_edit', 'AlignMarkerToStrokeOrFill_cartography', 'AlterAliasName', 'AlterField_management', 'AlterMosaicDatasetSchema_management', 'AlterVersion_management', 'AnalyzeControlPoints_management', 'AnalyzeDatasets_management', 'AnalyzeMosaicDataset_management', 'AnalyzeToolsForPro_management', 'Analyze_management', 'Annotation', 'AppendAnnotation_management', 'AppendControlPoints_management', 'AppendParcelFabric_fabric', 'AppendTerrainPoints_3d', 'Append_arc', 'Append_management', 'ApplyBlockAdjustment_management', 'ApplySymbologyFromLayer_management', 'ArcDLG_arc', 'ArcRoute_arc', 'ArcS57_arc', 'ArcSDESQLExecute', 'ArealInterpolationLayerToPolygons_ga', 'Array', 'AsShape', 'Aspect_3d', 'AssignDefaultToField_management', 'AssignDomainToField_management', 'AverageNearestNeighbor_stats', 'BatchBuildPyramids_management', 'BatchCalculateStatistics_management', 'BatchProject_management', 'BearingDistanceToLine_management', 'Buffer3D_3d', 'Buffer_analysis', 'Buffer_arc', 'BuildBoundary_management', 'BuildFootprints_management', 'BuildMosaicDatasetItemCache_management', 'BuildNetwork_na', 'BuildOverviews_management', 'BuildPyramids_management', 'BuildPyramidsandStatistics_management', 'BuildRasterAttributeTable_management', 'BuildSeamlines_management', 'BuildStereoModel_management', 'BuildTerrain_3d', 'Build_arc', 'CADToGeodatabase_conversion', 'CalculateAdjacentFields_cartography', 'CalculateAreas_stats', 'CalculateCellSizeRanges_management', 'CalculateCentralMeridianAndParallels_cartography', 'CalculateDefaultClusterTolerance_management', 'CalculateDefaultGridIndex_management', 'CalculateDistanceBand_stats', 'CalculateEndTime_management', 'CalculateField_management', 'CalculateGridConvergenceAngle_cartography', 'CalculateLineCaps_cartography', 'CalculateLocations_na', 'CalculatePolygonMainAngle_cartography', 'CalculateRepresentationRule_cartography', 'CalculateStatistics_management', 'CalculateTransformationErrors_edit', 'CalculateUTMZone_cartography', 'CalculateValue_management', 'CalibrateRoutes_lr', 'CentralFeature_stats', 'ChangeLasClassCodes_3d', 'ChangePrivileges_management', 'ChangeTerrainReferenceScale_3d', 'ChangeTerrainResolutionBounds_3d', 'ChangeVersion_management', 'CheckExtension', 'CheckGeometry_management', 'CheckInExtension', 'CheckOutExtension', 'CheckProduct', 'ClassifyLasBuilding_3d', 'ClassifyLasByHeight_3d', 'ClassifyLasGround_3d', 'Clean_arc', 'ClearEnvironment', 'ClearWorkspaceCache_management', 'Clip_analysis', 'Clip_arc', 'Clip_management', 'ClustersOutliersRendered_stats', 'ClustersOutliers_stats', 'CollapseDualLinesToCenterline_arc', 'CollapseDualLinesToCenterline_cartography', 'CollapseRoadDetail_cartography', 'CollectEventsRendered_stats', 'CollectEvents_stats', 'ColorBalanceMosaicDataset_management', 'Command', 'Compact_management', 'CompareReplicaSchema_management', 'CompositeBands_management', 'CompressFileGeodatabaseData_management', 'Compress_management', 'ComputeBlockAdjustment_management', 'ComputeCameraModel_management', 'ComputeControlPoints_management', 'ComputeDirtyArea_management', 'ComputeMosaicCandidates_management', 'ComputePansharpenWeights_management', 'ComputeTiePoints_management', 'ConcatenateDateAndTimeFields_ta', 'ConfigureGeodatabaseLogFileTables_management', 'ConsolidateLayer_management', 'ConsolidateLocator_geocoding', 'ConsolidateLocator_management', 'ConsolidateMap_management', 'ConsolidateResult_management', 'ConstructSightLines_3d', 'ContourAnnotation_cartography', 'ContourList_3d', 'ContourWithBarriers_3d', 'Contour_3d', 'ConvertCoordinateNotation_management', 'ConvertDiagram_schematics', 'ConvertMapServerCacheStorageFormat_server', 'ConvertSpatialWeightsMatrixtoTable_stats', 'ConvertTimeField_management', 'ConvertTimeZone_management', 'CopyFeatures_management', 'CopyParameter', 'CopyParcelFabric_fabric', 'CopyRasterCatalogItems_management', 'CopyRaster_management', 'CopyRows_management', 'CopyRuntimeGdbToFileGdb_conversion', 'CopyTin_3d', 'CopyTraversedSourceFeatures_na', 'Copy_management', 'CountRenderer_stats', 'CreateAddressLocator_geocoding', 'CreateArcInfoWorkspace_management', 'CreateArcSDEConnectionFile_management', 'CreateCartographicPartitions_cartography', 'CreateCompositeAddressLocator_geocoding', 'CreateCustomGeoTransformation_management', 'CreateDatabaseConnection_management', 'CreateDatabaseUser_management', 'CreateDatabaseView_management', 'CreateDiagram_schematics', 'CreateDomain_management', 'CreateEnterpriseGeodatabase_management', 'CreateFeatureDataset_management', 'CreateFeatureclass_management', 'CreateFileGDB_management', 'CreateFishnet_management', 'CreateFolder_management', 'CreateGPSDDraft', 'CreateGeocodeSDDraft', 'CreateGeometricNetwork_management', 'CreateImageSDDraft', 'CreateLabels_arc', 'CreateLasDataset_management', 'CreateMapServerCache_server', 'CreateMapTilePackage_management', 'CreateMosaicDataset_management', 'CreateObject', 'CreateOrthoCorrectedRasterDataset_management', 'CreateOverpass_cartography', 'CreatePansharpenedRasterDataset_management', 'CreatePersonalGDB_management', 'CreateRandomPoints_management', 'CreateRandomRaster_management', 'CreateRandomValueGenerator', 'CreateRasterCatalog_management', 'CreateRasterDataset_management', 'CreateRasterType_management', 'CreateReferencedMosaicDataset_management', 'CreateRelationshipClass_management', 'CreateReplicaFootPrints_management', 'CreateReplicaFromServer_management', 'CreateReplica_management', 'CreateRole_management', 'CreateRoutes_lr', 'CreateRuntimeContent_management', 'CreateSQLiteDatabase_management', 'CreateSchematicFolder_schematics', 'CreateScratchName', 'CreateSpaceTimeCube_stpm', 'CreateSpatialReference_management', 'CreateSpatialType_management', 'CreateSpatiallyBalancedPoints_ga', 'CreateTable_management', 'CreateTerrain_3d', 'CreateThiessenPolygons_analysis', 'CreateTin_3d', 'CreateTopology_management', 'CreateTurnFeatureClass_na', 'CreateUnRegisteredFeatureclass_management', 'CreateUnRegisteredTable_management', 'CreateUnderpass_cartography', 'CreateUniqueName', 'CreateVersion_management', 'CreateVersionedView_management', 'Create_arc', 'CrossValidationResult', 'CrossValidation_ga', 'CulDeSacMasks_cartography', 'Cursor', 'Curvature_3d', 'CutFill_3d', 'DEMToRaster_conversion', 'DLGArc_arc', 'DecimateTinNodes_3d', 'DecryptPYT', 'DefineMosaicDatasetNoData_management', 'DefineOverviews_management', 'DefineProjection_arc', 'DefineProjection_management', 'DeleteCodedValueFromDomain_management', 'DeleteColormap_management', 'DeleteDomain_management', 'DeleteFeatures_management', 'DeleteField_management', 'DeleteGlobeServerCache_server', 'DeleteGridsAndGraticules_cartography', 'DeleteIdentical_management', 'DeleteMapServerCache_server', 'DeleteMosaicDataset_management', 'DeleteRasterAttributeTable_management', 'DeleteRasterCatalogItems_management', 'DeleteRows_management', 'DeleteSchemaGeodatabase_management', 'DeleteTerrainPoints_3d', 'DeleteVersion_management', 'Delete_management', 'DelineateBuiltUpAreas_cartography', 'DelineateTinDataArea_3d', 'DensifySamplingNetwork_ga', 'Densify_edit', 'Describe', 'DetectFeatureChanges_management', 'DetectGraphicConflict_cartography', 'DiagnoseVersionMetadata_management', 'DiagnoseVersionTables_management', 'Dice_management', 'Difference3D_3d', 'DiffusionInterpolationWithBarriers_ga', 'Dimension', 'DirectionalDistribution_stats', 'DirectionalMean_stats', 'Directions_na', 'DisableArchiving_management', 'DisableAttachments_management', 'DisableEditorTracking_management', 'DisconnectUser', 'DisperseMarkers_cartography', 'DissolveNetwork_na', 'DissolveRouteEvents_lr', 'Dissolve_arc', 'Dissolve_management', 'Divide_3d', 'DomainToTable_management', 'DownloadRasters_management', 'DropIndex_arc', 'DropItem_arc', 'DropRepresentation_cartography', 'ESRITranslator_conversion', 'EdgematchFeatures_edit', 'EditRasterFunction_management', 'EditTin_3d', 'EliminatePolygonPart_management', 'Eliminate_arc', 'Eliminate_management', 'EmergingHotSpotAnalysis_stpm', 'EmpiricalBayesianKriging_ga', 'EnableArchiving_management', 'EnableAttachments_management', 'EnableEditorTracking_management', 'EnableEnterpriseGeodatabase_management', 'EncloseMultiPatch_3d', 'EncryptPYT', 'ErasePoint_edit', 'Erase_analysis', 'Erase_arc', 'ExcelToTable_conversion', 'ExecuteError', 'ExecuteWarning', 'Exists', 'ExploratoryRegression_stats', 'ExportAcknowledgementMessage_management', 'ExportCAD_conversion', 'ExportDataChangeMessage_management', 'ExportGeodatabaseConfigurationKeywords_management', 'ExportMapServerCache_server', 'ExportMetadataMultiple_conversion', 'ExportMetadata_conversion', 'ExportMosaicDatasetGeometry_management', 'ExportMosaicDatasetItems_management', 'ExportMosaicDatasetPaths_management', 'ExportRasterCatalogPaths_management', 'ExportRasterWorldFile_management', 'ExportReplicaSchema_management', 'ExportTileCache_management', 'ExportTo3DWebScene_3d', 'ExportTopologyErrors_management', 'ExportWebMap_server', 'ExportXMLWorkspaceDocument_management', 'ExportXYv_stats', 'Export_arc', 'ExtendLine_edit', 'Extent', 'ExtractDataAndEmailTask_server', 'ExtractDataTask_server', 'ExtractData_server', 'ExtractLas_3d', 'ExtractPackage_management', 'ExtractSubDataset_management', 'ExtractValuesToTable_ga', 'ExtrudeBetween_3d', 'FeatureClassToFeatureClass_conversion', 'FeatureClassToGeodatabase_conversion', 'FeatureClassToShapefile_conversion', 'FeatureClassZToASCII_3d', 'FeatureCompare_management', 'FeatureEnvelopeToPolygon_management', 'FeatureOutlineMasks_cartography', 'FeatureSet', 'FeatureTo3DByAttribute_3d', 'FeatureToLine_management', 'FeatureToNetCDF_md', 'FeatureToPoint_management', 'FeatureToPolygon_management', 'FeatureToRaster_conversion', 'FeatureVerticesToPoints_management', 'FeatureclassToCoverage_conversion', 'FeaturesFromCityEngineRules_3d', 'FeaturesToJSON_conversion', 'Field', 'FieldInfo', 'FieldMap', 'FieldMappings', 'FileCompare_management', 'Filter', 'FindClosestFacilities_na', 'FindConflicts_arc', 'FindDisconnectedFeaturesInGeometricNetwork_management', 'FindIdentical_management', 'FindRoutes_na', 'FlipLine_edit', 'Flip_management', 'FloatToRaster_conversion', 'Float_3d', 'Frequency_analysis', 'FromScriptingArcObject', 'FromWKB', 'FromWKT', 'GACalculateZValue_ga', 'GACreateGeostatisticalLayer_ga', 'GAGetModelParameter_ga', 'GALayerToContour_ga', 'GALayerToGrid_ga', 'GALayerToPoints_ga', 'GAMovingWindowKriging_ga', 'GANeighborhoodSelection_ga', 'GASemivariogramSensitivity_ga', 'GASetModelParameter_ga', 'GPXtoFeatures_conversion', 'GaussianGeostatisticalSimulations_ga', 'Generalize_edit', 'GenerateAttachmentMatchTable_management', 'GenerateEdgematchLinks_edit', 'GenerateExcludeArea_management', 'GenerateFgdbLicense_management', 'GenerateLicensedFgdb_management', 'GenerateMapServerCacheTilingScheme_server', 'GenerateNearTable_analysis', 'GenerateNetworkSpatialWeights_stats', 'GenerateOriginDestinationCostMatrix_na', 'GeneratePointCloud_management', 'GeneratePointsAlongLines_management', 'GenerateRasterFromRasterFunction_management', 'GenerateRubbersheetLinks_edit', 'GenerateServiceAreas_na', 'GenerateSpatialWeightsMatrix_stats', 'GenerateTessellation_management', 'GenerateTileCacheTilingScheme_management', 'Generate_arc', 'GeoProcessor', 'GeoTaggedPhotosToPoints_management', 'GeocodeAddresses_geocoding', 'GeodeticDensify_management', 'GeographicallyWeightedRegression_stats', 'Geometry', 'GeostatisticalDatasets', 'GetActivePortalURL', 'GetArgumentCount', 'GetCellValue_management', 'GetCount_management', 'GetIDMessage', 'GetImageEXIFProperties', 'GetInstallInfo', 'GetLayoutTemplatesInfo_server', 'GetLogHistory', 'GetMaxSeverity', 'GetMessage', 'GetMessageCount', 'GetMessages', 'GetPackageInfo', 'GetParameter', 'GetParameterAsText', 'GetParameterCount', 'GetParameterInfo', 'GetParameterValue', 'GetRasterProperties_management', 'GetReturnCode', 'GetSeverity', 'GetSeverityLevel', 'GetSigninToken', 'GetSystemEnvironment', 'GetUTMFromLocation', 'GlobalPolynomialInterpolation_ga', 'Graph', 'GraphTemplate', 'GraphicBuffer_analysis', 'GridIndexFeatures_cartography', 'GroupingAnalysis_stats', 'HighLowClustering_stats', 'HillShade_3d', 'HotSpotsRendered_stats', 'HotSpots_stats', 'IDEdit_arc', 'IDW_ga', 'Identity_analysis', 'Identity_arc', 'Idw_3d', 'Import3DFiles_3d', 'ImportCADAnnotation_conversion', 'ImportCoverageAnnotation_conversion', 'ImportFromE00_conversion', 'ImportGeodatabaseConfigurationKeywords_management', 'ImportMapServerCache_server', 'ImportMessage_management', 'ImportMetadata_conversion', 'ImportMosaicDatasetGeometry_management', 'ImportReplicaSchema_management', 'ImportTileCache_management', 'ImportToolbox', 'ImportXMLWorkspaceDocument_management', 'Import_arc', 'IncreaseMaximumEdges_na', 'IncrementalSpatialAutocorrelation_stats', 'Index', 'IndexItem_arc', 'InsertCursor', 'Inside3D_3d', 'Int_3d', 'Integrate_management', 'InterpolateFromPointCloud_management', 'InterpolatePolyToPatch_3d', 'InterpolateShape_3d', 'Intersect3DLineWithMultiPatch_3d', 'Intersect3DLineWithSurface_3d', 'Intersect3D_3d', 'Intersect_analysis', 'Intersect_arc', 'IntersectingLayersMasks_cartography', 'Intervisibility_3d', 'IsClosed3D_3d', 'IsSynchronous', 'JSONToFeatures_conversion', 'JoinField_management', 'JoinItem_arc', 'KMLToLayer_conversion', 'KernelInterpolationWithBarriers_ga', 'Kriging_3d', 'LASToMultipoint_3d', 'LandXMLToTin_3d', 'LasDatasetStatistics_management', 'LasDatasetToRaster_conversion', 'LasDatasetToTin_3d', 'LasPointStatsAsRaster_management', 'LasPointStatsByArea_3d', 'Layer3DToFeatureClass_3d', 'LayerToKML_conversion', 'LineOfSight_3d', 'ListDataStoreItems', 'ListDatasets', 'ListEnvironments', 'ListFeatureClasses', 'ListFields', 'ListFiles', 'ListIndexes', 'ListInstallations', 'ListPortalURLs', 'ListPrinterNames', 'ListRasters', 'ListSpatialReferences', 'ListTables', 'ListToolboxes', 'ListTools', 'ListTransformations', 'ListUsers', 'ListVersions', 'ListWorkspaces', 'LoadSettings', 'LoadTopologyToParcelFabric_fabric', 'LocalOutlierAnalysis_stpm', 'LocalPolynomialInterpolation_ga', 'LocateFeaturesAlongRoutes_lr', 'LocateLasPointsByProximity_3d', 'LocateOutliers_3d', 'LogUsageMetering', 'Lookup_3d', 'MDPublisher_conversion', 'MXDToWebMap_server', 'MakeClosestFacilityLayer_na', 'MakeFeatureLayer_management', 'MakeGraph_management', 'MakeGridsAndGraticulesLayer_cartography', 'MakeImageServerLayer_management', 'MakeLasDatasetLayer_management', 'MakeLocationAllocationLayer_na', 'MakeMosaicLayer_management', 'MakeNetCDFFeatureLayer_md', 'MakeNetCDFRasterLayer_md', 'MakeNetCDFTableView_md', 'MakeODCostMatrixLayer_na', 'MakeOPeNDAPRasterLayer_md', 'MakeParcelFabricLayer_fabric', 'MakeParcelFabricTableView_fabric', 'MakeQueryLayer_management', 'MakeQueryTable_management', 'MakeRasterCatalogLayer_management', 'MakeRasterLayer_management', 'MakeRouteEventLayer_lr', 'MakeRouteLayer_na', 'MakeServiceAreaLayer_na', 'MakeTableView_management', 'MakeTrackingLayer_ta', 'MakeVehicleRoutingProblemLayer_na', 'MakeWCSLayer_management', 'MakeXYEventLayer_management', 'ManageGlobeServerCacheTiles_server', 'ManageMapServerCacheScales_server', 'ManageMapServerCacheStatus_server', 'ManageMapServerCacheTiles_server', 'ManageTileCache_management', 'MapServerCacheTilingSchemeToPolygons_cartography', 'MapToKML_conversion', 'MatchPhotosToRowsByTime_management', 'MeanCenter_stats', 'MedianCenter_stats', 'MergeDividedRoads_cartography', 'MergeMosaicDatasetItems_management', 'Merge_management', 'MetadataImporter_conversion', 'MigrateRelationshipClass_management', 'MigrateStorage_management', 'MinimumBoundingGeometry_management', 'MinimumBoundingVolume_3d', 'Minus_3d', 'Mirror_management', 'MosaicToNewRaster_management', 'Mosaic_management', 'MultiDistanceSpatialClustering_stats', 'MultiPatchFootprint_3d', 'MultipartToSinglepart_management', 'Multipatch', 'MultipatchToCollada_conversion', 'MultipatchToRaster_conversion', 'MultipleRingBuffer_analysis', 'Multipoint', 'NaturalNeighbor_3d', 'Near3D_3d', 'Near_analysis', 'Near_arc', 'NetCDFFileProperties', 'NumPyArrayToRaster', 'ObserverPoints_3d', 'OptimizedHotSpotAnalysis_stats', 'OptimizedOutlierAnalysis_stats', 'OrdinaryLeastSquares_stats', 'OverlayRouteEvents_lr', 'PDFToTIFF_conversion', 'PackageLayer_management', 'PackageLocator_geocoding', 'PackageLocator_management', 'PackageMap_management', 'PackageResult_management', 'Parameter', 'ParseFieldName', 'ParseTableName', 'PivotTable_management', 'Plus_3d', 'Point', 'PointDistance_analysis', 'PointDistance_arc', 'PointFileInformation_3d', 'PointGeometry', 'PointNode_arc', 'PointToRaster_conversion', 'PointsToLine_management', 'PolyRegion_arc', 'Polygon', 'PolygonNeighbors_analysis', 'PolygonToLine_management', 'PolygonToRaster_conversion', 'PolygonVolume_3d', 'Polyline', 'PolylineToRaster_conversion', 'PopulateAlternateIDFields_na', 'ProductInfo', 'ProjectRaster_management', 'Project_arc', 'Project_management', 'PropagateDisplacement_cartography', 'QuickExport_interop', 'QuickImport_interop', 'RadialBasisFunctions_ga', 'RandomNumberGenerator', 'Raster', 'RasterCatalogToRasterDataset_management', 'RasterCompare_management', 'RasterDomain_3d', 'RasterTin_3d', 'RasterToASCII_conversion', 'RasterToDTED_management', 'RasterToFloat_conversion', 'RasterToGeodatabase_conversion', 'RasterToMultipoint_3d', 'RasterToNetCDF_md', 'RasterToNumPyArray', 'RasterToOtherFormat_conversion', 'RasterToPoint_conversion', 'RasterToPolygon_conversion', 'RasterToPolyline_conversion', 'RasterToVideo_conversion', 'ReExportUnacknowledgedMessages_management', 'RebuildAddressLocator_geocoding', 'RebuildGeometricNetwork_management', 'RebuildIndexes_management', 'RecalculateFeatureClassExtent_management', 'ReclassByASCIIFile_3d', 'ReclassByTable_3d', 'Reclassify_3d', 'ReconcileVersion_management', 'ReconcileVersions_management', 'RecordSet', 'RecoverFileGDB_management', 'RefreshActiveView', 'RefreshCatalog', 'RefreshTOC', 'RegionClass_arc', 'RegionPoly_arc', 'RegisterAsVersioned_management', 'RegisterRaster_management', 'RegisterWithGeodatabase_management', 'RegularizeBuildingFootprint_3d', 'RematchAddresses_geocoding', 'RemoveAttachments_management', 'RemoveConnectivityRuleFromGeometricNetwork_management', 'RemoveDataStoreItem', 'RemoveDomainFromField_management', 'RemoveEmptyFeatureClassFromGeometricNetwork_management', 'RemoveFeatureClassFromTerrain_3d', 'RemoveFeatureClassFromTopology_management', 'RemoveFieldConflictFilter_management', 'RemoveFilesFromLasDataset_management', 'RemoveIndex_management', 'RemoveJoin_management', 'RemoveOverride_cartography', 'RemoveRastersFromMosaicDataset_management', 'RemoveRuleFromTopology_management', 'RemoveSpatialIndex_management', 'RemoveSubtype_management', 'RemoveTerrainPyramidLevel_3d', 'RemoveToolbox', 'Rename_management', 'Renode_arc', 'RepairGeometry_management', 'RepairMosaicDatasetPaths_management', 'RepairRasterCatalogPaths_management', 'RepairVersionMetadata_management', 'RepairVersionTables_management', 'ReplaceTerrainPoints_3d', 'Resample_management', 'Rescale_management', 'Reselect_arc', 'ResetEnvironments', 'ResetProgressor', 'ResolveBuildingConflicts_cartography', 'ResolveRoadConflicts_cartography', 'Result', 'ReverseGeocode_geocoding', 'Rotate_management', 'Row', 'RubbersheetFeatures_edit', 'S57Arc_arc', 'SDTSExport_arc', 'SDTSImport_arc', 'SaveGraph_management', 'SaveSettings', 'SaveToLayerFile_management', 'Schema', 'SearchCursor', 'SearchNeighborhoodSmooth', 'SearchNeighborhoodSmoothCircular', 'SearchNeighborhoodStandard', 'SearchNeighborhoodStandardCircular', 'SelectByDimension_md', 'SelectData_management', 'SelectFeatureByOverride_cartography', 'SelectLayerByAttribute_management', 'SelectLayerByLocation_management', 'Select_analysis', 'SendEmailWithZipFileAttachment_server', 'SetClusterTolerance_management', 'SetDefaultSubtype_management', 'SetFlowDirection_management', 'SetLasClassCodesUsingFeatures_3d', 'SetLayerRepresentation_cartography', 'SetLogHistory', 'SetMosaicDatasetProperties_management', 'SetParameter', 'SetParameterAsText', 'SetProduct', 'SetProgressor', 'SetProgressorLabel', 'SetProgressorPosition', 'SetRasterProperties_management', 'SetRepresentationControlPointAtIntersect_cartography', 'SetRepresentationControlPointByAngle_cartography', 'SetSeverityLevel', 'SetSubtypeField_management', 'SetValueForRangeDomain_management', 'SharePackage_management', 'Shift_management', 'SignInToPortal_server', 'SignOutFromPortal_server', 'SimilaritySearch_stats', 'SimplifyBuilding_arc', 'SimplifyBuilding_cartography', 'SimplifyLineOrPolygon_arc', 'SimplifyLine_cartography', 'SimplifyPolygon_cartography', 'SkylineBarrier_3d', 'SkylineGraph_3d', 'Skyline_3d', 'Slice_3d', 'Slope_3d', 'SmoothLine_cartography', 'SmoothPolygon_cartography', 'Snap_edit', 'SolveLocationAllocation_na', 'SolveVehicleRoutingProblem_na', 'Solve_na', 'SortCodedValueDomain_management', 'Sort_management', 'SpatialAutocorrelation_stats', 'SpatialJoin_analysis', 'SpatialReference', 'SplineWithBarriers_3d', 'Spline_3d', 'SplitByAttributes_analysis', 'SplitLineAtPoint_management', 'SplitLine_management', 'SplitMosaicDatasetItems_management', 'SplitRaster_management', 'Split_analysis', 'Split_arc', 'StackProfile_3d', 'StageService_server', 'StandardDistance_stats', 'StandardizeAddresses_geocoding', 'Statistics_analysis', 'StripMapIndexFeatures_cartography', 'SubsetFeatures_ga', 'SunShadowVolume_3d', 'SurfaceAspect_3d', 'SurfaceContour_3d', 'SurfaceDifference_3d', 'SurfaceSlope_3d', 'SurfaceVolume_3d', 'SymDiff_analysis', 'SynchronizeChanges_management', 'SynchronizeMetadata_conversion', 'SynchronizeMosaicDataset_management', 'TINCompare_management', 'TableCompare_management', 'TableSelect_analysis', 'TableToDBASE_conversion', 'TableToDomain_management', 'TableToEllipse_management', 'TableToExcel_conversion', 'TableToGeodatabase_conversion', 'TableToNetCDF_md', 'TableToRelationshipClass_management', 'TableToTable_conversion', 'TabulateIntersection_analysis', 'TerrainToPoints_3d', 'TerrainToRaster_3d', 'TerrainToTin_3d', 'TestSchemaLock', 'Thiessen_arc', 'ThinRoadNetwork_cartography', 'TigerArc_arc', 'TigerTool_arc', 'TileLas_3d', 'TiledLabelsToAnnotation_cartography', 'Times_3d', 'TinDomain_3d', 'TinEdge_3d', 'TinLine_3d', 'TinNode_3d', 'TinPolygonTag_3d', 'TinRaster_3d', 'TinTriangle_3d', 'Tolerance_arc', 'TopoToRasterByFile_3d', 'TopoToRaster_3d', 'TraceGeometricNetwork_management', 'TrackIntervalsToFeature_ta', 'TrackIntervalsToLine_ta', 'TransferAttributes_edit', 'TransformFeatures_edit', 'TransformRouteEvents_lr', 'Transform_arc', 'TransposeFields_management', 'Trend_3d', 'TrimLine_edit', 'TruncateTable_management', 'TurnTableToTurnFeatureClass_na', 'USGSMPTranslator_conversion', 'UncompressFileGeodatabaseData_management', 'Ungenerate_arc', 'Union3D_3d', 'Union_analysis', 'Union_arc', 'UnregisterAsVersioned_management', 'UnsplitLine_management', 'UpdateAnalysisLayerAttributeParameter_na', 'UpdateAnnotation_management', 'UpdateByAlternateIDFields_na', 'UpdateByGeometry_na', 'UpdateCursor', 'UpdateDiagram_schematics', 'UpdateDiagrams_schematics', 'UpdateEnterpriseGeodatabaseLicense_management', 'UpdateOverride_cartography', 'UpdateTrafficData_na', 'UpdateTrafficIncidents_na', 'Update_analysis', 'Update_arc', 'UpgradeDataset_management', 'UpgradeGDB_management', 'UpgradeMapServerCacheStorageFormat_server', 'UpgradeMetadata_conversion', 'UpgradeNetwork_na', 'UpgradeParcelFabric_fabric', 'UpgradeSpatialReference_management', 'UploadServiceDefinition_server', 'Usage', 'VPFExport_arc', 'VPFImport_arc', 'VPFTile_arc', 'ValidateDataStoreItem', 'ValidateFieldName', 'ValidateMetadataMultiple_conversion', 'ValidateMetadata_conversion', 'ValidateTableName', 'ValidateTopology_management', 'Value', 'ValueTable', 'VerifyAndRepairGeometricNetworkConnectivity_management', 'Viewshed2_3d', 'Viewshed_3d', 'Visibility_3d', 'VisualizeSpaceTimeCube2D_stpm', 'VisualizeSpaceTimeCube3D_stpm', 'WFSToFeatureClass_conversion', 'WarpFromFile_management', 'Warp_management', 'WorkspaceToRasterCatalog_management', 'WorkspaceToRasterDataset_management', 'XMLSchemaValidator_conversion', 'XSLTransform_conversion', 'XYToLine_management', 'ZRenderer_stats', '_NumPyArrayToRaster', '_RasterToNumPyArray', '__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__', '_base', '_ga', '_gptooldoc', '_graph', '_management', '_mapping', '_na', 'analysis', 'arc', 'arcobjectconversion', 'arcobjects', 'arcpy', 'cartography', 'conversion', 'convertArcObjectToPythonObject', 'da', 'ddd', 'edit', 'env', 'f', 'fabric', 'ga', 'geocoding', 'geometries', 'geoprocessing', 'glob', 'gp', 'imp', 'import_local', 'interop', 'lr', 'management', 'mapping', 'md', 'mixins', 'na', 'numpy', 'os', 'passthrough_attr', 'sa', 'schematics', 'server', 'stats', 'stpm', 'sys', 'ta', 'time', 'toolbox', 'utils', 'warnings']


For QGIS it is called 'iface', so we do dir(iface).
>>> dir(iface)
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', 'actionAbout', 'actionAddAfsLayer', 'actionAddAllToOverview', 'actionAddAmsLayer', 'actionAddFeature', 'actionAddOgrLayer', 'actionAddPart', 'actionAddPgLayer', 'actionAddRasterLayer', 'actionAddRing', 'actionAddToOverview', 'actionAddWmsLayer', 'actionAllEdits', 'actionCancelAllEdits', 'actionCancelEdits', 'actionCheckQgisVersion', 'actionCopyFeatures', 'actionCopyLayerStyle', 'actionCreatePrintLayout', 'actionCustomProjection', 'actionCutFeatures', 'actionDeletePart', 'actionDeleteRing', 'actionDeleteSelected', 'actionDraw', 'actionDuplicateLayer', 'actionExit', 'actionFeatureAction', 'actionHelpContents', 'actionHideAllLayers', 'actionHideDeselectedLayers', 'actionHideSelectedLayers', 'actionIdentify', 'actionLayerProperties', 'actionLayerSaveAs', 'actionManagePlugins', 'actionMapTips', 'actionMeasure', 'actionMeasureArea', 'actionMoveFeature', 'actionNewBookmark', 'actionNewProject', 'actionNewVectorLayer', 'actionOpenFieldCalculator', 'actionOpenProject', 'actionOpenStatisticalSummary', 'actionOpenTable', 'actionOptions', 'actionPan', 'actionPanToSelected', 'actionPasteFeatures', 'actionPasteLayerStyle', 'actionPluginListSeparator', 'actionProjectProperties', 'actionQgisHomePage', 'actionRemoveAllFromOverview', 'actionRollbackAllEdits', 'actionRollbackEdits', 'actionSaveActiveLayerEdits', 'actionSaveAllEdits', 'actionSaveEdits', 'actionSaveMapAsImage', 'actionSaveProject', 'actionSaveProjectAs', 'actionSelect', 'actionSelectFreehand', 'actionSelectPolygon', 'actionSelectRadius', 'actionSelectRectangle', 'actionShowAllLayers', 'actionShowBookmarks', 'actionShowLayoutManager', 'actionShowPythonDialog', 'actionShowSelectedLayers', 'actionSimplifyFeature', 'actionSplitFeatures', 'actionSplitParts', 'actionToggleEditing', 'actionToggleFullScreen', 'actionVertexTool', 'actionVertexToolActiveLayer', 'actionZoomActualSize', 'actionZoomFullExtent', 'actionZoomIn', 'actionZoomLast', 'actionZoomNext', 'actionZoomOut', 'actionZoomToLayer', 'actionZoomToSelected', 'activeLayer', 'addCustomActionForLayer', 'addCustomActionForLayerType', 'addDatabaseToolBarIcon', 'addDatabaseToolBarWidget', 'addDockWidget', 'addLayerMenu', 'addMeshLayer', 'addPluginToDatabaseMenu', 'addPluginToMenu', 'addPluginToRasterMenu', 'addPluginToVectorMenu', 'addPluginToWebMenu', 'addProject', 'addRasterLayer', 'addRasterToolBarIcon', 'addRasterToolBarWidget', 'addToolBar', 'addToolBarIcon', 'addToolBarWidget', 'addUserInputWidget', 'addVectorLayer', 'addVectorToolBarIcon', 'addVectorToolBarWidget', 'addWebToolBarIcon', 'addWebToolBarWidget', 'addWindow', 'advancedDigitizeToolBar', 'askForDatumTransform', 'attributesToolBar', 'blockSignals', 'browserModel', 'buildStyleSheet', 'cadDockWidget', 'childEvent', 'children', 'closeMapCanvas', 'connectNotify', 'copySelectionToClipboard', 'createNewMapCanvas', 'currentLayerChanged', 'currentThemeChanged', 'customEvent', 'dataSourceManagerToolBar', 'databaseMenu', 'databaseToolBar', 'defaultStyleSheetFont', 'defaultStyleSheetOptions', 'deleteLater', 'deregisterLocatorFilter', 'destroyed', 'digitizeToolBar', 'disconnect', 'disconnectNotify', 'dumpObjectInfo', 'dumpObjectTree', 'dynamicPropertyNames', 'editMenu', 'editableLayers', 'event', 'eventFilter', 'fileToolBar', 'findChild', 'findChildren', 'firstRightStandardMenu', 'getFeatureForm', 'helpMenu', 'helpToolBar', 'iconSize', 'inherits', 'initializationCompleted', 'insertAddLayerAction', 'installEventFilter', 'invalidateLocatorResults', 'isSignalConnected', 'isWidgetType', 'isWindowType', 'killTimer', 'layerMenu', 'layerSavedAs', 'layerToolBar', 'layerTreeCanvasBridge', 'layerTreeView', 'layoutDesignerClosed', 'layoutDesignerOpened', 'layoutDesignerWillBeClosed', 'mainWindow', 'mapCanvas', 'mapCanvases', 'mapNavToolToolBar', 'messageBar', 'messageTimeout', 'metaObject', 'moveToThread', 'newLayerMenu', 'newProject', 'newProjectCreated', 'objectName', 'objectNameChanged', 'openFeatureForm', 'openLayoutDesigner', 'openLayoutDesigners', 'openMessageLog', 'openURL', 'parent', 'pasteFromClipboard', 'pluginManagerInterface', 'pluginMenu', 'pluginToolBar', 'preloadForm', 'projectMenu', 'projectRead', 'property', 'pyqtConfigure', 'rasterMenu', 'rasterToolBar', 'receivers', 'registerCustomDropHandler', 'registerCustomLayoutDropHandler', 'registerLocatorFilter', 'registerMainWindowAction', 'registerMapLayerConfigWidgetFactory', 'registerOptionsWidgetFactory', 'reloadConnections', 'removeAddLayerAction', 'removeCustomActionForLayerType', 'removeDatabaseToolBarIcon', 'removeDockWidget', 'removeEventFilter', 'removePluginDatabaseMenu', 'removePluginMenu', 'removePluginRasterMenu', 'removePluginVectorMenu', 'removePluginWebMenu', 'removeRasterToolBarIcon', 'removeToolBarIcon', 'removeVectorToolBarIcon', 'removeWebToolBarIcon', 'removeWindow', 'saveStyleSheetOptions', 'sender', 'senderSignalIndex', 'setActiveLayer', 'setObjectName', 'setParent', 'setProperty', 'settingsMenu', 'shapeDigitizeToolBar', 'showAttributeTable', 'showLayerProperties', 'showLayoutManager', 'showOptionsDialog', 'signalsBlocked', 'startTimer', 'staticMetaObject', 'statusBarIface', 'takeAppScreenShots', 'thread', 'timerEvent', 'tr', 'unregisterCustomDropHandler', 'unregisterCustomLayoutDropHandler', 'unregisterMainWindowAction', 'unregisterMapLayerConfigWidgetFactory', 'unregisterOptionsWidgetFactory', 'vectorLayerTools', 'vectorMenu', 'vectorToolBar', 'viewMenu', 'webMenu', 'webToolBar', 'windowMenu', 'zoomFull', 'zoomToActiveLayer', 'zoomToNext', 'zoomToPrevious']


4) Get details from document/project file

ArcGIS document/project file is save with the extension .mxd, while QGIS extension is .qgz or .qgs. And the can be manipulated via their respective APIs as seen below:-

ArcGIS: 
# Create project instance...
prjt = arcpy.mapping.MapDocument('current')

# project file path and name..
prjt.filePath

# project title
prjt.title

# project date saved
prjt.dateSaved

# project author
prjt.author

# project layer count
arcpy.mapping.ListLayers(prjt)

# project coordinate reference system
prjt.activeDataFrame.mapUnits

# set project working space/folder
arcpy.env.workspace

# list shp in working space/folder
arcpy.ListFeatureClasses('*.shp')

QGIS:
# Create project instance...
prjt = QgsProject.instance()

# project name..
prjt.fileName() 

# project folder
prjt.homePath()

# project layer count
prjt.count()

# project coordinate reference system
prjt.crs()
prjt.crs().geographicCrsAuthId()
prjt.crs().authid()

# project bounds
prjt.crs().bounds().asWktCoordinates()

Friday, July 15, 2022

How to make map of study area or area of interest

 Most often it is a good idea to show your readers where your project/research site is located. This is often called map of "study area" or "area of study" or "area of interest".

Whatever it is called, it is that map that usually comes in the introductory part of your report that introduces where your research area is geographically located.

Let's see how we can make one.

Assuming we are conducting a research work in a particular LGA within Niger state of Nigeria, then we need to show our readers where the study area is using a map. The general process will involve the following steps:-

  1.  Source for GIS data layer
  2.  Filter data layer using "Select by location"
  3.  Cartographic styling
  4.  Export map for use in written report
Lets take a look at each step in details.

Tuesday, July 5, 2022

How to execute a string of code as a code in Python

 Lets say you got a string representation of a python syntax that you actually want to execute/run not just display it on the console, how do you execute/run such a string code?

print( "print('Hello World')" )

Above code will print print('Hello World') instead of 'Hello World'. Also the code below will display len('Hello World') instead length of the characters as 11.

print( "len('Hello World')" )

There are two function that can help you get the task done. They are the exec and the eval functions. See difference between exec and eval here


# Using exec function
exec( "print('Hello World')" )
exec( '''print( "print('Hello World')" )''' )

# Using eval function
eval( "print('Hello World')" )
eval( '''print( "print('Hello World')" )''' )


print( "len('Hello World')" ) # Using exec function exec( "len('Hello World')" ) exec( '''len( "print('Hello World')" )''' ) # Using eval function eval( "len('Hello World')" ) eval( '''len( "print('Hello World')" )''' )

I found this very useful when I want to evaluate a dynamically generated Python expression.
Happy coding.

Friday, July 1, 2022

Python GIS Data Wrangling - U.S. Drought Monitor

 This post was inspired by John Nelson YouTube video on "How to Make This Drought Map Pt 1: DATA WRANGLING", where he manually wrangled the dataset for the year 2018.

What he did was great if you are just doing it for a single year. If you intend to repeat the workflow for several years, then the process can be time consuming and prone to mistakes. For this reason, I will recreate the workflow using python scripting and the whole process can be automated with few button clicks.


More specifically, I will cover the following processes:-

  1. Download and extract the zip folder
  2. Combine the shapefiles into a single folder
  3. Merge the shapefiles into shapefile


Lets get started.