本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本文详细介绍了如何利用Esri公司的ArcGIS Engine组件进行GIS应用的二次开发。包括ArcGIS Engine的环境配置,核心组件的理解,地图操作的掌握,数据访问的学习,GIS应用开发实例,以及图形用户界面设计和文档与帮助系统的使用。读者将通过本课程的学习,深入掌握GIS二次开发的理论与实践,构建出具有特定功能和良好用户体验的地理信息系统。

1. ArcGIS Engine组件式开发环境概述

GIS与ArcGIS Engine概念解析

地理信息系统(GIS)是一门综合应用计算机技术来获取、存储、检索、分析和显示地理数据的科学。ArcGIS Engine是ESRI公司提供的一套用于开发定制地理空间应用程序的组件库。它允许开发者在他们自己的应用程序中集成GIS功能,从而创建交互式地图、执行地理分析、管理空间数据等。

ArcGIS Engine开发环境特点与优势

ArcGIS Engine开发环境的最大优势在于它的灵活性和扩展性,它能够嵌入到各种应用程序中,无论是桌面、Web还是移动平台。它的组件式架构意味着开发者可以选择所需的功能,无需引入整个GIS系统。这种模块化的方法使得应用程序可以更加轻量级,专注于实现特定的GIS任务。此外,ArcGIS Engine与ESRI的其他产品如ArcGIS Desktop和ArcGIS Server无缝集成,为开发者提供了一个统一的开发框架和丰富的地理空间分析功能。

2. 开发环境配置步骤

2.1 开发环境的搭建准备

2.1.1 系统需求分析

在配置ArcGIS Engine开发环境之前,对系统需求进行详尽分析是至关重要的。ArcGIS Engine依赖于一系列的系统条件,包括操作系统、处理器性能、内存容量、硬盘空间以及图形卡配置。

  • 操作系统 :通常情况下,ArcGIS Engine支持多种主流操作系统,如Windows 10、Windows Server 2016等,但支持程度上可能会有所差异。了解目标操作系统是配置步骤的第一步。
  • 处理器和内存 :对于处理器和内存的要求取决于开发项目的复杂性。一般而言,至少需要双核处理器和至少4GB的RAM,对于大型项目来说,推荐更高配置。
  • 硬盘空间 :安装ArcGIS Engine SDK及其附属组件需要预留足够的硬盘空间,以保证能够存储项目文件、数据集和生成的地图文档。
  • 图形卡 :图形卡的性能直接影响地图渲染的效率。需要一块支持OpenGL或DirectX的高性能显卡,并确保安装了最新的驱动程序。

分析这些系统需求将有助于确定是否需要升级现有硬件或更换操作系统,以确保开发环境的配置能够顺利进行。

2.1.2 ArcGIS Engine开发许可的申请与安装

在系统需求得到满足之后,下一步是申请并安装ArcGIS Engine的开发许可。许可的申请可以通过Esri官方网站进行,或者通过合法的软件提供商渠道获得。

  • 许可申请 :首先需要一个有效的Esri账户,然后按照网站的指引进行许可的申请。申请过程中需确认订阅信息以及软件许可的详细条款。
  • 许可安装 :一旦获得许可,就可以下载许可文件。通常情况下,许可文件会被安装在一个指定的目录下,如 C:\Program Files (x86)\Common Files\ESRI\License 。安装过程中,确保遵循许可服务器和客户端的安装说明。

完成以上步骤后,开发环境的基本准备就绪,可以进行下一步的开发工具和集成环境的配置。

2.2 开发工具与集成环境配置

2.2.1 ArcGIS Engine SDK安装与配置

ArcGIS Engine提供了丰富的软件开发工具包(SDK),为开发者提供API和相关的开发工具。安装SDK是构建基于ArcGIS的解决方案的核心步骤。

  • 安装SDK :ArcGIS Engine SDK通常包含在开发许可中,并且在许可申请过程中可以一并下载。在安装时,需要遵循安装向导的提示进行,并确保选择了适合自己开发需求的产品组件。
  • 配置环境变量 :安装完成后,需要对开发机进行配置。通常包括设置环境变量,以便在不同的开发环境中都能够轻松地访问到ArcGIS的库和工具。

2.2.2 开发环境IDE的选择与配置(如Visual Studio)

