1
13693261870
2022-09-16 762f2fb45db004618ba099aa3c0bd89dba1eb843
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
/**
 * 功能描述:聚合
 * 开发公司:广东蓝图
 * 开发人员:蔡工
 * 开发时间:2019-07-25 ~ 2019-09
 */
 
define([
    "dojo/_base/declare",
    "esri/request",
    "esri/SpatialReference",
    "dojo/_base/array",
    "esri/geometry/Point",
    "esri/geometry/webMercatorUtils",
    "esri/dijit/PopupTemplate",
    "scripts/extras/ClusterLayer",
    "esri/symbols/SimpleMarkerSymbol",
    "esri/symbols/SimpleFillSymbol",
    "esri/symbols/PictureMarkerSymbol",
    "esri/renderers/ClassBreaksRenderer",
    "esri/layers/GraphicsLayer"
], function(declare, esriRequest, SpatialReference, arrayUtils, Point, webMercatorUtils, PopupTemplate, ClusterLayer, SimpleMarkerSymbol,
            SimpleFillSymbol, PictureMarkerSymbol, ClassBreaksRenderer, GraphicsLayer) {
    var clazz;
    clazz = declare("Cluster", null, {
        constructor: function () {
        },
        show: function() {
            var photos = esriRequest({
                url: "./data/1000-photos.json",
                handleAs: "json"
            });
            photos.then(this.addClusters, this.error);
        },
        addClusters: function(resp) {
            var photoInfo = {};
            var wgs = new SpatialReference({
                "wkid": 4326
            });
            photoInfo.data = arrayUtils.map(resp, function(p) {
                var latlng = new Point(parseFloat(p.lng), parseFloat(p.lat), wgs);
                console.log(12345678);
                var webMercator = webMercatorUtils.geographicToWebMercator(latlng); //经纬度坐标转换平面坐标
                var attributes = {
                    "Caption": p.caption,
                    "Name": p.full_name,
                    "Image": p.image,
                    "Link": p.link
                };
                return {
                    "x": webMercator.x,
                    "y": webMercator.y,
                    "attributes": attributes
                };
            });
            // popupTemplate to work with attributes specific to this dataset
            var popupTemplate = new PopupTemplate({
                "title": "",
                "fieldInfos": [{
                    "fieldName": "Caption",
                    visible: true
                }, {
                    "fieldName": "Name",
                    "label": "By",
                    visible: true
                }, {
                    "fieldName": "Link",
                    "label": "On Instagram",
                    visible: true
                }]
            });
            // cluster layer that uses OpenLayers style clustering
            clusterLayer = new ClusterLayer({
                "data": photoInfo.data,
                "distance": 100,
                "id": "clusters",
                "labelColor": "#fff",
                "labelOffset": 10,
                "resolution": map.extent.getWidth() / map.width,
                "singleColor": "#888",
                "singleTemplate": popupTemplate
            });
 
            var defaultSym = new SimpleMarkerSymbol().setSize(4);
            var renderer = new ClassBreaksRenderer(defaultSym, "clusterCount");
 
            var picBaseUrl = "";
            var blue = new PictureMarkerSymbol(picBaseUrl + "images/cluster/BluePin1LargeB.png", 32, 32).setOffset(0, 15);
            var green = new PictureMarkerSymbol(picBaseUrl + "images/cluster/GreenPin1LargeB.png", 64, 64).setOffset(0, 15);
            var red = new PictureMarkerSymbol(picBaseUrl + "images/cluster/RedPin1LargeB.png", 72, 72).setOffset(0, 15);
            renderer.addBreak(0, 2, blue);
            renderer.addBreak(2, 200, green);
            renderer.addBreak(200, 1001, red);
 
            clusterLayer.setRenderer(renderer);
            map.addLayer(clusterLayer);
        },
        error: function(err) {
            console.log("something failed: ", err);
        }
    });
    clazz.getInstance = function() {
        if (instance === null) {
            instance = new clazz();
        }
        return instance;
    };
    return clazz;
});