arcgis api 4.x for js之基础地图篇

arcgis api3.x for js转向arcgis api4.x,我也是最近的3-4个月时间的事情,刚好公司有个webgis项目需要展示三维场景,项目选择arcgis api4.x。我纯碎记录一下自己学习arcgis api4.x过程中的一些心得体会,自己个人的一些理解,不对之处,还请各位同仁见谅以及多多指教。

一、谈谈本篇自己认为比较重要的几个专业术语名称的理解:

1.View

View即视图,提供了查看和与地图组件交互的方法。地图仅仅是一个容器,存储了包含在基础层和操作层中的地理信息,而视图呈现地图及其各个层,使它们对用户可见。View是基类,它有两个子类,代表两种类型的视图:MapView和SceneView。

2.MapView

MapView显示一个二维视图的地图实例,MapView必须建立和参考至少两个对象:一个地图实例和一个DOM元素,每个分别设置在映射和容器属性中。

3. SceneView

SceneView显示3D查看地图或webscene实例,渲染3D技术采用的是WebGL。SceneView必须有有效的地图实例和一个DOM元素中的一个非零的高度和宽度来渲染。

4.Map

map类包含用于存储、管理和覆盖二维和三维视图共同的图层的属性和方法。图层可以添加和删除掉,但通过一个视图(在二维查看数据)或场景视图中能(在3D查看数据)。因此,地图的实例是一个简单的容器保存层,而视图显示与地图的层和基相互作用的方式。Map类有两个子类:WebMap以及WebScene,分别对应二维视图MapView和三维视图SceneView。

5.Basemap

Basemap用于创建自定义底图。这些底图创建可以从自己服务器发布瓦片服务或者由第三方发布的瓦片服务。

6.Camera

Camera相机从位置、倾斜和航向角度来定义SceneView视图可见程度,Camera只适用于3D sceneviews。

二、arcgis api4.x离线部署:

离线部署的思路跟我之前写的:arcgis api3.x离线部署,基本一致的。稍微改的是我在项目里面定义一个变量arcgisapiPath来配置离线api的路径:

var arcgisapiPath = "http://localhost:8888/ocean/js/arcgisapi/4.5/dojo";

然后配置api的init.js以及dojo.js文件即可:

备注:项目引用arcgis api之前,必须要引入arcgisapiPath变量才行,不然api的离线配置那里获取不到arcgisapiPath配置路径的。

三、基础底图具体实现思路:

1.配置地图信息文件mapconfig.js

/* --------------------------------地图初始信息配置-------------------------------- */
function MapConfig() { }
MapConfig.mapInitParams = {
    fullExtent: {//全图范围
        xmin: 13026179.382488998,
        ymin: 2677291.306672236,
        xmax: 13044409.613734988,
        ymax: 2685919.1362399133
    },
    extent: {//初始化范围
        xmin: 11810425.929735247,
        ymin: 2257718.8019195194,
        xmax: 13209314.679703815,
        ymax: 2956468.0219521355
    },
    center: {
        x:12561975.237333735,
        y:2440969.8343777806,
        spatialReference:3857
    },
    spatialReference: {
        wkid: 3857
    },
}
MapConfig.imgMap={Url: "http://localhost:6080/arcgis/rest/services/ImageMap/MapServer", LabelUrl: "", type: 1 };

2.初始化变量定义

var appConfig = {
                 mapView: null,
                 sceneView: null,
                 activeView: null,
                 container: "viewDiv"
};

3.初始化视图参数

var initialViewParams = {
                       map: map,
                       //zoom: 4,
                       //center: MapConfig.center,
                       extent:new Extent({
                           xmin: MapConfig.mapInitParams.extent.xmin,
                           ymin: MapConfig.mapInitParams.extent.ymin,
                           xmax: MapConfig.mapInitParams.extent.xmax,
                           ymax: MapConfig.mapInitParams.extent.ymax,
                           spatialReference: {
                             wkid: MapConfig.mapInitParams.spatialReference.wkid
                           }
                         }),
                       container: appConfig.container
};

部分参数说明:

(1)extent,视图初始化显示范围;

(2)zoom,视图初始化缩放级别;

(3)center,视图初始化显示的中心点位置;

(4)container,视图渲染的容器DIV;

    <div id="viewDiv" class="map">
        <div class="themeBtn">
             <div id="infoDiv">
                 <input class="esri-component esri-widget-button esri-widget esri-interactive" type="button" id="switch-btn" value="2D">
            </div>
        </div>
    </div>

(5)map,地图对象。

 //加载默认影像底图
 var imgLayer = new TileLayer({
                         url: MapConfig.imgMap.Url,
                         id:  "BaseMapID"
 });
 var imgBasemap  = new Basemap({
                         baseLayers: [imgLayer],
                         title: "影像底图",
                         id: "imgBasemap"
 });
 var map = new Map({
                       basemap: imgBasemap                                   });

4.默认创建三维视图模式:

appConfig.sceneView = createView(initialViewParams, "3d");
appConfig.activeView = appConfig.sceneView;
initialViewParams.container = null;
appConfig.mapView = createView(initialViewParams, "2d");
function createView(params, type) {
                       var view;
                       var is2D = type === "2d";
                       if (is2D) {
                         view = new MapView(params);
                         return view;
                       } else {
                         view = new SceneView(params);
                       }
                       return view;
}