选择合适的集成开发环境(IDE)是进行ArcGIS Engine开发的关键。Visual Studio作为广泛使用的IDE,提供强大的功能,非常适合作为开发平台。

  • 安装Visual Studio :根据项目需求安装Visual Studio,并确保选中了适用于C#或C++等项目的开发语言支持。
  • 配置ArcGIS插件 :在Visual Studio中,安装ArcGIS Engine提供的插件,这些插件能够增加地图编辑、分析和显示等功能。

2.2.3 第三方辅助工具和库的集成

除了ArcGIS Engine SDK和IDE之外,还可能需要集成一些第三方工具和库以增强开发环境的功能。

  • 工具集成 :例如,版本控制工具如Git、Subversion可以集成到IDE中,以支持代码的版本管理和协作开发。
  • 库集成 :根据特定的开发需求,集成如.NET Framework、WPF、Entity Framework等库,以便于构建更加复杂和功能丰富的应用程序。

集成环境配置完成后,开发环境的搭建就基本完成了,可以开始尝试编写代码,进行实际的开发工作了。在下一章节中,我们将深入探讨ArcGIS Engine核心组件的应用,进一步理解如何使用这些组件来创建功能强大的GIS应用程序。

3. ArcGIS Engine核心组件应用

3.1 MapControl的深入应用

3.1.1 MapControl基础功能介绍

MapControl是ArcGIS Engine中一个至关重要的组件,它允许开发者在应用程序中嵌入交互式地图。MapControl提供的基本功能包括显示地图、缩放和平移、图层控制以及地图工具的集成,如缩放工具和鹰眼视图。

MapControl的核心是基于ArcObjects的IMap接口,它代表地图和其相关属性,如地图的视图和比例尺。开发者可以通过编程方式控制地图的显示方式,例如更改地图文档、添加或移除图层、设置显示的范围和比例尺。

下面的代码块演示了如何使用C#在ArcGIS Engine应用程序中初始化一个MapControl:

// 创建一个MapControl并添加到窗口
MapControl mapControl1 = new MapControl();
this.Controls.Add(mapControl1);

// 设置地图文档路径并加载
string mapDocumentPath = @"C:\path\to\your的地图文档.mxd";
AxMapControlClass axMapControl = new AxMapControlClass();
axMapControl.CreateControl();
axMapControl.LoadMxFile(mapDocumentPath);

// 将AxMapControl附加到MapControl
((***Types.IConnectionPointContainer)mapControl1.Object).FindConnectionPoint(
    typeof(ESRI.ArcGIS.esriSystem.IESRIControlEvents).GUID,
    out connectionPoint);
connectionPoint.Advise(axMapControl, out cookie);

上述代码首先创建了MapControl的一个实例并将其添加到窗体的控件集合中。接下来,使用 CreateControl 方法创建一个AxMapControl的实例,并加载一个MXD文件。最后,将AxMapControl连接到MapControl。

3.1.2 地图显示的高级自定义方法

MapControl不仅限于默认的显示功能,还可以通过编程方式进行高级定制,如图层样式更改、标注定制、空间参考变换等。高级定制可以满足特定的业务需求和视觉效果。

例如,为了在地图上添加自定义标注,我们可以使用LabelClasses属性。每个LabelClass代表一个图层上的标注集合,并且可以为它们设置不同的显示属性。下面的代码示例展示了如何为一个特定图层添加定制的标注:

// 假设已经加载了一个地图文档,并且axMapControl已经被初始化
// 获取特定图层
ILayer layer = axMapControl.Map.get_Layer(0);

// 获取图层的标注类
ILabelClass labelClass = new LabelClass();
layer.LabelClasses.Add(labelClass);

// 设置标注的字体和大小
ILabelClassProperties labelClassProps = (ILabelClassProperties)labelClass;
labelClassProps.Font.Name = "Arial";
labelClassProps.Font.Size = 12;

// 设置标注的表达式
ILabelExpression labelExpression = new LabelExpression();
labelExpression.Expression = "[NAME]";
labelClassProps.Expression = labelExpression;

// 刷新显示,使得标注更改立即生效
axMapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);

通过上述步骤,我们可以为地图中的图层添加复杂的标注表达式,并且自定义标注的样式和字体,从而实现更加精细和个性化的地图显示效果。

