Shape & Symbol

这篇文档目前尚未提供译文,将以原文展示。

Draw different shapes and symbol to the map.

Demo

Plain HTML

You can find the live Demo on CodeSandbox here.

1<!DOCTYPE html>
2<html lang="en">
3  <head>
4    <meta name="viewport" content="initial-scale=1.0" />
5    <meta charset="UTF-8" />
6    <title>Basic Map</title>
7    <link
8      href="https://maps-gl.nextbillion.io/maps/v2/api/css"
9      rel="stylesheet"
10    />
11    <style>
12      * {
13        margin: 0;
14        padding: 0;
15      }
16      #map {
17        width: 100vw;
18        height: 100vh;
19      }
20    </style>
21  </head>
22  <body>
23    <div id="map"></div>
24    <script src="https://maps-gl.nextbillion.io/maps/v2/api/js"></script>
25    <script>
26      (function () {
27        // draw a polyline
28        function drawPolyline(nbmap) {
29          nbmap.map.addSource("polyline-source", {
30            type: "geojson",
31            data: {
32              type: "FeatureCollection",
33              features: [
34                {
35                  type: "Feature",
36                  properties: {
37                    color: "#e74747" // red clolor
38                  },
39                  geometry: {
40                    type: "LineString",
41                    coordinates: [
42                      [-118.24648, 34.05815],
43                      [-118.24556, 34.05739],
44                      [-118.2445, 34.0565],
45                      [-118.24397, 34.05605],
46                      [-118.24359, 34.05573],
47                      [-118.24372, 34.05559],
48                      [-118.24385, 34.05544],
49                      [-118.24427, 34.05501],
50                      [-118.24509, 34.05412],
51                      [-118.24555, 34.05361]
52                    ]
53                  }
54                },
55                {
56                  type: "Feature",
57                  properties: {
58                    color: "#93a1ff" // blue clolor
59                  },
60                  geometry: {
61                    type: "LineString",
62                    coordinates: [
63                      [-118.24648, 34.05815],
64                      [-118.24748, 34.05725],
65                      [-118.24763, 34.05712],
66                      [-118.24797, 34.05678],
67                      [-118.24823, 34.05641],
68                      [-118.24836, 34.05623],
69                      [-118.24874572, 34.05567155],
70                      [-118.24637, 34.05417],
71                      [-118.24571, 34.05376],
72                      [-118.24553, 34.05363],
73                      [-118.24555, 34.05361]
74                    ]
75                  }
76                }
77              ]
78            }
79          });
80
81          // you can get more information about setting the style of lines here. https://maplibre.org/maplibre-gl-js-docs/style-spec/layers/#line
82          nbmap.map.addLayer({
83            id: "polyline-layer",
84            type: "line",
85            source: "polyline-source",
86            paint: {
87              "line-width": 3,
88              // get color from the source
89              "line-color": ["get", "color"]
90            }
91          });
92        }
93
94        // draw a polygon
95        function drawPolygon(nbmap) {
96          nbmap.map.addSource("polygon-source", {
97            type: "geojson",
98            data: {
99              type: "FeatureCollection",
100              features: [
101                {
102                  type: "Feature",
103                  geometry: {
104                    type: "Polygon",
105                    coordinates: [
106                      [
107                        [-118.24455192, 34.05649731],
108                        [-118.24646327, 34.05811205],
109                        [-118.24751855, 34.05716641],
110                        [-118.2479062, 34.05678279],
111                        [-118.24834231, 34.05621183],
112                        [-118.24870843, 34.05567655],
113                        [-118.24661649, 34.05436717],
114                        [-118.24455192, 34.05649731]
115                      ]
116                    ]
117                  }
118                }
119              ]
120            }
121          });
122
123          // you can get more information about setting the style of layers here. https://maplibre.org/maplibre-gl-js-docs/style-spec/layers/
124          nbmap.map.addLayer({
125            id: "polygon-layer",
126            type: "fill",
127            source: "polygon-source",
128            paint: {
129              // fill with green color and a opacity of 0.6
130              "fill-color": "#469300",
131              "fill-opacity": 0.6
132            }
133          });
134        }
135
136        // draw a circle
137        function drawCircle(nbmap) {
138          nbmap.map.addSource("circle-source", {
139            type: "geojson",
140            data: {
141              type: "FeatureCollection",
142              features: [
143                {
144                  type: "Feature",
145                  geometry: {
146                    type: "Point",
147                    coordinates: [-118.24501946, 34.05507342]
148                  }
149                }
150              ]
151            }
152          });
153          // you can get more information about setting the style of layers here. https://maplibre.org/maplibre-gl-js-docs/style-spec/layers/#circle
154          nbmap.map.addLayer({
155            id: "circle-layer",
156            type: "circle",
157            source: "circle-source",
158            paint: {
159              "circle-color": "#8d5a9e",
160              "circle-radius": 40
161            }
162          });
163        }
164
165        // draw symbol
166        function drawSymbol(nbmap) {
167          nbmap.map.addSource("symbol-source", {
168            type: "geojson",
169            data: {
170              type: "FeatureCollection",
171              features: [
172                {
173                  type: "Feature",
174                  geometry: {
175                    type: "Point",
176                    coordinates: [-118.24501946, 34.05507342]
177                  }
178                }
179              ]
180            }
181          });
182          // you can get more information about setting the style of layers here. https://maplibre.org/maplibre-gl-js-docs/style-spec/layers/#symbol
183          nbmap.map.addLayer({
184            id: "symbol-layer",
185            type: "symbol",
186            source: "symbol-source",
187            layout: {
188              "symbol-placement": "point",
189              visibility: "visible",
190              "symbol-spacing": 1,
191              "icon-allow-overlap": true,
192              "icon-image": "nb-logo",
193              "icon-size": 0.16
194            }
195          });
196        }
197
198        // You need to replace the apiKey with yours
199        nextbillion.setApiKey("your-api-key");
200        var nbmap = new nextbillion.maps.Map({
201          container: document.getElementById("map"),
202          style: "https://api.nextbillion.io/maps/streets/style.json",
203          zoom: 15,
204          center: { lat: 34.05649731, lng: -118.24455192 }
205        });
206
207        nbmap.on("load", () => {
208          drawPolyline(nbmap);
209          drawPolygon(nbmap);
210          drawCircle(nbmap);
211          // load image so we can use it in the symbol layer
212          nbmap.map.loadImage(
213            "https://static.nextbillion.io/docs-next/nbai-logo-white.png",
214            (err, image) => {
215              if (err) {
216                console.error("err image", err);
217                return;
218              }
219              nbmap.map.addImage("nb-logo", image);
220              drawSymbol(nbmap);
221            }
222          );
223        });
224      })();
225    </script>
226  </body>
227</html>

