代码拉取完成,页面将自动刷新
<!DOCTYPE html><html><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1"><style>body { max-width: 980px; border: 1px solid #ddd; outline: 1300px solid #fff; margin: 16px auto; } body .markdown-body { padding: 45px; } @font-face { font-family: fontawesome-mini; src: url(data:font/woff;charset=utf-8;base64,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) format('woff'); } .markdown-body { font-family: sans-serif; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; color: #333333; overflow: hidden; font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif; font-size: 16px; line-height: 1.6; word-wrap: break-word; } .markdown-body a { background: transparent; } .markdown-body a:active, .markdown-body a:hover { outline: 0; } .markdown-body b, .markdown-body strong { font-weight: bold; } .markdown-body mark { background: #ff0; color: #000; font-style: italic; font-weight: bold; } .markdown-body sub, .markdown-body sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } .markdown-body sup { top: -0.5em; } .markdown-body sub { bottom: -0.25em; } .markdown-body h1 { font-size: 2em; margin: 0.67em 0; } .markdown-body img { border: 0; } .markdown-body hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } .markdown-body pre { overflow: auto; } .markdown-body code, .markdown-body kbd, .markdown-body pre, .markdown-body samp { font-family: monospace, monospace; font-size: 1em; } .markdown-body input { color: inherit; font: inherit; margin: 0; } .markdown-body html input[disabled] { cursor: default; } .markdown-body input { line-height: normal; } .markdown-body input[type="checkbox"] { box-sizing: border-box; padding: 0; } .markdown-body table { border-collapse: collapse; border-spacing: 0; } .markdown-body td, .markdown-body th { padding: 0; } .markdown-body .codehilitetable { border: 0; border-spacing: 0; } .markdown-body .codehilitetable tr { border: 0; } .markdown-body .codehilitetable pre, .markdown-body .codehilitetable div.codehilite { margin: 0; } .markdown-body .linenos, .markdown-body .code, .markdown-body .codehilitetable td { border: 0; padding: 0; } .markdown-body td:not(.linenos) .linenodiv { padding: 0 !important; } .markdown-body .code { width: 100%; } .markdown-body .linenos div pre, .markdown-body .linenodiv pre, .markdown-body .linenodiv { border: 0; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; -webkit-border-top-left-radius: 3px; -webkit-border-bottom-left-radius: 3px; -moz-border-radius-topleft: 3px; -moz-border-radius-bottomleft: 3px; border-top-left-radius: 3px; border-bottom-left-radius: 3px; } .markdown-body .code div pre, .markdown-body .code div { border: 0; -webkit-border-radius: 0; -moz-border-radius: 0; border-radius: 0; -webkit-border-top-right-radius: 3px; -webkit-border-bottom-right-radius: 3px; -moz-border-radius-topright: 3px; -moz-border-radius-bottomright: 3px; border-top-right-radius: 3px; border-bottom-right-radius: 3px; } .markdown-body * { -moz-box-sizing: border-box; box-sizing: border-box; } .markdown-body input { font: 13px Helvetica, arial, freesans, clean, sans-serif, "Segoe UI Emoji", "Segoe UI Symbol"; line-height: 1.4; } .markdown-body a { color: #4183c4; text-decoration: none; } .markdown-body a:hover, .markdown-body a:focus, .markdown-body a:active { text-decoration: underline; } .markdown-body hr { height: 0; margin: 15px 0; overflow: hidden; background: transparent; border: 0; border-bottom: 1px solid #ddd; } .markdown-body hr:before, .markdown-body hr:after { display: table; content: " "; } .markdown-body hr:after { clear: both; } .markdown-body h1, .markdown-body h2, .markdown-body h3, .markdown-body h4, .markdown-body h5, .markdown-body h6 { margin-top: 15px; margin-bottom: 15px; line-height: 1.1; } .markdown-body h1 { font-size: 30px; } .markdown-body h2 { font-size: 21px; } .markdown-body h3 { font-size: 16px; } .markdown-body h4 { font-size: 14px; } .markdown-body h5 { font-size: 12px; } .markdown-body h6 { font-size: 11px; } .markdown-body blockquote { margin: 0; } .markdown-body ul, .markdown-body ol { padding: 0; margin-top: 0; margin-bottom: 0; } .markdown-body ol ol, .markdown-body ul ol { list-style-type: lower-roman; } .markdown-body ul ul ol, .markdown-body ul ol ol, .markdown-body ol ul ol, .markdown-body ol ol ol { list-style-type: lower-alpha; } .markdown-body dd { margin-left: 0; } .markdown-body code, .markdown-body pre, .markdown-body samp { font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace; font-size: 12px; } .markdown-body pre { margin-top: 0; margin-bottom: 0; } .markdown-body kbd { background-color: #e7e7e7; background-image: -moz-linear-gradient(#fefefe, #e7e7e7); background-image: -webkit-linear-gradient(#fefefe, #e7e7e7); background-image: linear-gradient(#fefefe, #e7e7e7); background-repeat: repeat-x; border-radius: 2px; border: 1px solid #cfcfcf; color: #000; padding: 3px 5px; line-height: 10px; font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace; display: inline-block; } .markdown-body>*:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !important; } .markdown-body .headerlink { font: normal 400 16px fontawesome-mini; vertical-align: middle; margin-left: -16px; float: left; display: inline-block; text-decoration: none; opacity: 0; color: #333; } .markdown-body .headerlink:focus { outline: none; } .markdown-body h1 .headerlink { margin-top: 0.8rem; } .markdown-body h2 .headerlink, .markdown-body h3 .headerlink { margin-top: 0.6rem; } .markdown-body h4 .headerlink { margin-top: 0.2rem; } .markdown-body h5 .headerlink, .markdown-body h6 .headerlink { margin-top: 0; } .markdown-body .headerlink:hover, .markdown-body h1:hover .headerlink, .markdown-body h2:hover .headerlink, .markdown-body h3:hover .headerlink, .markdown-body h4:hover .headerlink, .markdown-body h5:hover .headerlink, .markdown-body h6:hover .headerlink { opacity: 1; text-decoration: none; } .markdown-body h1 { padding-bottom: 0.3em; font-size: 2.25em; line-height: 1.2; border-bottom: 1px solid #eee; } .markdown-body h2 { padding-bottom: 0.3em; font-size: 1.75em; line-height: 1.225; border-bottom: 1px solid #eee; } .markdown-body h3 { font-size: 1.5em; line-height: 1.43; } .markdown-body h4 { font-size: 1.25em; } .markdown-body h5 { font-size: 1em; } .markdown-body h6 { font-size: 1em; color: #777; } .markdown-body p, .markdown-body blockquote, .markdown-body ul, .markdown-body ol, .markdown-body dl, .markdown-body table, .markdown-body pre, .markdown-body .admonition { margin-top: 0; margin-bottom: 16px; } .markdown-body hr { height: 4px; padding: 0; margin: 16px 0; background-color: #e7e7e7; border: 0 none; } .markdown-body ul, .markdown-body ol { padding-left: 2em; } .markdown-body ul ul, .markdown-body ul ol, .markdown-body ol ol, .markdown-body ol ul { margin-top: 0; margin-bottom: 0; } .markdown-body li>p { margin-top: 16px; } .markdown-body dl { padding: 0; } .markdown-body dl dt { padding: 0; margin-top: 16px; font-size: 1em; font-style: italic; font-weight: bold; } .markdown-body dl dd { padding: 0 16px; margin-bottom: 16px; } .markdown-body blockquote { padding: 0 15px; color: #777; border-left: 4px solid #ddd; } .markdown-body blockquote>:first-child { margin-top: 0; } .markdown-body blockquote>:last-child { margin-bottom: 0; } .markdown-body table { display: block; width: 100%; overflow: auto; word-break: normal; word-break: keep-all; } .markdown-body table th { font-weight: bold; } .markdown-body table th, .markdown-body table td { padding: 6px 13px; border: 1px solid #ddd; } .markdown-body table tr { background-color: #fff; border-top: 1px solid #ccc; } .markdown-body table tr:nth-child(2n) { background-color: #f8f8f8; } .markdown-body img { max-width: 100%; -moz-box-sizing: border-box; box-sizing: border-box; } .markdown-body code, .markdown-body samp { padding: 0; padding-top: 0.2em; padding-bottom: 0.2em; margin: 0; font-size: 85%; background-color: rgba(0,0,0,0.04); border-radius: 3px; } .markdown-body code:before, .markdown-body code:after { letter-spacing: -0.2em; content: "\00a0"; } .markdown-body pre>code { padding: 0; margin: 0; font-size: 100%; word-break: normal; white-space: pre; background: transparent; border: 0; } .markdown-body .codehilite { margin-bottom: 16px; } .markdown-body .codehilite pre, .markdown-body pre { padding: 16px; overflow: auto; font-size: 85%; line-height: 1.45; background-color: #f7f7f7; border-radius: 3px; } .markdown-body .codehilite pre { margin-bottom: 0; word-break: normal; } .markdown-body pre { word-wrap: normal; } .markdown-body pre code { display: inline; max-width: initial; padding: 0; margin: 0; overflow: initial; line-height: inherit; word-wrap: normal; background-color: transparent; border: 0; } .markdown-body pre code:before, .markdown-body pre code:after { content: normal; } /* Admonition */ .markdown-body .admonition { -webkit-border-radius: 3px; -moz-border-radius: 3px; position: relative; border-radius: 3px; border: 1px solid #e0e0e0; border-left: 6px solid #333; padding: 10px 10px 10px 30px; } .markdown-body .admonition table { color: #333; } .markdown-body .admonition p { padding: 0; } .markdown-body .admonition-title { font-weight: bold; margin: 0; } .markdown-body .admonition>.admonition-title { color: #333; } .markdown-body .attention>.admonition-title { color: #a6d796; } .markdown-body .caution>.admonition-title { color: #d7a796; } .markdown-body .hint>.admonition-title { color: #96c6d7; } .markdown-body .danger>.admonition-title { color: #c25f77; } .markdown-body .question>.admonition-title { color: #96a6d7; } .markdown-body .note>.admonition-title { color: #d7c896; } .markdown-body .admonition:before, .markdown-body .attention:before, .markdown-body .caution:before, .markdown-body .hint:before, .markdown-body .danger:before, .markdown-body .question:before, .markdown-body .note:before { font: normal normal 16px fontawesome-mini; -moz-osx-font-smoothing: grayscale; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; line-height: 1.5; color: #333; position: absolute; left: 0; top: 0; padding-top: 10px; padding-left: 10px; } .markdown-body .admonition:before { content: "\f056\00a0"; color: 333; } .markdown-body .attention:before { content: "\f058\00a0"; color: #a6d796; } .markdown-body .caution:before { content: "\f06a\00a0"; color: #d7a796; } .markdown-body .hint:before { content: "\f05a\00a0"; color: #96c6d7; } .markdown-body .danger:before { content: "\f057\00a0"; color: #c25f77; } .markdown-body .question:before { content: "\f059\00a0"; color: #96a6d7; } .markdown-body .note:before { content: "\f040\00a0"; color: #d7c896; } .markdown-body .admonition::after { content: normal; } .markdown-body .attention { border-left: 6px solid #a6d796; } .markdown-body .caution { border-left: 6px solid #d7a796; } .markdown-body .hint { border-left: 6px solid #96c6d7; } .markdown-body .danger { border-left: 6px solid #c25f77; } .markdown-body .question { border-left: 6px solid #96a6d7; } .markdown-body .note { border-left: 6px solid #d7c896; } .markdown-body .admonition>*:first-child { margin-top: 0 !important; } .markdown-body .admonition>*:last-child { margin-bottom: 0 !important; } /* progress bar*/ .markdown-body .progress { display: block; width: 300px; margin: 10px 0; height: 24px; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; background-color: #ededed; position: relative; box-shadow: inset -1px 1px 3px rgba(0, 0, 0, .1); } .markdown-body .progress-label { position: absolute; text-align: center; font-weight: bold; width: 100%; margin: 0; line-height: 24px; color: #333; text-shadow: 1px 1px 0 #fefefe, -1px -1px 0 #fefefe, -1px 1px 0 #fefefe, 1px -1px 0 #fefefe, 0 1px 0 #fefefe, 0 -1px 0 #fefefe, 1px 0 0 #fefefe, -1px 0 0 #fefefe, 1px 1px 2px #000; -webkit-font-smoothing: antialiased !important; white-space: nowrap; overflow: hidden; } .markdown-body .progress-bar { height: 24px; float: left; -webkit-border-radius: 3px; -moz-border-radius: 3px; border-radius: 3px; background-color: #96c6d7; box-shadow: inset 0 1px 0 rgba(255, 255, 255, .5), inset 0 -1px 0 rgba(0, 0, 0, .1); background-size: 30px 30px; background-image: -webkit-linear-gradient( 135deg, rgba(255, 255, 255, .4) 27%, transparent 27%, transparent 52%, rgba(255, 255, 255, .4) 52%, rgba(255, 255, 255, .4) 77%, transparent 77%, transparent ); background-image: -moz-linear-gradient( 135deg, rgba(255, 255, 255, .4) 27%, transparent 27%, transparent 52%, rgba(255, 255, 255, .4) 52%, rgba(255, 255, 255, .4) 77%, transparent 77%, transparent ); background-image: -ms-linear-gradient( 135deg, rgba(255, 255, 255, .4) 27%, transparent 27%, transparent 52%, rgba(255, 255, 255, .4) 52%, rgba(255, 255, 255, .4) 77%, transparent 77%, transparent ); background-image: -o-linear-gradient( 135deg, rgba(255, 255, 255, .4) 27%, transparent 27%, transparent 52%, rgba(255, 255, 255, .4) 52%, rgba(255, 255, 255, .4) 77%, transparent 77%, transparent ); background-image: linear-gradient( 135deg, rgba(255, 255, 255, .4) 27%, transparent 27%, transparent 52%, rgba(255, 255, 255, .4) 52%, rgba(255, 255, 255, .4) 77%, transparent 77%, transparent ); } .markdown-body .progress-100plus .progress-bar { background-color: #a6d796; } .markdown-body .progress-80plus .progress-bar { background-color: #c6d796; } .markdown-body .progress-60plus .progress-bar { background-color: #d7c896; } .markdown-body .progress-40plus .progress-bar { background-color: #d7a796; } .markdown-body .progress-20plus .progress-bar { background-color: #d796a6; } .markdown-body .progress-0plus .progress-bar { background-color: #c25f77; } .markdown-body .candystripe-animate .progress-bar{ -webkit-animation: animate-stripes 3s linear infinite; -moz-animation: animate-stripes 3s linear infinite; animation: animate-stripes 3s linear infinite; } @-webkit-keyframes animate-stripes { 0% { background-position: 0 0; } 100% { background-position: 60px 0; } } @-moz-keyframes animate-stripes { 0% { background-position: 0 0; } 100% { background-position: 60px 0; } } @keyframes animate-stripes { 0% { background-position: 0 0; } 100% { background-position: 60px 0; } } .markdown-body .gloss .progress-bar { box-shadow: inset 0 4px 12px rgba(255, 255, 255, .7), inset 0 -12px 0 rgba(0, 0, 0, .05); } /* MultiMarkdown Critic Blocks */ .markdown-body .critic_mark { background: #ff0; } .markdown-body .critic_delete { color: #c82829; text-decoration: line-through; } .markdown-body .critic_insert { color: #718c00 ; text-decoration: underline; } .markdown-body .critic_comment { color: #8e908c; font-style: italic; } .markdown-body .headeranchor { font: normal normal 16px fontawesome-mini; line-height: 1; display: inline-block; text-decoration: none; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; user-select: none; } .headeranchor:before { content: '\e157'; } .markdown-body .task-list-item { list-style-type: none; } .markdown-body .task-list-item+.task-list-item { margin-top: 3px; } .markdown-body .task-list-item input { margin: 0 4px 0.25em -20px; vertical-align: middle; } /* Media */ @media only screen and (min-width: 480px) { .markdown-body { font-size:14px; } } @media only screen and (min-width: 768px) { .markdown-body { font-size:16px; } } @media print { .markdown-body * { background: transparent !important; color: black !important; filter:none !important; -ms-filter: none !important; } .markdown-body { font-size:12pt; max-width:100%; outline:none; border: 0; } .markdown-body a, .markdown-body a:visited { text-decoration: underline; } .markdown-body .headeranchor-link { display: none; } .markdown-body a[href]:after { content: " (" attr(href) ")"; } .markdown-body abbr[title]:after { content: " (" attr(title) ")"; } .markdown-body .ir a:after, .markdown-body a[href^="javascript:"]:after, .markdown-body a[href^="#"]:after { content: ""; } .markdown-body pre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; } .markdown-body pre, .markdown-body blockquote { border: 1px solid #999; padding-right: 1em; page-break-inside: avoid; } .markdown-body .progress, .markdown-body .progress-bar { -moz-box-shadow: none; -webkit-box-shadow: none; box-shadow: none; } .markdown-body .progress { border: 1px solid #ddd; } .markdown-body .progress-bar { height: 22px; border-right: 1px solid #ddd; } .markdown-body tr, .markdown-body img { page-break-inside: avoid; } .markdown-body img { max-width: 100% !important; } .markdown-body p, .markdown-body h2, .markdown-body h3 { orphans: 3; widows: 3; } .markdown-body h2, .markdown-body h3 { page-break-after: avoid; } } </style><style>/*GitHub*/ .codehilite {background-color:#fff;color:#333333;} .codehilite .hll {background-color:#ffffcc;} .codehilite .c{color:#999988;font-style:italic} .codehilite .err{color:#a61717;background-color:#e3d2d2} .codehilite .k{font-weight:bold} .codehilite .o{font-weight:bold} .codehilite .cm{color:#999988;font-style:italic} .codehilite .cp{color:#999999;font-weight:bold} .codehilite .c1{color:#999988;font-style:italic} .codehilite .cs{color:#999999;font-weight:bold;font-style:italic} .codehilite .gd{color:#000000;background-color:#ffdddd} .codehilite .ge{font-style:italic} .codehilite .gr{color:#aa0000} .codehilite .gh{color:#999999} .codehilite .gi{color:#000000;background-color:#ddffdd} .codehilite .go{color:#888888} .codehilite .gp{color:#555555} .codehilite .gs{font-weight:bold} .codehilite .gu{color:#800080;font-weight:bold} .codehilite .gt{color:#aa0000} .codehilite .kc{font-weight:bold} .codehilite .kd{font-weight:bold} .codehilite .kn{font-weight:bold} .codehilite .kp{font-weight:bold} .codehilite .kr{font-weight:bold} .codehilite .kt{color:#445588;font-weight:bold} .codehilite .m{color:#009999} .codehilite .s{color:#dd1144} .codehilite .n{color:#333333} .codehilite .na{color:teal} .codehilite .nb{color:#0086b3} .codehilite .nc{color:#445588;font-weight:bold} .codehilite .no{color:teal} .codehilite .ni{color:purple} .codehilite .ne{color:#990000;font-weight:bold} .codehilite .nf{color:#990000;font-weight:bold} .codehilite .nn{color:#555555} .codehilite .nt{color:navy} .codehilite .nv{color:teal} .codehilite .ow{font-weight:bold} .codehilite .w{color:#bbbbbb} .codehilite .mf{color:#009999} .codehilite .mh{color:#009999} .codehilite .mi{color:#009999} .codehilite .mo{color:#009999} .codehilite .sb{color:#dd1144} .codehilite .sc{color:#dd1144} .codehilite .sd{color:#dd1144} .codehilite .s2{color:#dd1144} .codehilite .se{color:#dd1144} .codehilite .sh{color:#dd1144} .codehilite .si{color:#dd1144} .codehilite .sx{color:#dd1144} .codehilite .sr{color:#009926} .codehilite .s1{color:#dd1144} .codehilite .ss{color:#990073} .codehilite .bp{color:#999999} .codehilite .vc{color:teal} .codehilite .vg{color:teal} .codehilite .vi{color:teal} .codehilite .il{color:#009999} .codehilite .gc{color:#999;background-color:#EAF2F5} </style><title>README</title></head><body><article class="markdown-body"><h3 id="leaflet-demo">入门 Leaflet 之小 Demo<a class="headerlink" href="#leaflet-demo" title="Permanent link"></a></h3> <hr /> <blockquote> <p>写在前面 ---- WebGIS 开发基础之 Leaflet</p> <ol> <li>GIS 基本概念:GIS、Map、Layer、Feature、Geometry、Symbol、Data(Point、Polyline、Polygon)、Renderer、Scale、Project、Coordinates;</li> <li>GIS 开发概述:架构模式、常用平台和 SDK、二维三维</li> <li>使用 Leaflet 开发常用功能</li> </ol> <ul> <li>地图加载(底图类型、切换):</li> <li>地图操作(缩放、平移、定位/书签、动画):</li> <li>图层管理(加载、移除、调整顺序):</li> <li>要素标绘(点/聚簇、线、面,符号化/静态动态):</li> <li>属性标注(字段可选、样式定制):</li> <li>专题地图(点、线、面,渲染):</li> <li>查询定位(属性查询、空间查询/周边搜索/缓冲区/面查点线面/点线查面、图属互查、综合查询):</li> <li>信息窗口(入口、Popup、定制):</li> <li>坐标转换(地理与投影、不同地理坐标系):</li> <li>空间运算(长度面积测量、点取坐标、缓冲区、相交包含关系):</li> <li>动态监控(固定点状态切换、车辆监控): <img alt="" src="https://user-gold-cdn.xitu.io/2018/2/25/161cd7239e171384?w=1920&h=959&f=png&s=222128" /></li> </ul> <ol> <li><a href="https://github.com/liuvigongzuoshi/Leaflet_Demo/blob/master/tree/Leaflet%20API.png">Leaflet API</a><img alt="" src="https://user-gold-cdn.xitu.io/2018/3/1/161dd4951441cce1?w=691&h=1217&f=png&s=54115" /></li> </ol> </blockquote> <hr /> <h4 id="demo">Demo 用到的库<a class="headerlink" href="#demo" title="Permanent link"></a></h4> <ul> <li>Flat-UI <a href="https://github.com/designmodo/Flat-UI/"> Flat UI is based on Bootstrap, a comfortable, responsive, and functional framework that simplifies the development of websites.</a>Flat-UI 是基于 Bootstrap 的一个扁平化风格 web 开发框架。</li> <li>leaflet <a href="http://leafletjs.com/reference-1.3.0.html">an open-source JavaScript library for mobile-friendly interactive maps.</a>Leaflet 是一个为建设交互性好适用于移动设备地图,而开发的现代的、开源的 JavaScript 库。</li> <li>Esri Leaflet <a href="http://esri.github.io/esri-leaflet/">A lightweight set of tools for using ArcGIS services with Leaflet.</a>一个轻量级的工具,基于 leaflet 利用 ArcGIS 服务。</li> </ul> <hr /> <h3 id="part-1-demo-1">PART 1: 地图加载(底图类型、切换) <a href="https://github.com/liuvigongzuoshi/Leaflet_Demo/blob/master/demo1.html">Demo 1 </a><a class="headerlink" href="#part-1-demo-1" title="Permanent link"></a></h3> <p><img alt="" src="https://user-gold-cdn.xitu.io/2018/2/25/161cd7e9bfff52ad?w=1920&h=957&f=jpeg&s=2237468" /></p> <ul> <li>库引用</li> </ul> <div class="codehilite"><pre><span class="p"><</span><span class="nt">link</span> <span class="na">rel</span><span class="o">=</span><span class="s">"stylesheet"</span> <span class="na">type</span><span class="o">=</span><span class="s">"text/css"</span> <span class="na">href</span><span class="o">=</span><span class="s">"./lib/Flat-UI-master/dist/css/vendor/bootstrap/css/bootstrap.min.css"</span> <span class="p">/></span> <span class="p"><</span><span class="nt">link</span> <span class="na">rel</span><span class="o">=</span><span class="s">"stylesheet"</span> <span class="na">href</span><span class="o">=</span><span class="s">"./lib/Flat-UI-master/dist/css/flat-ui.min.css"</span><span class="p">></span> <span class="p"><</span><span class="nt">link</span> <span class="na">rel</span><span class="o">=</span><span class="s">"stylesheet"</span> <span class="na">href</span><span class="o">=</span><span class="s">"./lib/leaflet/leaflet.css"</span><span class="p">></span> </pre></div> <div class="codehilite"><pre><span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"./lib/Flat-UI-master/dist/js/vendor/jquery.min.js"</span><span class="p">></</span><span class="nt">script</span><span class="p">></span> <span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"./lib/Flat-UI-master/dist/js/flat-ui.js"</span><span class="p">></</span><span class="nt">script</span><span class="p">></span> <span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"./lib/leaflet/leaflet.js"</span><span class="p">></</span><span class="nt">script</span><span class="p">></span> <span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"./js/urlTemplate.js"</span><span class="p">></</span><span class="nt">script</span><span class="p">></span> </pre></div> <ul> <li>地图加载与切换</li> </ul> <div class="codehilite"><pre><span class="kr">const</span> <span class="nx">map</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="s2">"mapDiv"</span><span class="p">,</span> <span class="p">{</span> <span class="nx">crs</span><span class="o">:</span> <span class="nx">L</span><span class="p">.</span><span class="nx">CRS</span><span class="p">.</span><span class="nx">EPSG3857</span><span class="p">,</span> <span class="c1">//要使用的坐标参考系统,默认的坐标参考系,互联网地图主流坐标系</span> <span class="c1">// crs: L.CRS.EPSG4326, //WGS 84坐标系,GPS默认坐标系</span> <span class="nx">zoomControl</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="c1">// minZoom: 1,</span> <span class="nx">attributionControl</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="p">}).</span><span class="nx">setView</span><span class="p">([</span><span class="mf">30.6268660000</span><span class="p">,</span> <span class="mf">104.1528940000</span><span class="p">],</span> <span class="mi">18</span><span class="p">);</span><span class="c1">//定位在成都北纬N30°37′45.58″ 东经E104°09′1.44″</span> <span class="kd">let</span> <span class="nx">Baselayer</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">tileLayer</span><span class="p">(</span><span class="nx">urlTemplate</span><span class="p">.</span><span class="nx">mapbox_Image</span><span class="p">,</span> <span class="p">{</span> <span class="nx">maxZoom</span><span class="o">:</span> <span class="mi">17</span><span class="p">,</span> <span class="c1">//最大视图</span> <span class="nx">minZoom</span><span class="o">:</span> <span class="mi">2</span><span class="p">,</span> <span class="c1">//最小视图</span> <span class="nx">attribution</span><span class="o">:</span> <span class="s1">'liuvigongzuoshi@foxmail.com &copy; <a href="https://github.com/liuvigongzuoshi/WebGIS-for-learnning/tree/master/Leaflet_Demo">WebGIS-for-learnning</a>'</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="kr">const</span> <span class="nx">setLayer</span> <span class="o">=</span> <span class="p">(</span><span class="nx">ele</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span> <span class="nx">map</span><span class="p">.</span><span class="nx">removeLayer</span><span class="p">(</span><span class="nx">Baselayer</span><span class="p">)</span> <span class="k">if</span> <span class="p">(</span><span class="nx">ele</span> <span class="o">==</span> <span class="s2">"mapbox_Image"</span><span class="p">)</span> <span class="p">{</span> <span class="nx">Baselayer</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">tileLayer</span><span class="p">(</span><span class="nx">urlTemplate</span><span class="p">.</span><span class="nx">mapbox_Image</span><span class="p">,</span> <span class="p">{</span> <span class="nx">maxZoom</span><span class="o">:</span> <span class="mi">17</span><span class="p">,</span> <span class="nx">minZoom</span><span class="o">:</span> <span class="mi">2</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="p">(</span><span class="nx">ele</span> <span class="o">==</span> <span class="s2">"mapbox_Vector"</span><span class="p">)</span> <span class="p">{</span> <span class="nx">Baselayer</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">tileLayer</span><span class="p">(</span><span class="nx">urlTemplate</span><span class="p">.</span><span class="nx">mapbox_Vector</span><span class="p">,</span> <span class="p">{</span> <span class="nx">maxZoom</span><span class="o">:</span> <span class="mi">17</span><span class="p">,</span> <span class="c1">// minZoom: 2</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">Baselayer</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span> </pre></div> <h3 id="demo-1-h5-geolocation-api-demo-11">基于 Demo 1 利用 H5 Geolocation API 定位到当前位置 <a href="https://github.com/liuvigongzuoshi/Leaflet_Demo/blob/master/demo1.1.html">Demo 1.1 </a><a class="headerlink" href="#demo-1-h5-geolocation-api-demo-11" title="Permanent link"></a></h3> <p><img alt="" src="https://user-gold-cdn.xitu.io/2018/2/26/161d283e74f18d76?w=964&h=480&f=gif&s=862550" /></p> <ul> <li>库引用 如上 Demo 1</li> </ul> <div class="codehilite"><pre><span class="c"><!-- marker高亮显示库引用 --></span> <span class="p"><</span><span class="nt">link</span> <span class="na">rel</span><span class="o">=</span><span class="s">"stylesheet"</span> <span class="na">href</span><span class="o">=</span><span class="s">"./lib/leaflet.marker.highlight/leaflet.marker.highlight.css"</span><span class="p">></span> <span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"./lib/leaflet.marker.highlight/leaflet.marker.highlight.js"</span><span class="p">></</span><span class="nt">script</span><span class="p">></span> </pre></div> <ul> <li>判断浏览器是否支持</li> </ul> <div class="codehilite"><pre> <span class="kd">let</span> <span class="nx">map</span><span class="p">;</span> <span class="kd">let</span> <span class="nx">Baselayer</span><span class="p">;</span> <span class="c1">// 使用H5 API定位 定位在当前位置</span> <span class="k">if</span> <span class="p">(</span><span class="nx">navigator</span><span class="p">.</span><span class="nx">geolocation</span><span class="p">)</span> <span class="p">{</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'/* 地理位置服务可用 */'</span><span class="p">)</span> <span class="nx">navigator</span><span class="p">.</span><span class="nx">geolocation</span><span class="p">.</span><span class="nx">getCurrentPosition</span><span class="p">(</span><span class="nx">h5ApiSuccess</span><span class="p">,</span> <span class="nx">h5ApiError</span><span class="p">);</span> <span class="p">}</span> <span class="k">else</span> <span class="p">{</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'/* 地理位置服务不可用 */'</span><span class="p">)</span> <span class="nx">mapInit</span><span class="p">([</span><span class="mf">30.374558</span><span class="p">,</span> <span class="mf">104.09144</span><span class="p">]);</span><span class="c1">//指定一个数据 定位在成都北纬N30°37′45.58″ 东经E104°09′1.44″</span> <span class="p">}</span> </pre></div> <ul> <li>定位成功或失败</li> </ul> <div class="codehilite"><pre> <span class="kr">const</span> <span class="nx">h5ApiSuccess</span> <span class="o">=</span> <span class="p">(</span><span class="nx">position</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span> <span class="kd">let</span> <span class="nx">latitude</span> <span class="o">=</span> <span class="nx">position</span><span class="p">.</span><span class="nx">coords</span><span class="p">.</span><span class="nx">latitude</span><span class="p">;</span> <span class="c1">//纬度</span> <span class="kd">let</span> <span class="nx">longitude</span> <span class="o">=</span> <span class="nx">position</span><span class="p">.</span><span class="nx">coords</span><span class="p">.</span><span class="nx">longitude</span><span class="p">;</span> <span class="c1">//经度</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'你的经度纬度分别为'</span> <span class="o">+</span> <span class="nx">longitude</span> <span class="o">+</span> <span class="s1">','</span> <span class="o">+</span> <span class="nx">latitude</span> <span class="o">+</span> <span class="s1">'。'</span><span class="p">)</span> <span class="k">return</span> <span class="nx">mapInit</span><span class="p">([</span><span class="nx">latitude</span><span class="p">,</span> <span class="nx">longitude</span><span class="p">]);</span> <span class="p">};</span> <span class="kr">const</span> <span class="nx">h5ApiError</span> <span class="o">=</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">'/* 地理位置请求失败 */'</span><span class="p">)</span> <span class="nx">mapInit</span><span class="p">([</span><span class="mf">30.374558</span><span class="p">,</span> <span class="mf">104.09144</span><span class="p">]);</span><span class="c1">//指定一个数据 定位在成都北纬N30°37′45.58″ 东经E104°09′1.44″</span> <span class="p">};</span> </pre></div> <ul> <li>成功后初始化底图</li> </ul> <div class="codehilite"><pre> <span class="kr">const</span> <span class="nx">mapInit</span> <span class="o">=</span> <span class="p">(</span><span class="nx">LatLng</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span> <span class="nx">map</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="s2">"mapDiv"</span><span class="p">,</span> <span class="p">{</span> <span class="nx">crs</span><span class="o">:</span> <span class="nx">L</span><span class="p">.</span><span class="nx">CRS</span><span class="p">.</span><span class="nx">EPSG3857</span><span class="p">,</span> <span class="c1">//要使用的坐标参考系统,默认的坐标参考系</span> <span class="c1">// crs: L.CRS.EPSG4326, //国内的坐标参考系</span> <span class="nx">zoomControl</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="c1">// minZoom: 1,</span> <span class="nx">attributionControl</span><span class="o">:</span> <span class="kc">true</span><span class="p">,</span> <span class="p">}).</span><span class="nx">setView</span><span class="p">(</span><span class="nx">LatLng</span><span class="p">,</span> <span class="mi">18</span><span class="p">);</span><span class="c1">//定位在当前位置</span> <span class="nx">Baselayer</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">tileLayer</span><span class="p">(</span><span class="nx">urlTemplate</span><span class="p">.</span><span class="nx">mapbox_Image</span><span class="p">,</span> <span class="p">{</span> <span class="nx">maxZoom</span><span class="o">:</span> <span class="mi">17</span><span class="p">,</span> <span class="c1">//最大视图</span> <span class="nx">minZoom</span><span class="o">:</span> <span class="mi">2</span><span class="p">,</span> <span class="c1">//最小视图</span> <span class="nx">attribution</span><span class="o">:</span> <span class="s1">'liuvigongzuoshi@foxmail.com &copy; <a href="https://github.com/liuvigongzuoshi/WebGIS-for-learnning/tree/master/Leaflet_Demo">WebGIS-for-learnning</a>'</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="nx">L</span><span class="p">.</span><span class="nx">marker</span><span class="p">(</span><span class="nx">LatLng</span><span class="p">,</span> <span class="p">{</span> <span class="nx">highlight</span><span class="o">:</span> <span class="s2">"permanent"</span> <span class="c1">//永久高亮显示</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="p">}</span> </pre></div> <blockquote> <ul> <li>更多了解 geolocation 对象,可参考<a href="https://developer.mozilla.org/zh-CN/docs/Web/API/Geolocation/Using_geolocation">MDN Web 文档</a></li> <li>更多了解使用 marker 高亮显示,可参考<a href="https://github.com/brandonxiang/leaflet.marker.highlight">leaflet.marker.highlight</a>插件</li> <li>基于 Demo 1 利用 leaflet 封装好的 H5 定位 API,定位到当前位置 <a href="https://github.com/liuvigongzuoshi/Leaflet_Demo/blob/master/demo1.2.html">Demo</a></li> </ul> </blockquote> <h3 id="part-2-demo-2">PART 2: 地图操作(缩放、平移、定位/书签、动画) <a href="https://github.com/liuvigongzuoshi/Leaflet_Demo/blob/master/demo2.html">Demo 2 </a><a class="headerlink" href="#part-2-demo-2" title="Permanent link"></a></h3> <p><img alt="" src="https://user-gold-cdn.xitu.io/2018/2/28/161dcd420e164009?w=964&h=480&f=gif&s=2119022" /></p> <ul> <li> <p>库引用 如上 Demo 1</p> </li> <li> <p>设置地图缩放到指定图层</p> </li> </ul> <div class="codehilite"><pre><span class="nx">map</span><span class="p">.</span><span class="nx">setZoom</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="p">{</span> <span class="c1">// animate: false</span> <span class="p">})</span> <span class="c1">//设置地图缩放到</span> </pre></div> <ul> <li>图层往里进一个图层,放大</li> </ul> <div class="codehilite"><pre><span class="nx">map</span><span class="p">.</span><span class="nx">zoomIn</span><span class="p">()</span> <span class="c1">//图层往里进一个图层,放大</span> <span class="c1">//map.zoomOut() //图层往里出一个图层,缩小</span> </pre></div> <ul> <li>地图平移至中心点</li> </ul> <div class="codehilite"><pre><span class="nx">map</span><span class="p">.</span><span class="nx">panTo</span><span class="p">([</span><span class="mf">37.91082</span><span class="p">,</span> <span class="mf">128.73583</span><span class="p">],</span> <span class="p">{</span> <span class="nx">animate</span><span class="o">:</span> <span class="kc">true</span> <span class="p">})</span> <span class="c1">//地图平移,默认就是true,将地图平移到给定的中心。如果新的中心点在屏幕内与现有的中心点不同则产生平移动作。</span> </pre></div> <ul> <li>地图飞到中心点</li> </ul> <div class="codehilite"><pre><span class="nx">map</span><span class="p">.</span><span class="nx">flyTo</span><span class="p">([</span><span class="mf">36.52</span><span class="p">,</span> <span class="mf">120.31</span><span class="p">]);</span> <span class="c1">// 点到点的抛物线动画,平移加缩放动画</span> </pre></div> <blockquote> <p>注意:尽量避免 setZoom()等地图缩放方法与 flyTo、flyToBounds 一起合用,因为这两类地图操作方法都有各自的缩放值,造成动画不流畅、不能定位到目的点。</p> </blockquote> <ul> <li>地图飞到边界的合适的位置</li> </ul> <div class="codehilite"><pre><span class="nx">map</span><span class="p">.</span><span class="nx">flyToBounds</span><span class="p">(</span><span class="nx">polygon</span><span class="p">.</span><span class="nx">getBounds</span><span class="p">());</span> <span class="c1">//getBounds(获取边界):返回地图视图的经纬度边界。</span> <span class="c1">//飞到这个多变形区域上面,自动判断区域块的大小,合适缩放图层,将地图视图尽可能大地设定在给定的地理边界内。</span> <span class="kd">let</span> <span class="nx">polygon</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">polygon</span><span class="p">(</span> <span class="p">[[</span><span class="mi">37</span><span class="p">,</span> <span class="o">-</span><span class="mf">109.05</span><span class="p">],</span> <span class="p">[</span><span class="mi">41</span><span class="p">,</span> <span class="o">-</span><span class="mf">109.03</span><span class="p">],</span> <span class="p">[</span><span class="mi">41</span><span class="p">,</span> <span class="o">-</span><span class="mf">102.05</span><span class="p">],</span> <span class="p">[</span><span class="mi">37</span><span class="p">,</span> <span class="o">-</span><span class="mf">102.04</span><span class="p">]],</span> <span class="p">[</span><span class="mf">40.774</span><span class="p">,</span> <span class="o">-</span><span class="mf">74.125</span><span class="p">],</span> <span class="p">{</span> <span class="nx">color</span><span class="o">:</span> <span class="s1">'green'</span><span class="p">,</span> <span class="nx">fillColor</span><span class="o">:</span> <span class="s1">'#f03'</span><span class="p">,</span> <span class="nx">fillOpacity</span><span class="o">:</span> <span class="mf">0.5</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="c1">//地图上绘制一个多形</span> </pre></div> <ul> <li>地图定位到边界的合适的位置</li> </ul> <div class="codehilite"><pre><span class="nx">map</span><span class="p">.</span><span class="nx">fitBounds</span><span class="p">(</span><span class="nx">polygon</span><span class="p">.</span><span class="nx">getBounds</span><span class="p">());</span> <span class="c1">//getBounds(获取边界):返回地图视图的经纬度边界。</span> <span class="c1">//平移到一个区域上面,自动判断区域块的大小,合适缩放图层</span> <span class="kd">let</span> <span class="nx">polygon</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">polygon</span><span class="p">(</span> <span class="p">[[</span><span class="mi">37</span><span class="p">,</span> <span class="o">-</span><span class="mf">109.05</span><span class="p">],</span> <span class="p">[</span><span class="mi">41</span><span class="p">,</span> <span class="o">-</span><span class="mf">109.03</span><span class="p">],</span> <span class="p">[</span><span class="mi">41</span><span class="p">,</span> <span class="o">-</span><span class="mf">102.05</span><span class="p">],</span> <span class="p">[</span><span class="mi">37</span><span class="p">,</span> <span class="o">-</span><span class="mf">102.04</span><span class="p">]],</span> <span class="p">[</span><span class="mf">40.774</span><span class="p">,</span> <span class="o">-</span><span class="mf">74.125</span><span class="p">],</span> <span class="p">{</span> <span class="nx">color</span><span class="o">:</span> <span class="s1">'green'</span><span class="p">,</span> <span class="nx">fillColor</span><span class="o">:</span> <span class="s1">'#f03'</span><span class="p">,</span> <span class="nx">fillOpacity</span><span class="o">:</span> <span class="mf">0.5</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="c1">//地图上绘制一个多边形</span> </pre></div> <h3 id="part-3-demo-3">PART 3: 图层管理(加载、移除、调整顺序): <a href="https://github.com/liuvigongzuoshi/Leaflet_Demo/blob/master/demo3.html">Demo 3 </a><a class="headerlink" href="#part-3-demo-3" title="Permanent link"></a></h3> <p><img alt="" src="https://user-gold-cdn.xitu.io/2018/2/28/161dce7e881a2362?w=1920&h=959&f=jpeg&s=2962698" /></p> <ul> <li>库引用</li> </ul> <div class="codehilite"><pre><span class="p"><</span><span class="nt">link</span> <span class="na">rel</span><span class="o">=</span><span class="s">"stylesheet"</span> <span class="na">type</span><span class="o">=</span><span class="s">"text/css"</span> <span class="na">href</span><span class="o">=</span><span class="s">"./lib/Flat-UI-master/dist/css/vendor/bootstrap/css/bootstrap.min.css"</span> <span class="p">/></span> <span class="p"><</span><span class="nt">link</span> <span class="na">rel</span><span class="o">=</span><span class="s">"stylesheet"</span> <span class="na">href</span><span class="o">=</span><span class="s">"./lib/Flat-UI-master/dist/css/flat-ui.min.css"</span><span class="p">></span> <span class="p"><</span><span class="nt">link</span> <span class="na">rel</span><span class="o">=</span><span class="s">"stylesheet"</span> <span class="na">href</span><span class="o">=</span><span class="s">"./lib/leaflet/leaflet.css"</span><span class="p">></span> </pre></div> <div class="codehilite"><pre><span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"./lib/Flat-UI-master/dist/js/vendor/jquery.min.js"</span><span class="p">></</span><span class="nt">script</span><span class="p">></span> <span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"./lib/Flat-UI-master/dist/js/flat-ui.js"</span><span class="p">></</span><span class="nt">script</span><span class="p">></span> <span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"./lib/leaflet/leaflet.js"</span><span class="p">></</span><span class="nt">script</span><span class="p">></span> <span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"./lib/esri-leaflet-v2.1.2/dist/esri-leaflet.js"</span><span class="p">></</span><span class="nt">script</span><span class="p">></span> <span class="c"><!-- esri-leafleat插件 --></span> <span class="p"><</span><span class="nt">script</span> <span class="na">src</span><span class="o">=</span><span class="s">"./js/urlTemplate.js"</span><span class="p">></</span><span class="nt">script</span><span class="p">></span> </pre></div> <ul> <li>使用 esri-leaflet 插件加载 ArcGIS 底图服务</li> </ul> <div class="codehilite"><pre><span class="kd">let</span> <span class="nx">oMap</span> <span class="o">=</span> <span class="kc">null</span><span class="p">;</span> <span class="kd">let</span> <span class="nx">oLayer</span> <span class="o">=</span> <span class="p">[];</span> <span class="nx">oMap</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">map</span><span class="p">(</span><span class="s1">'mapDiv'</span><span class="p">,</span> <span class="p">{</span> <span class="nx">crs</span><span class="o">:</span> <span class="nx">L</span><span class="p">.</span><span class="nx">CRS</span><span class="p">.</span><span class="nx">EPSG4326</span><span class="p">,</span> <span class="nx">zoomControl</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span> <span class="nx">minZoom</span><span class="o">:</span> <span class="mi">7</span><span class="p">,</span> <span class="nx">attributionControl</span><span class="o">:</span> <span class="kc">false</span> <span class="p">}).</span><span class="nx">setView</span><span class="p">([</span><span class="mf">29.59</span><span class="p">,</span> <span class="mf">106.59</span><span class="p">],</span> <span class="mi">12</span><span class="p">);</span> <span class="c1">//定位在重庆</span> <span class="nx">oLayer</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">L</span><span class="p">.</span><span class="nx">esri</span><span class="p">.</span><span class="nx">tiledMapLayer</span><span class="p">({</span> <span class="nx">url</span><span class="o">:</span> <span class="nx">urlTemplate</span><span class="p">.</span><span class="nx">SYS_CQMap_IMG_MAPSERVER_PATH</span><span class="p">,</span> <span class="nx">maxZoom</span><span class="o">:</span> <span class="mi">17</span><span class="p">,</span> <span class="nx">minZoom</span><span class="o">:</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">useCors</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span> <span class="c1">//是否浏览器在跨域的情况下使用GET请求。</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">oMap</span><span class="p">));</span> <span class="c1">//加载第一个底图</span> <span class="nx">oLayer</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">L</span><span class="p">.</span><span class="nx">esri</span><span class="p">.</span><span class="nx">tiledMapLayer</span><span class="p">({</span> <span class="nx">url</span><span class="o">:</span> <span class="nx">urlTemplate</span><span class="p">.</span><span class="nx">SYS_CQMap_IMG_LABEL_MAPSERVER_PATH</span><span class="p">,</span> <span class="nx">maxZoom</span><span class="o">:</span> <span class="mi">17</span><span class="p">,</span> <span class="nx">minZoom</span><span class="o">:</span> <span class="mi">0</span><span class="p">,</span> <span class="nx">useCors</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">oMap</span><span class="p">));</span> <span class="c1">//加载第二个底图</span> </pre></div> <ul> <li>切换底图(移除及加载)</li> </ul> <div class="codehilite"><pre><span class="kr">const</span> <span class="nx">setLayer</span> <span class="o">=</span> <span class="p">(</span><span class="nx">layerUrls</span><span class="p">,</span> <span class="nx">maxZoom</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span> <span class="k">for</span> <span class="p">(</span><span class="kd">let</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o"><</span> <span class="nx">oLayer</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> <span class="nx">oMap</span><span class="p">.</span><span class="nx">removeLayer</span><span class="p">(</span><span class="nx">oLayer</span><span class="p">[</span><span class="nx">i</span><span class="p">])</span> <span class="c1">//将图层在地图上移除</span> <span class="p">}</span> <span class="nx">oLayer</span> <span class="o">=</span> <span class="p">[]</span> <span class="c1">//制空数组</span> <span class="nx">layerUrls</span><span class="p">.</span><span class="nx">map</span><span class="p">((</span><span class="nx">item</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span> <span class="nx">oLayer</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span><span class="nx">L</span><span class="p">.</span><span class="nx">esri</span><span class="p">.</span><span class="nx">tiledMapLayer</span><span class="p">({</span> <span class="nx">url</span><span class="o">:</span> <span class="nx">item</span><span class="p">,</span> <span class="nx">useCors</span><span class="o">:</span> <span class="kc">false</span><span class="p">,</span> <span class="nx">maxZoom</span><span class="o">:</span> <span class="nx">maxZoom</span><span class="p">,</span> <span class="c1">// 设置最大放大图层值</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">oMap</span><span class="p">));</span> <span class="p">})</span> <span class="p">}</span> </pre></div> <blockquote> <p>不同的底图可能图层数不一样,就可能造成浏览器去请求不存在的图层,以及给用户展示出空白区域的不好体验,所以切换图层时候应注意设置最大及最小缩放值。</p> </blockquote> <h3 id="part-4-demo-4">PART 4: 要素标绘(点、线、面,符号化/静态动态) <a href="https://github.com/liuvigongzuoshi/Leaflet_Demo/blob/master/demo4.html">Demo 4 </a><a class="headerlink" href="#part-4-demo-4" title="Permanent link"></a></h3> <p><img alt="" src="https://user-gold-cdn.xitu.io/2018/2/28/161dcf0290ac287b?w=964&h=480&f=gif&s=3275194" /></p> <ul> <li>库引用 如上 Demo 1</li> <li>画一个圆</li> </ul> <div class="codehilite"><pre><span class="c1">// 画一个circle</span> <span class="kr">const</span> <span class="nx">circle</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">circle</span><span class="p">([</span><span class="mf">36.52</span><span class="p">,</span> <span class="mf">120.31</span><span class="p">],</span> <span class="p">{</span> <span class="nx">color</span><span class="o">:</span> <span class="s1">'green'</span><span class="p">,</span> <span class="c1">//描边色</span> <span class="nx">fillColor</span><span class="o">:</span> <span class="s1">'#f03'</span><span class="p">,</span> <span class="c1">//填充色</span> <span class="nx">fillOpacity</span><span class="o">:</span> <span class="mf">0.5</span><span class="p">,</span> <span class="c1">//透明度</span> <span class="nx">radius</span><span class="o">:</span> <span class="mi">10000</span> <span class="c1">//半径,单位米</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="c1">// 绑定一个提示标签</span> <span class="nx">circle</span><span class="p">.</span><span class="nx">bindTooltip</span><span class="p">(</span><span class="s1">'我是个圆'</span><span class="p">);</span> </pre></div> <ul> <li>Maker 及自定义 Maker</li> </ul> <div class="codehilite"><pre><span class="c1">// 做一个maker</span> <span class="kr">const</span> <span class="nx">marker</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">marker</span><span class="p">([</span><span class="mf">36.52</span><span class="p">,</span> <span class="mf">120.31</span><span class="p">]).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="c1">// 绑定一个提示标签</span> <span class="nx">marker</span><span class="p">.</span><span class="nx">bindTooltip</span><span class="p">(</span><span class="s1">'这是个Marker'</span><span class="p">,</span> <span class="p">{</span> <span class="nx">direction</span><span class="o">:</span> <span class="s1">'left'</span> <span class="p">}).</span><span class="nx">openTooltip</span><span class="p">();</span> <span class="c1">//自定义一个maker</span> <span class="kr">const</span> <span class="nx">greenIcon</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">icon</span><span class="p">({</span> <span class="nx">iconUrl</span><span class="o">:</span> <span class="s1">'./icon/logo.png'</span><span class="p">,</span> <span class="nx">iconSize</span><span class="o">:</span> <span class="p">[</span><span class="mi">300</span><span class="p">,</span> <span class="mi">79</span><span class="p">],</span> <span class="c1">// size of the icon</span> <span class="nx">popupAnchor</span><span class="o">:</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">10</span><span class="p">]</span> <span class="c1">// point from which the popup should open relative to the iconAnchor</span> <span class="p">});</span> <span class="kr">const</span> <span class="nx">oMarker</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">marker</span><span class="p">([</span><span class="mf">36.52</span><span class="p">,</span> <span class="mf">124.31</span><span class="p">],</span> <span class="p">{</span> <span class="nx">icon</span><span class="o">:</span> <span class="nx">greenIcon</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="c1">// 绑定一个提示标签</span> <span class="nx">oMarker</span><span class="p">.</span><span class="nx">bindTooltip</span><span class="p">(</span><span class="s1">'这是个自定义Marker'</span><span class="p">,</span> <span class="p">{</span> <span class="nx">direction</span><span class="o">:</span> <span class="s1">'left'</span><span class="p">,</span> <span class="nx">offset</span><span class="o">:</span> <span class="p">[</span><span class="o">-</span><span class="mi">150</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> <span class="p">});</span> </pre></div> <ul> <li>画一根线</li> </ul> <div class="codehilite"><pre><span class="c1">//画一根线</span> <span class="kr">const</span> <span class="nx">polyline</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">polyline</span><span class="p">([[</span><span class="mf">45.51</span><span class="p">,</span> <span class="o">-</span><span class="mf">122.68</span><span class="p">],</span> <span class="p">[</span><span class="mf">37.77</span><span class="p">,</span> <span class="o">-</span><span class="mf">122.43</span><span class="p">],</span> <span class="p">[</span><span class="mf">34.04</span><span class="p">,</span> <span class="o">-</span><span class="mf">118.2</span><span class="p">]],</span> <span class="p">{</span> <span class="nx">color</span><span class="o">:</span> <span class="s1">'red'</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="c1">// 飞到这个线的位置</span> <span class="c1">// map.fitBounds(polyline.getBounds());</span> </pre></div> <ul> <li>画一个多边形</li> </ul> <div class="codehilite"><pre><span class="c1">// 画一个polygon</span> <span class="kr">const</span> <span class="nx">polygon</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">polygon</span><span class="p">([</span> <span class="p">[[</span><span class="mi">37</span><span class="p">,</span> <span class="o">-</span><span class="mf">109.05</span><span class="p">],</span> <span class="p">[</span><span class="mi">41</span><span class="p">,</span> <span class="o">-</span><span class="mf">109.03</span><span class="p">],</span> <span class="p">[</span><span class="mi">41</span><span class="p">,</span> <span class="o">-</span><span class="mf">102.05</span><span class="p">],</span> <span class="p">[</span><span class="mi">37</span><span class="p">,</span> <span class="o">-</span><span class="mf">102.04</span><span class="p">]],</span> <span class="c1">// outer ring</span> <span class="p">[[</span><span class="mf">37.29</span><span class="p">,</span> <span class="o">-</span><span class="mf">108.58</span><span class="p">],</span> <span class="p">[</span><span class="mf">40.71</span><span class="p">,</span> <span class="o">-</span><span class="mf">108.58</span><span class="p">],</span> <span class="p">[</span><span class="mf">40.71</span><span class="p">,</span> <span class="o">-</span><span class="mf">102.50</span><span class="p">],</span> <span class="p">[</span><span class="mf">37.29</span><span class="p">,</span> <span class="o">-</span><span class="mf">102.50</span><span class="p">]]</span> <span class="c1">// hole</span> <span class="p">],</span> <span class="p">{</span> <span class="nx">color</span><span class="o">:</span> <span class="s1">'green'</span><span class="p">,</span> <span class="nx">fillColor</span><span class="o">:</span> <span class="s1">'#f03'</span><span class="p">,</span> <span class="nx">fillOpacity</span><span class="o">:</span> <span class="mf">0.5</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="c1">// 绑定一个提示标签</span> <span class="nx">polygon</span><span class="p">.</span><span class="nx">bindTooltip</span><span class="p">(</span><span class="s1">'this is 个多边形'</span><span class="p">);</span> <span class="c1">// 飞到这个多边形的位置</span> <span class="c1">// map.fitBounds(polygon.getBounds());</span> </pre></div> <h3 id="part-5-popup-demo-5">PART 5: 信息窗口(入口、Popup、定制) <a href="https://github.com/liuvigongzuoshi/Leaflet_Demo/blob/master/demo5.html">Demo 5 </a><a class="headerlink" href="#part-5-popup-demo-5" title="Permanent link"></a></h3> <p><img alt="" src="https://user-gold-cdn.xitu.io/2018/2/28/161dd0f8edbe36e5?w=964&h=480&f=gif&s=3360015" /></p> <ul> <li>库引用 如上 Demo 1</li> <li>画一个 circle 并绑定一个 Popup</li> </ul> <div class="codehilite"><pre><span class="c1">// 画一个circle</span> <span class="kr">const</span> <span class="nx">circle</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">circle</span><span class="p">([</span><span class="mf">36.92</span><span class="p">,</span> <span class="mf">121.31</span><span class="p">],</span> <span class="p">{</span> <span class="nx">color</span><span class="o">:</span> <span class="s1">'green'</span><span class="p">,</span> <span class="c1">//描边色</span> <span class="nx">fillColor</span><span class="o">:</span> <span class="s1">'#f03'</span><span class="p">,</span> <span class="c1">//填充色</span> <span class="nx">fillOpacity</span><span class="o">:</span> <span class="mf">0.5</span><span class="p">,</span> <span class="c1">//透明度</span> <span class="nx">radius</span><span class="o">:</span> <span class="mi">10000</span> <span class="c1">//半径,单位米</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="c1">// 绑定一个弹窗</span> <span class="nx">circle</span><span class="p">.</span><span class="nx">bindPopup</span><span class="p">(</span><span class="s1">'我是个圆'</span><span class="p">);</span> </pre></div> <ul> <li>定位一个 marker,绑定一个自定义 Popup</li> </ul> <div class="codehilite"><pre><span class="c1">// 定位一个maker</span> <span class="kr">const</span> <span class="nx">marker</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">marker</span><span class="p">([</span><span class="mf">36.52</span><span class="p">,</span> <span class="mf">120.31</span><span class="p">]).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="c1">//maker上自定义一个popup</span> <span class="kr">const</span> <span class="nx">html</span> <span class="o">=</span> <span class="s1">'<p>Hello world!<br />This is a nice popup.</p>'</span><span class="p">;</span> <span class="kr">const</span> <span class="nx">popup</span> <span class="o">=</span> <span class="nx">marker</span><span class="p">.</span><span class="nx">bindPopup</span><span class="p">(</span><span class="nx">html</span><span class="p">,</span> <span class="p">{</span> <span class="nx">maxHeight</span><span class="o">:</span> <span class="mi">250</span><span class="p">,</span> <span class="nx">maxWidth</span><span class="o">:</span> <span class="mi">490</span><span class="p">,</span> <span class="nx">className</span><span class="o">:</span> <span class="s1">'content'</span><span class="p">,</span> <span class="nx">offset</span><span class="o">:</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]</span> <span class="p">}).</span><span class="nx">on</span><span class="p">(</span><span class="s1">'popupopen'</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">params</span><span class="p">)</span> <span class="p">{</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="nx">params</span><span class="p">)</span> <span class="p">});</span> </pre></div> <ul> <li>实现动态改变 Popup 的内容</li> </ul> <div class="codehilite"><pre><span class="kr">const</span> <span class="nx">mypop</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">popup</span><span class="p">();</span> <span class="nx">map</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s1">'click'</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="p">{</span> <span class="nx">mypop</span><span class="p">.</span><span class="nx">setLatLng</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">latlng</span><span class="p">)</span> <span class="p">.</span><span class="nx">setContent</span><span class="p">(</span><span class="s1">'你临幸了这个点:<br>'</span> <span class="o">+</span> <span class="nx">e</span><span class="p">.</span><span class="nx">latlng</span><span class="p">.</span><span class="nx">toString</span><span class="p">())</span> <span class="p">.</span><span class="nx">openOn</span><span class="p">(</span><span class="nx">map</span><span class="p">);</span> <span class="p">});</span> </pre></div> <h3 id="part-6-geojson-demo-6">PART 6: geojson 数据绘制边界(坐标转换、渲染) <a href="https://github.com/liuvigongzuoshi/Leaflet_Demo/blob/master/demo6.html">Demo 6 </a><a class="headerlink" href="#part-6-geojson-demo-6" title="Permanent link"></a></h3> <p><img alt="" src="https://user-gold-cdn.xitu.io/2018/3/1/161dd3b18402adcc?w=964&h=480&f=gif&s=5224505" /></p> <ul> <li> <p>库引用 如上 Demo 1</p> </li> <li> <p>获得 geojson 并处理数据</p> </li> </ul> <div class="codehilite"><pre><span class="c1">// 请求geojson并处理数据</span> <span class="kr">const</span> <span class="nx">population</span> <span class="o">=</span> <span class="p">()</span> <span class="o">=></span> <span class="p">{</span> <span class="nx">$</span><span class="p">.</span><span class="nx">get</span><span class="p">(</span><span class="s2">"./js/geojson.json"</span><span class="p">,</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span> <span class="kr">const</span> <span class="nx">poplData</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">data</span> <span class="kr">const</span> <span class="nx">PolygonsCenter</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">geopoint</span> <span class="nx">drawPolygons</span><span class="p">(</span><span class="nx">poplData</span><span class="p">,</span> <span class="nx">PolygonsCenter</span><span class="p">)</span> <span class="p">});</span> <span class="p">}</span> </pre></div> <blockquote> <p>模拟后台返回的数据<a href="https://github.com/liuvigongzuoshi/Leaflet_Demo/blob/master/js/geojson.json">geojson</a></p> </blockquote> <ul> <li>绘制边界并添加图例</li> </ul> <div class="codehilite"><pre><span class="kd">let</span> <span class="nx">oPolygon_VilPop</span> <span class="o">=</span> <span class="p">[];</span> <span class="kr">const</span> <span class="nx">legend</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">control</span><span class="p">({</span> <span class="nx">position</span><span class="o">:</span> <span class="s1">'bottomright'</span> <span class="p">});</span> <span class="kr">const</span> <span class="nx">drawPolygons</span> <span class="o">=</span> <span class="p">(</span><span class="nx">poplData</span><span class="p">,</span> <span class="nx">PolygonsCenter</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span> <span class="k">for</span> <span class="p">(</span><span class="kr">const</span> <span class="nx">i</span> <span class="k">in</span> <span class="nx">poplData</span><span class="p">)</span> <span class="p">{</span> <span class="nx">poplData</span><span class="p">[</span><span class="nx">i</span><span class="p">].</span><span class="nx">geoJson</span> <span class="o">=</span> <span class="nx">JSON</span><span class="p">.</span><span class="nx">parse</span><span class="p">(</span><span class="nx">poplData</span><span class="p">[</span><span class="nx">i</span><span class="p">].</span><span class="nx">geoJson</span><span class="p">)</span> <span class="nx">oPolygon_VilPop</span><span class="p">[</span><span class="nx">i</span><span class="p">]</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">geoJSON</span><span class="p">(</span><span class="nx">poplData</span><span class="p">[</span><span class="nx">i</span><span class="p">].</span><span class="nx">geoJson</span><span class="p">,</span> <span class="p">{</span> <span class="nx">style</span><span class="o">:</span> <span class="kd">function</span> <span class="p">()</span> <span class="p">{</span> <span class="k">return</span> <span class="p">{</span> <span class="nx">color</span><span class="o">:</span> <span class="s1">'white'</span><span class="p">,</span> <span class="nx">fillColor</span><span class="o">:</span> <span class="nx">getBgColor</span><span class="p">(</span><span class="nx">poplData</span><span class="p">[</span><span class="nx">i</span><span class="p">].</span><span class="nx">population</span><span class="p">),</span> <span class="c1">//获取边界的填充色</span> <span class="nx">fillOpacity</span><span class="o">:</span> <span class="mf">0.6</span><span class="p">,</span> <span class="nx">weight</span><span class="o">:</span> <span class="mi">3</span><span class="p">,</span> <span class="nx">dashArray</span><span class="o">:</span> <span class="s1">'10'</span> <span class="p">};</span> <span class="p">}</span> <span class="p">}).</span><span class="nx">bindTooltip</span><span class="p">(</span><span class="nx">poplData</span><span class="p">[</span><span class="nx">i</span><span class="p">].</span><span class="nx">villageName</span> <span class="o">+</span> <span class="s1">'<br><br>人口'</span> <span class="o">+</span> <span class="nx">poplData</span><span class="p">[</span><span class="nx">i</span><span class="p">].</span><span class="nx">population</span> <span class="o">+</span> <span class="s1">'人'</span><span class="p">,</span> <span class="p">{</span> <span class="nx">direction</span><span class="o">:</span> <span class="s1">'top'</span> <span class="p">}).</span><span class="nx">on</span><span class="p">({</span> <span class="nx">mouseover</span><span class="o">:</span> <span class="nx">highlight</span><span class="p">,</span> <span class="c1">//鼠标移动上去高亮</span> <span class="nx">mouseout</span><span class="o">:</span> <span class="nx">resetHighlight</span><span class="p">,</span> <span class="c1">//鼠标移出恢复原样式</span> <span class="nx">click</span><span class="o">:</span> <span class="nx">zoomTo</span> <span class="c1">//点击最大化</span> <span class="p">}).</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">oMap</span><span class="p">);</span> <span class="p">}</span> <span class="c1">// 添加图例</span> <span class="nx">legend</span><span class="p">.</span><span class="nx">onAdd</span> <span class="o">=</span> <span class="nx">legendHtml</span><span class="p">;</span> <span class="nx">legend</span><span class="p">.</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">oMap</span><span class="p">);</span> <span class="c1">// 定位到该界限的中心位置</span> <span class="nx">oMap</span><span class="p">.</span><span class="nx">flyToBounds</span><span class="p">(</span><span class="nx">PolygonsCenter</span><span class="p">);</span> <span class="p">}</span> <span class="c1">// 添加图例</span> <span class="nx">legend</span><span class="p">.</span><span class="nx">onAdd</span> <span class="o">=</span> <span class="nx">legendHtml</span><span class="p">;</span> <span class="nx">legend</span><span class="p">.</span><span class="nx">addTo</span><span class="p">(</span><span class="nx">oMap</span><span class="p">);</span> <span class="c1">// 定位到该界限的中心位置</span> <span class="nx">oMap</span><span class="p">.</span><span class="nx">flyToBounds</span><span class="p">(</span><span class="nx">PolygonsCenter</span><span class="p">);</span> <span class="p">}</span> </pre></div> <ul> <li>返回边界的填充色及图列的样式</li> </ul> <div class="codehilite"><pre><span class="kr">const</span> <span class="nx">getBgColor</span> <span class="o">=</span> <span class="p">(</span><span class="nx">d</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span> <span class="k">return</span> <span class="nx">d</span> <span class="o">></span> <span class="mi">400</span> <span class="o">?</span> <span class="s1">'#800026'</span> <span class="o">:</span> <span class="nx">d</span> <span class="o">></span> <span class="mi">300</span> <span class="o">?</span> <span class="s1">'#BD0026'</span> <span class="o">:</span> <span class="nx">d</span> <span class="o">></span> <span class="mi">200</span> <span class="o">?</span> <span class="s1">'#FC4E2A'</span> <span class="o">:</span> <span class="nx">d</span> <span class="o">></span> <span class="mi">100</span> <span class="o">?</span> <span class="s1">'#FD8D3C'</span> <span class="o">:</span> <span class="nx">d</span> <span class="o">></span> <span class="mi">50</span> <span class="o">?</span> <span class="s1">'#FED976'</span> <span class="o">:</span> <span class="s1">'#FFEDA0'</span><span class="p">;</span> <span class="p">}</span> <span class="kr">const</span> <span class="nx">legendHtml</span> <span class="o">=</span> <span class="p">(</span><span class="nx">map</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span> <span class="kd">let</span> <span class="nx">div</span> <span class="o">=</span> <span class="nx">L</span><span class="p">.</span><span class="nx">DomUtil</span><span class="p">.</span><span class="nx">create</span><span class="p">(</span><span class="s1">'div'</span><span class="p">,</span> <span class="s1">'legend locateVP_legend'</span><span class="p">),</span> <span class="nx">grades</span> <span class="o">=</span> <span class="p">[</span><span class="mi">0</span><span class="p">,</span> <span class="mi">50</span><span class="p">,</span> <span class="mi">100</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="mi">400</span><span class="p">],</span> <span class="nx">labels</span> <span class="o">=</span> <span class="p">[],</span> <span class="nx">from</span><span class="p">,</span> <span class="nx">to</span><span class="p">;</span> <span class="k">for</span> <span class="p">(</span><span class="kd">let</span> <span class="nx">i</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span> <span class="nx">i</span> <span class="o"><</span> <span class="nx">grades</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">i</span><span class="o">++</span><span class="p">)</span> <span class="p">{</span> <span class="nx">from</span> <span class="o">=</span> <span class="nx">grades</span><span class="p">[</span><span class="nx">i</span><span class="p">];</span> <span class="nx">to</span> <span class="o">=</span> <span class="nx">grades</span><span class="p">[</span><span class="nx">i</span> <span class="o">+</span> <span class="mi">1</span><span class="p">];</span> <span class="nx">labels</span><span class="p">.</span><span class="nx">push</span><span class="p">(</span> <span class="s1">'<i style="background:'</span> <span class="o">+</span> <span class="nx">getBgColor</span><span class="p">(</span><span class="nx">from</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="s1">'"></i> '</span> <span class="o">+</span> <span class="nx">from</span> <span class="o">+</span> <span class="p">(</span><span class="nx">to</span> <span class="o">?</span> <span class="s1">' &sim; '</span> <span class="o">+</span> <span class="nx">to</span> <span class="o">+</span> <span class="s1">'人'</span> <span class="o">:</span> <span class="s1">'以上'</span><span class="p">));</span> <span class="p">}</span> <span class="nx">div</span><span class="p">.</span><span class="nx">innerHTML</span> <span class="o">=</span> <span class="nx">labels</span><span class="p">.</span><span class="nx">join</span><span class="p">(</span><span class="s1">'<br>'</span><span class="p">);</span> <span class="k">return</span> <span class="nx">div</span><span class="p">;</span> <span class="p">};</span> </pre></div> <ul> <li>鼠标移动上去的事件、鼠标移出的事件、发生点击的事件</li> </ul> <div class="codehilite"><pre><span class="kr">const</span> <span class="nx">highlight</span> <span class="o">=</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span> <span class="kd">let</span> <span class="nx">layer</span> <span class="o">=</span> <span class="nx">e</span><span class="p">.</span><span class="nx">target</span><span class="p">;</span> <span class="nx">layer</span><span class="p">.</span><span class="nx">setStyle</span><span class="p">({</span> <span class="nx">weight</span><span class="o">:</span> <span class="mi">6</span><span class="p">,</span> <span class="nx">color</span><span class="o">:</span> <span class="s1">'#fff'</span><span class="p">,</span> <span class="nx">fillOpacity</span><span class="o">:</span> <span class="mf">0.9</span><span class="p">,</span> <span class="nx">dashArray</span><span class="o">:</span> <span class="s1">'0'</span> <span class="p">})</span> <span class="p">}</span> <span class="kr">const</span> <span class="nx">resetHighlight</span> <span class="o">=</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span> <span class="kd">let</span> <span class="nx">layer</span> <span class="o">=</span> <span class="nx">e</span><span class="p">.</span><span class="nx">target</span><span class="p">;</span> <span class="nx">layer</span><span class="p">.</span><span class="nx">setStyle</span><span class="p">({</span> <span class="nx">color</span><span class="o">:</span> <span class="s1">'white'</span><span class="p">,</span> <span class="nx">weight</span><span class="o">:</span> <span class="mi">3</span><span class="p">,</span> <span class="nx">fillOpacity</span><span class="o">:</span> <span class="mf">0.6</span><span class="p">,</span> <span class="nx">dashArray</span><span class="o">:</span> <span class="s1">'10'</span> <span class="p">})</span> <span class="p">}</span> <span class="kr">const</span> <span class="nx">zoomTo</span> <span class="o">=</span> <span class="p">(</span><span class="nx">e</span><span class="p">)</span> <span class="o">=></span> <span class="p">{</span> <span class="nx">oMap</span><span class="p">.</span><span class="nx">fitBounds</span><span class="p">(</span><span class="nx">e</span><span class="p">.</span><span class="nx">target</span><span class="p">.</span><span class="nx">getBounds</span><span class="p">());</span> <span class="p">}</span> </pre></div> <h3 id="_1">写在后面<a class="headerlink" href="#_1" title="Permanent link"></a></h3> <h4 id="_2">国内常用地图服务资源加载插件<a class="headerlink" href="#_2" title="Permanent link"></a></h4> <blockquote> <p>Leaflet.ChineseTmsProviders <a href="https://github.com/htoooth/Leaflet.ChineseTmsProviders">Provider for Chinese Tms Service</a></p> </blockquote> <ul> <li> <p>Leaflet 调用国内各种地图的功能十分复杂,幸好有 leaflet.ChineseTmsProviders 这个插件,这四种地图直接就可以加载进来,十分方便。</p> </li> <li> <p>使用方法很简单可点击上面链接去 GitHub 看使用说明,或拉<a href="https://github.com/liuvigongzuoshi/WebGIS-for-learnning/tree/master/Leaflet.ChineseTmsProviders_Demo">这个 demo</a>下来来瞧一瞧代码。</p> </li> </ul> <h4 id="marker">优化 marker 相关的插件<a class="headerlink" href="#marker" title="Permanent link"></a></h4> <ul> <li> <p>提供了丰富多彩的图标 <a href="https://github.com/lvoogdt/Leaflet.awesome-markers">Leaflet.awesome-markers</a>, See the <a href="http://jsfiddle.net/VPzu4/92/">demo map</a></p> </li> <li> <p>强大的集聚插件 <a href="https://github.com/Leaflet/Leaflet.markercluster">Leaflet.markercluster</a>, See the <a href="https://leaflet.github.io/Leaflet.markercluster/example/marker-clustering-realworld.388.html">demo map</a></p> </li> <li> <p>优化的 label <a href="https://github.com/Leaflet/Leaflet.label">Leaflet.label</a>, See the <a href="http://leaflet.github.io/Leaflet.label/">demo map</a></p> </li> <li> <p>优化重叠在一起的 markers <a href="https://github.com/jawj/OverlappingMarkerSpiderfier-Leaflet">OverlappingMarkerSpiderfier-Leaflet</a>, See the <a href="http://jawj.github.io/OverlappingMarkerSpiderfier-Leaflet/demo.html">demo map</a></p> </li> <li> <p>优化在边框上显示不在当前视野中的 marker <a href="https://github.com/ubergesundheit/Leaflet.EdgeMarker">Leaflet.EdgeMarker</a>, See the <a href="http://ubergesundheit.github.io/Leaflet.EdgeMarker/">demo map</a></p> </li> </ul> <h4 id="_3">模块化开发的加载包注意的问题<a class="headerlink" href="#_3" title="Permanent link"></a></h4> <ul> <li>引 leaflet 包的时候不要忘记引用包里的 css <code>import 'leaflet/dist/leaflet.css';</code></li> </ul> <h4 id="leaflet-esri-leaflet-lesritiledmaplayer-arcgis-uncaught-referenceerror-proj4-is-not-defined">关于 Leaflet 和 esri-leaflet 一起使用 L.esri.TiledMapLayer 加载 ArcGIS 服务切片底图时,控制台打印报错 <code>Uncaught ReferenceError: proj4 is not defined</code><a class="headerlink" href="#leaflet-esri-leaflet-lesritiledmaplayer-arcgis-uncaught-referenceerror-proj4-is-not-defined" title="Permanent link"></a></h4> <ul> <li>查看了下源码 <code>if (!proj4) { warn('L.esri.TiledMapLayer is using a non-mercator spatial reference. Support may be available through Proj4Leaflet http://esri.github.io/esri-leaflet/examples/non-mercator-projection.html');}</code> 问题就出在这里,esri-leaflet 里的一个插件 proj4leaflet 依赖<a href="https://github.com/proj4js/proj4js">proj4</a>,所以需要手动引入 proj4 这个包。</li> <li>这个 GitHub 上面的提问及回答 <a href="https://github.com/Esri/esri-leaflet/issues/1019">Github esri-leaflet Issues</a></li> <li>如果你是模块化开发,需要再<code>npm i proj4</code> 然后再引入进来好了 <code>import * as proj4 from 'proj4'; window['proj4'] = proj4;</code></li> <li>如果你是常规开发,直接添加一个 script 标签引用 CDN 资源上托管的<a href="https://cdnjs.com/libraries/proj4js">Proj4js</a>就是了 <code><script src="https://cdnjs.cloudflare.com/ajax/libs/proj4js/2.4.4/proj4-src.js"></script></code></li> </ul> <h4 id="leaflet">Leaflet 学习资料整理<a class="headerlink" href="#leaflet" title="Permanent link"></a></h4> <ul> <li><a href="https://github.com/liuvigongzuoshi/summarize-web-resources/blob/master/leaflet/leaflet-develop-guide.md">Leaflet-Develop-Guide 🍃</a> -开发文档及常用插件小结</li> </ul> <h3 id="_4">参考<a class="headerlink" href="#_4" title="Permanent link"></a></h3> <ul> <li><a href="http://blog.csdn.net/liyuanxiang1984/article/details/54601985">GIS 制图乐园 esri-leaflet 入门教程(1)-leaflet 介绍</a></li> <li><a href="https://www.jianshu.com/p/3b3efa92dd6d">Awesome GIS(GIS Tech Stack 技术栈)</a></li> <li><a href="http://malagis.com/learning-leaflet-js-note.html">麻辣 GIS Leaflet 学习笔记</a></li> </ul> <blockquote> <p>持续更新中 原文地址: <a href="https://juejin.im/post/5a658614f265da3e3f4cce0e">https://juejin.im/post/5a658614f265da3e3f4cce0e</a></p> </blockquote></article></body></html>
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。