3.2 PageLayoutControl与Geodatabase核心作用

3.2.1 PageLayoutControl在地图打印与布局中的角色

PageLayoutControl是ArcGIS Engine的另一个强大组件,它允许开发者对地图进行页面布局和打印准备。与MapControl不同,PageLayoutControl显示的是地图的页面布局视图,该视图旨在编辑和展示用于打印的地图。开发者可以在PageLayoutControl中创建地图元素、设置比例尺、调整页面尺寸和添加布局元素等。

在下面的示例代码中,我们展示了如何使用PageLayoutControl创建一个简单的地图布局,并添加一个比例尺框架:

// 初始化PageLayoutControl
IPageLayoutControl pageLayoutControl = new PageLayoutControlClass();
this.Controls.Add(pageLayoutControl);

// 加载布局模板
string layoutTemplatePath = @"C:\path\to\your\page_layout模板.plt";
IPageLayout pageLayout = pageLayoutControl.PageLayout;
pageLayout.LoadFile(layoutTemplatePath);

// 获取当前活动视图
IActiveView activeView = (IActiveView)pageLayoutControl.ActiveView;

// 添加比例尺框架
IScalebarControl scalebarControl = new ScalebarControlClass();
scalebarControl.CreateControl();
axScalebarControl.Scalebar = new Scalebar();
axScalebarControl.Scalebar.Units = esriUnits.esriMeters;
axScalebarControl.Scalebar.MinDivisions = 5;
axScalebarControl.Scalebar.MaxDivisions = 10;
axScalebarControl.Scalebar.Format = ScalebarFormat.esriScalebarLong;
axScalebarControl.Scalebar.Value = activeView.Extent;
axScalebarControl.Scalebar.PutOnLayout();

// 刷新视图
activeView.PartialRefresh(esriViewDrawPhase.esriViewGeography, null, null);

以上代码创建了一个PageLayoutControl并加载了一个布局模板,然后添加了一个比例尺框架到布局中。 axScalebarControl.Scalebar.Value 属性被设置为当前视图的范围,以确保比例尺与显示的地图范围相匹配。

3.2.2 Geodatabase数据管理的强大能力与实践

Geodatabase是ArcGIS Engine中用于存储、管理、查询和分析地理数据的中心数据库结构。Geodatabase使用了ArcObjects的数据模型,支持复杂的空间关系和属性管理。Geodatabase包括了多种类型,例如个人Geodatabase、文件Geodatabase和企业Geodatabase,每种类型适用于不同的应用场景和规模。

Geodatabase的强大能力在于其能够维护空间数据与属性数据之间的关联,支持高级查询和事务处理。这对于需要进行复杂数据编辑和分析的地理信息系统是至关重要的。

下面的代码示例展示了如何在C#中通过ArcObjects访问Geodatabase并查询数据:

// 创建一个Geodatabase工厂对象
IGeoDatabaseFactory geoDatabaseFactory = new GeoDatabaseFactoryClass();

// 打开Geodatabase
string geodatabasePath = @"C:\path\to\your\geodatabase.gdb";
IFeatureWorkspace featureWorkspace = geoDatabaseFactory.OpenFromFile(geodatabasePath, false);
IFeatureDataset featureDataset = featureWorkspace.OpenFeatureDataset("YourDatasetName");

// 创建一个FeatureClass对象
IFeatureClass featureClass = featureDataset.OpenFeatureClass("YourFeatureClassName");

// 创建一个FeatureCursor用于遍历特征
IFeatureCursor featureCursor = featureClass.Search(null, false);
IFeature feature = featureCursor.NextFeature();

// 遍历特征
while (feature != null)
{
    // 进行查询和处理
    // ...

    // 获取下一条特征
    feature = featureCursor.NextFeature();
}

上述代码首先创建了一个 GeoDatabaseFactory 对象,并使用它打开一个Geodatabase。然后,打开特定的 FeatureDataset FeatureClass ,最后通过 FeatureCursor 遍历并处理每一个地理特征。

通过这些核心组件的应用,开发者可以利用ArcGIS Engine创建功能强大的地理信息系统解决方案,满足各种复杂的空间数据管理和地图表现需求。

4. 地图操作技巧与数据访问方法