5.实现效果如下:

四、二三维模式切换具体实现思路:

1.2D3D按钮监听事件:

var switchButton = document.getElementById("switch-btn");
switchButton.addEventListener("click", function() {
    switchView();
});

2.二三维切换功能实现:

function switchView() {
    var is3D = appConfig.activeView.type === "3d";
    appConfig.activeView.container = null;
    if (is3D) {
                         appConfig.mapView.viewpoint = appConfig.activeView.viewpoint.clone();
                         appConfig.mapView.container = appConfig.container;
                         appConfig.activeView = appConfig.mapView;
                         switchButton.value = "3D";
                       } else {
                         appConfig.sceneView.viewpoint = appConfig.activeView.viewpoint.clone();
                         appConfig.sceneView.container = appConfig.container;
                         appConfig.activeView = appConfig.sceneView;
                         switchButton.value = "2D";
                       }
                     }

3.实现效果如下:

原文地址:https://www.cnblogs.com/giserhome/p/8310347.html

时间: 2024-10-10 05:33:44

arcgis api 4.x for js之基础地图篇的相关文章

arcgis api 4.x for js 集成 Echarts4 实现模拟迁徙图效果(附源码下载)

前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类的介绍,还有就是在线例子:esri 官网在线例子,这个也是学习 arcgis api 4.x 的好素材. arcgis api 4.x for js 集成 echarts 实现迁徙图效果的关键问题在于 echarts 坐标系以及 arcgis 坐标系不一致,因此要进行 echarts坐标系与 arc

arcgis api 4.x for js 结合 Echarts4 实现统计图(附源码下载)

前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类的介绍,还有就是在线例子:esri 官网在线例子,这个也是学习 arcgis api 4.x 的好素材. 参照 arcgis api 4.x for js 地图加载多个气泡窗口展示的基础上,实现 arcgis api 4.x for js 结合 Echarts4 实现统计图,核心思路地图叠加自定义

arcgis api 4.x for js 聚合效果图(附源码下载)

前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类的介绍,还有就是在线例子:esri 官网在线例子,这个也是学习 arcgis api 4.x 的好素材. 内容概览 1.基于 arcgis api 4.x for js 聚合效果2.源代码 demo 下载 本篇实现 arcgis api 4.x for js 聚合效果功能,效果图如下: 聚合数据源

ArcGIS API for Silverlight之配准JPG图片地图文字倾斜解决方案

原文:ArcGIS API for Silverlight之配准JPG图片地图文字倾斜解决方案 根据实际JPG图片进行配准后,发布的地图,利用ArcGIS API for Silverlight在网页上显示的时候,原先的文字总有倾斜的现象,如何解决? 图一.配准后有文字倾斜现象的地图 解决方案如下: <esri:Map x:Name="myMap" IsLogoVisible="False" ZoomDuration="0:00:01" E

arcgis api 4.x for js之图层管理篇

上篇实现了基础地图加载以及二三维模式切换:本篇的内容则是图层管理控制,从两个不同角度来实现,分别是直接绑定arcgis api提供的图层管理widget(LayerList)以及自定义图层管理图标的点击事件来控制图层的隐藏或者显示.不管是LayerList或者自定义图标点击管理图层的实现方式,核心都是根据Layer的属性visible来设置true或者false来控制的. 一.谈谈本篇自己认为比较重要的几个专业术语名称的理解: 1.TileLayer TileLayer,加载缓存地图服务的瓦片图

ArcGIS API for Flex (使用ArcGIS API for Flex 创建一个新的地图项目)

参考官方:https://developers.arcgis.com/flex/guide/getting-started.htmhttps://developers.arcgis.com/flex/guide/tutorial-adding-a-map-with-layers.htm 新建Flex工程 下载并解压缩ArcGIS API Flex ZIP文件.这个文件包含Flex的ArcGIS API libs库(.swc).语言环境.皮肤包文件 在 Flash Builder中, 选择 Fil

ArcGIS Api for Js基础

1.创建ArcGISDynamicMapServiceLayer var demographicsLayerURL = "http://sampleserver6.arcgisonline.com/arcgis/rest/services/Census/MapServer"; var demographicsLayerOptions = { "id": "demographicsLayer", "opacity": 0.8,

ArcGIS API for JS的一般编码习惯

1.引用claro.css和esri.css <link rel="stylesheet" href="http://js.arcgis.com/3.10/js/dojo/dijit/themes/claro/claro.css"> <link rel="stylesheet" href="http://js.arcgis.com/3.10/js/esri/css/esri.css"> 2.页面布局 &

vue-cli&amp;webpack&amp;arcgis API For JS的天坑之路(一)

写在前面的话(背景交代) 最近参加esri比赛,但是又想趁机接触前端最新的一些框架和技术,所以,毅然决然的踏上了这个天坑之路.我现在只是成功的把地图渲染出来了,所以,我也不知道会不会有天坑二的出现. gituhb项目地址 新建vue-cli工程 如何用vue-cli + webpack构建一个工程,网上一大堆的代码,我就不赘述了.比如这个就是很好地入门文章,先要做的还是要把vue-cli和webpack的模块划分好,框架搭建好,然后才是我要说的,地图部分. 如何在vue-cli,webpack中