React

You can find the live Demo on CodeSandbox here.

1import React, { useEffect } from 'react'
2import '@nbai/nbmap-gl/dist/nextbillion.css'
3import nextbillion, { NBMap } from '@nbai/nbmap-gl'
4
5// draw a polyline
6function drawPolyline(nbmap) {
7  nbmap.map.addSource('polyline-source', {
8    type: 'geojson',
9    data: {
10      type: 'FeatureCollection',
11      features: [
12        {
13          type: 'Feature',
14          properties: {
15            color: '#e74747' // red clolor
16          },
17          geometry: {
18            type: 'LineString',
19            coordinates: [
20              [-118.24648, 34.05815],
21              [-118.24556, 34.05739],
22              [-118.2445, 34.0565],
23              [-118.24397, 34.05605],
24              [-118.24359, 34.05573],
25              [-118.24372, 34.05559],
26              [-118.24385, 34.05544],
27              [-118.24427, 34.05501],
28              [-118.24509, 34.05412],
29              [-118.24555, 34.05361]
30            ]
31          }
32        },
33        {
34          type: 'Feature',
35          properties: {
36            color: '#93a1ff' // blue clolor
37          },
38          geometry: {
39            type: 'LineString',
40            coordinates: [
41              [-118.24648, 34.05815],
42              [-118.24748, 34.05725],
43              [-118.24763, 34.05712],
44              [-118.24797, 34.05678],
45              [-118.24823, 34.05641],
46              [-118.24836, 34.05623],
47              [-118.24874572, 34.05567155],
48              [-118.24637, 34.05417],
49              [-118.24571, 34.05376],
50              [-118.24553, 34.05363],
51              [-118.24555, 34.05361]
52            ]
53          }
54        }
55      ]
56    }
57  })
58
59  // you can get more information about setting the style of lines here. https://maplibre.org/maplibre-gl-js-docs/style-spec/layers/#line
60  nbmap.map.addLayer({
61    id: 'polyline-layer',
62    type: 'line',
63    source: 'polyline-source',
64    paint: {
65      'line-width': 3,
66      // get color from the source
67      'line-color': ['get', 'color']
68    }
69  })
70}
71
72// draw a polygon
73function drawPolygon(nbmap) {
74  nbmap.map.addSource('polygon-source', {
75    type: 'geojson',
76    data: {
77      type: 'FeatureCollection',
78      features: [
79        {
80          type: 'Feature',
81          geometry: {
82            type: 'Polygon',
83            coordinates: [
84              [
85                [-118.24455192, 34.05649731],
86                [-118.24646327, 34.05811205],
87                [-118.24751855, 34.05716641],
88                [-118.2479062, 34.05678279],
89                [-118.24834231, 34.05621183],
90                [-118.24870843, 34.05567655],
91                [-118.24661649, 34.05436717],
92                [-118.24455192, 34.05649731]
93              ]
94            ]
95          }
96        }
97      ]
98    }
99  })
100
101  // you can get more information about setting the style of layers here. https://maplibre.org/maplibre-gl-js-docs/style-spec/layers/
102  nbmap.map.addLayer({
103    id: 'polygon-layer',
104    type: 'fill',
105    source: 'polygon-source',
106    paint: {
107      // fill with green color and a opacity of 0.6
108      'fill-color': '#469300',
109      'fill-opacity': 0.6
110    }
111  })
112}
113
114// draw a circle
115function drawCircle(nbmap) {
116  nbmap.map.addSource('circle-source', {
117    type: 'geojson',
118    data: {
119      type: 'FeatureCollection',
120      features: [
121        {
122          type: 'Feature',
123          geometry: {
124            type: 'Point',
125            coordinates: [-118.24501946, 34.05507342]
126          }
127        }
128      ]
129    }
130  })
131  // you can get more information about setting the style of layers here. https://maplibre.org/maplibre-gl-js-docs/style-spec/layers/#circle
132  nbmap.map.addLayer({
133    id: 'circle-layer',
134    type: 'circle',
135    source: 'circle-source',
136    paint: {
137      'circle-color': '#8d5a9e',
138      'circle-radius': 40
139    }
140  })
141}
142
143// draw symbol
144function drawSymbol(nbmap) {
145  nbmap.map.addSource('symbol-source', {
146    type: 'geojson',
147    data: {
148      type: 'FeatureCollection',
149      features: [
150        {
151          type: 'Feature',
152          geometry: {
153            type: 'Point',
154            coordinates: [-118.24501946, 34.05507342]
155          }
156        }
157      ]
158    }
159  })
160  // you can get more information about setting the style of layers here. https://maplibre.org/maplibre-gl-js-docs/style-spec/layers/#symbol
161  nbmap.map.addLayer({
162    id: 'symbol-layer',
163    type: 'symbol',
164    source: 'symbol-source',
165    layout: {
166      'symbol-placement': 'point',
167      visibility: 'visible',
168      'symbol-spacing': 1,
169      'icon-allow-overlap': true,
170      'icon-image': 'nb-logo',
171      'icon-size': 0.16
172    }
173  })
174}
175
176const DrawDemo = () => {
177  useEffect(() => {
178    nextbillion.setApiKey('your-api-key')
179    const nbmap = new NBMap({
180      container: 'map',
181      style: 'https://api.nextbillion.io/maps/streets/style.json',
182      zoom: 15,
183      center: { lat: 34.05649731, lng: -118.24455192 }
184    })
185
186    nbmap.on('load', () => {
187      drawPolyline(nbmap)
188      drawPolygon(nbmap)
189      drawCircle(nbmap)
190      // load image so we can use it in the symbol layer
191      nbmap.map.loadImage(
192        'https://static.nextbillion.io/docs-next/nbai-logo-white.png',
193        (err, image) => {
194          if (err) {
195            console.error('err image', err)
196            return
197          }
198          nbmap.map.addImage('nb-logo', image)
199          drawSymbol(nbmap)
200        }
201      )
202    })
203  }, [])
204
205  return (
206    <div className="app">
207      <div
208        style={{
209          width: '100%',
210          height: '100%',
211          position: 'fixed',
212          top: '0',
213          left: '0'
214        }}
215        id="map"></div>
216    </div>
217  )
218}
219export default DrawDemo
Popup
3D model
没找到你要找的内容?