地图操作与数据访问是GIS应用开发的核心内容。良好的地图操作技巧可以提升用户交互体验,高效的数据访问方法则是确保GIS应用性能的关键。

4.1 地图操作技巧精讲

4.1.1 地图文档的加载与管理

ArcGIS Engine提供了丰富的方法来加载和管理地图文档(MXD)。开发者可以通过ArcGIS Engine Runtime API中的 IMapDocument 接口来实现这一功能。加载一个地图文档涉及创建该接口的实例,然后指定文件路径来加载它。例如,下面的代码展示了如何加载一个地图文档:

// 创建MapDocument对象实例
IMapDocument mapDocument;
// 加载MXD文档
mapDocument = new MapDocumentClass();
mapDocument.Open(MapDocumentPath);

// 设置为当前地图文档
IMap activeMap = mapDocument.ActiveView.Map;

在这段代码中, MapDocumentClass 是实现 IMapDocument 接口的一个类,通过调用 Open 方法加载地图文档。路径参数 MapDocumentPath 是地图文档文件的路径。 ActiveView 属性用于获取地图文档的当前视图,这是进行地图操作的基础。

4.1.2 图层的添加与控制技巧

在地图上添加和控制图层是动态展示不同地理信息的关键。通过ArcGIS Engine,开发者可以按照以下步骤来添加和控制图层:

  1. 获取地图对象的图层集合。
  2. 创建图层对象实例,比如 ILayer 或者具体的图层类型如 IFeatureLayer
  3. 将图层添加到地图的图层集合中。
// 获取地图对象
IMap map = ...;
// 创建图层对象实例
IFeatureLayer featureLayer = new FeatureLayerClass();
featureLayer.FeatureClass = ...; // 设置FeatureClass

// 添加图层到地图上
IEnumLayer enumLayer = map.Layers;
ILayer layer;
while (enumLayer.Next(out layer) == ESRI.ArcGIS.RuntimeManager.Current.GetSystemStatus().Ok)
{
    if (layer.Name == "TargetLayerName")
    {
        map.AddLayer(featureLayer, (ILayer)layer, true);
        break;
    }
}

在这个示例中,我们首先获取了地图对象 map ,然后创建了一个 IFeatureLayer 对象 featureLayer ,并指定了一个 FeatureClass 。接着,我们通过遍历地图已有的图层,找到名为 TargetLayerName 的图层,并将新的图层添加在它的下方。

4.1.3 地图比例尺的调整与导航功能实现

比例尺的调整和地图的导航功能是提供用户友好交互体验不可或缺的部分。ArcGIS Engine提供了 IZoom 接口来实现比例尺的调整,而地图的导航功能则可以通过 IActiveView 接口中的方法实现。

// 获取当前活动视图
IActiveView activeView = ...;
// 调整比例尺
IZoom zoom = (IZoom)activeView;
zoom.Extent = ...; // 设置新的比例尺所对应的显示范围

// 地图导航
IEnvelope envelope = ...; // 定义新的导航范围
activeView.Extent = envelope;

在这段代码中,通过 activeView.Extent 属性可以设置新的显示范围,从而调整比例尺。同时,通过修改 activeView.Extent 属性可以实现地图的导航功能,即调整地图的可视范围到指定的 envelope

4.2 数据访问与编辑技巧

数据是GIS应用的核心,因此有效的数据访问和编辑方法对于整个应用的性能和稳定性至关重要。

4.2.1 数据源的连接与配置

在ArcGIS Engine中,数据源的连接通过 IDataset 接口实现,该接口可以连接到各种类型的数据源,如shapefile、CAD文件、SDE数据库等。连接到数据源后,开发者可以进一步操作存储在其中的地理数据。

// 创建数据集对象实例
IDataset dataset = new WorkspaceClass();
dataset.Workspace = ...; // 设置数据源路径
dataset.Connect(); // 连接到数据源

// 获取特定的数据集
IFeatureWorkspace featureWorkspace = dataset as IFeatureWorkspace;
IFeatureClass featureClass;
featureWorkspace.OpenFeatureClass(FeatureClassName, out featureClass);

在这段代码中,我们首先通过设置 Workspace 属性来连接到数据源。然后,通过 featureWorkspace.OpenFeatureClass 方法打开特定的 FeatureClass

4.2.2 地理数据的读取与编辑流程

读取和编辑地理数据是GIS应用开发中经常遇到的需求。ArcGIS Engine提供了丰富的接口来实现地理数据的读取和编辑。以下是读取特征并进行编辑的一个简单示例:

// 获取编辑操作的工作空间
IFeatureWorkspace featureWorkspace = ...;
// 打开要编辑的特征类
IFeatureClass featureClass = ...;
IFeatureCursor featureCursor;
featureWorkspace.OpenFeatureCursor(featureClass, false, out featureCursor);

IFeature feature;
while (featureCursor.NextFeature(out feature) == ESRI.ArcGIS.RuntimeManager.Current.GetSystemStatus().Ok)
{
    // 读取特征
    string featureName = feature.get_Value(featureClass.FindField("Name")).ToString();
    // 执行编辑操作,例如更新一个字段
    if (featureName == "SomeName")
    {
        feature.put_Value(featureClass.FindField("Description"), "Updated Description");
        feature.Store();
    }
}

在这段代码中,首先打开一个编辑操作的工作空间和特征类。然后,通过特征游标 featureCursor 遍历所有特征,并对符合条件的特征执行更新操作。

以上,我们详细介绍了地图操作技巧与数据访问方法的细节和实践。通过合理运用ArcGIS Engine提供的API,开发者可以实现丰富的地图交互功能和高效的数据管理能力,从而构建出强大的GIS应用。

5. ArcGIS Engine高级开发实践

5.1 自定义地图控件开发

地图控件的需求分析与设计思路

在开始自定义地图控件的开发之前,必须先进行需求分析。这包括了解目标用户的需求、地图控件应该提供哪些功能以及如何与现有的GIS系统集成。自定义地图控件设计时需要考虑的要点有:用户界面友好性、性能优化、跨平台兼容性以及易于扩展和维护的代码结构。

一旦确定了需求,接下来就是设计思路的制定。设计思路应当明确控件的功能模块划分、交互逻辑设计和数据流处理。设计阶段还需要用到如用例图、类图等UML图表来描述系统结构。

编写自定义控件的关键代码与实现步骤

编写自定义控件的过程中,首先需要引入ArcGIS Engine提供的命名空间,然后定义控件的类,实现MapControl中的相关方法。以下是一个简化的示例代码,演示了如何继承ArcGIS控件并添加一个自定义方法:

using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
// 其他必要的命名空间...

public class CustomMapControl : MapControl
{
    // 构造函数
    public CustomMapControl() : base()
    {
    }

    // 自定义功能方法
    public void CustomFunctionality()
    {
        // 实现自定义功能逻辑
    }

    // 其他自定义方法和事件处理...
}

// 在窗体设计器中初始化控件
// CustomMapControl mapControl = new CustomMapControl();

在实现自定义控件的步骤中,需要使用ArcGIS Engine的API来操作地图文档,管理图层,以及响应用户的交互事件。

5.2 地理处理工具的封装与应用

地理处理工具概述与工具箱的使用

地理处理工具是GIS中执行地理分析和数据处理的核心组件。ArcGIS Engine提供了一套完整的地理处理工具箱(Toolbox),它包含了从基本的数据操作到高级的空间分析工具。

开发者需要熟悉如何在ArcGIS Engine中使用这些工具箱中的工具,并将它们嵌入到自定义的应用程序中。这通常涉及到使用ArcObjects SDK提供的接口与类。

工具封装的策略与代码示例

封装地理处理工具需要遵循良好的编程实践,确保代码的可读性和可维护性。将地理处理工具封装为独立模块可以提高代码复用性,并简化应用程序的结构。

以下是一个简单示例,展示如何封装一个地理处理工具:

// 假设有一个执行缓冲区分析的工具类
public class BufferAnalysisTool
{
    public IFeatureClass Execute(IFeatureLayer featureLayer, double distance)
    {
        // 创建并初始化地理处理环境...
        IGeoProcessor geoProcessor = new GeoProcessor();

        // 构建地理处理任务参数...
        string toolName = "Buffer_analysis";
        var parameters = new Dictionary<string, object>
        {
            { "Input_Features", featureLayer },
            { "Distance", distance },
            { "Output_Feature_Class", "in_memory/output_feature_class" }
        };

        // 执行地理处理任务...
        var result = geoProcessor.Execute(new string[] { toolName }, parameters, null);
        if (result.Status == esriGeoProcessorStatus.esriGPProcessingComplete)
        {
            // 获取并返回结果...
            return result.ResultSet[0].GetOutput<IFeatureClass>();
        }

        return null;
    }
}

通过上述方式,可以将复杂的功能如地理处理工具封装为简单的API接口,便于在应用程序中调用。

5.3 地图与数据库交互技术

数据库连接与管理

在GIS应用中,地图与数据库之间的交互是核心功能之一。ArcGIS Engine提供了与多种数据库交互的能力,包括但不限于Microsoft SQL Server, Oracle, PostgreSQL等。

数据库连接通常涉及到认证、数据源选择和SQL查询。ArcGIS Engine支持通过ArcObjects访问数据库,例如,使用 ISpatialDataConnection 接口进行数据库连接,并执行SQL语句进行数据操作。

地图数据与数据库的同步更新与查询

为了保证地图数据与数据库信息保持一致,需要实现数据的同步更新机制。这可以通过监听数据库的变更事件,或者定时轮询数据库来进行。同步更新的实现通常涉及到触发器、事务处理以及数据冲突的解决策略。

查询数据库通常是为了获取额外的属性信息,用以丰富地图上的图层信息。通过ArcGIS Engine提供的 IQueryFilter 接口,可以构建复杂的查询语句来过滤和检索数据。

5.4 用户界面设计与图形资源美化

基于.NET的Windows Forms或WPF界面设计要点

在设计GIS应用的用户界面时,重点是要保持界面的清晰和功能性。在Windows Forms中,可以使用各种控件来构建复杂的用户界面,并通过布局管理器来组织它们。而在WPF中,通过使用XAML可以实现更为动态和响应式的界面设计。

界面设计的关键要点包括: - 使用一致的视觉元素和颜色方案; - 保持控件和布局的逻辑性和直观性; - 确保用户能够轻松地导航和操作; - 为用户提供足够的信息反馈,如工具提示和状态信息。

图形资源的使用与界面美观化的技巧

为了提升用户体验,合理的使用图形资源和优化界面元素是非常关键的。这包括图标的使用、按钮和控件的视觉效果,以及地图样式的设计等。开发者可以利用图形编辑软件制作美观的图形资源,或者使用第三方图形库来丰富界面。

在界面美观化方面,可以考虑以下几个技巧: - 使用现代的扁平化或材料设计风格; - 对控件进行适当的阴影、渐变和边框处理; - 保证文字清晰易读,选择合适的字体和颜色; - 对于地图控件,可以添加图层控制、鹰眼视图等辅助功能。

5.5 项目文档与资源的重要性

开发过程记录与API参考的重要性

项目文档是项目维护和后期开发的基础。开发过程记录应详细地描述了项目的架构、设计决策、开发步骤和问题解决过程。API参考文档则需要提供每个公开API的详细说明,包括参数、返回值、异常情况以及使用示例。

API文档不仅对开发者有用,对用户理解如何使用控件和类库也同样重要。好的API文档可以显著减少用户学习API的时间,提高工作效率。

使用示例的编撰与项目知识传承

除了提供API参考,实际使用示例的编撰也是不可忽视的。使用示例能直观展示API的使用方法和效果,帮助用户更好地理解和应用API。

同时,对于团队来说,定期进行知识分享和技术交流也是知识传承的重要手段。通过内部培训、技术文档共享等方式,可以确保项目知识的不断累积和更新。

通过以上章节的深入分析,可以看出ArcGIS Engine不仅提供了强大的GIS开发功能,还具备丰富的资源和工具以支持开发者的多样化需求。开发者需要充分理解和掌握这些技术,以实现高级开发实践,构建出功能全面、用户体验良好的GIS应用。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

简介:本文详细介绍了如何利用Esri公司的ArcGIS Engine组件进行GIS应用的二次开发。包括ArcGIS Engine的环境配置,核心组件的理解,地图操作的掌握,数据访问的学习,GIS应用开发实例,以及图形用户界面设计和文档与帮助系统的使用。读者将通过本课程的学习,深入掌握GIS二次开发的理论与实践,构建出具有特定功能和良好用户体验的地理信息系统。

本文还有配套的精品资源,点击获取 menu-r.4af5f7ec.gif

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