<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>砚书の领域</title>
    <link>http://yoursite.com/</link>
    <atom:link href="/rss2.xml" rel="self" type="application/rss+xml"/>
    
    <description></description>
    <pubDate>Fri, 17 Jun 2022 06:51:15 GMT</pubDate>
    <generator>http://hexo.io/</generator>
    
    <item>
      <title>GitHub Action记录</title>
      <link>http://yoursite.com/2022/06/15/GitHub-Action%E8%AE%B0%E5%BD%95/</link>
      <guid>http://yoursite.com/2022/06/15/GitHub-Action%E8%AE%B0%E5%BD%95/</guid>
      <pubDate>Wed, 15 Jun 2022 09:48:49 GMT</pubDate>
      <description>
      
        &lt;p&gt;最近又被备案号发邮件通知，我的个站备案有问题了，才想起来好久没有折腾这个玩意了，也没有写东西了。这两天就不想用 Typecho ，就想写记录的方式都是形式，还是回归最朴实的方式吧。然后就准备还是继续在hexo上写东西了，然后用 GitHub Action 来进行个推送，保证 GitHub Pages还能正常使用，然后在增加小shell，来给我个人服务器上推送一份，本来好好的使用的 travisCI，那天看了下，好像更新了，又要重新申请，免费版本还要限制，那就 GitHub Action 了&lt;/p&gt;
      
      </description>
      
      <content:encoded><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>最近又被备案号发邮件通知，我的个站备案有问题了，才想起来好久没有折腾这个玩意了，也没有写东西了。这两天就不想用 Typecho ，就想写记录的方式都是形式，还是回归最朴实的方式吧。然后就准备还是继续在hexo上写东西了，然后用 GitHub Action 来进行个推送，保证 GitHub Pages还能正常使用，然后在增加小shell，来给我个人服务器上推送一份，本来好好的使用的 travisCI，那天看了下，好像更新了，又要重新申请，免费版本还要限制，那就 GitHub Action 了</p><a id="more"></a><h1 id="hexo-使用GitHub-Action-进行部署"><a href="#hexo-使用GitHub-Action-进行部署" class="headerlink" title="hexo 使用GitHub Action 进行部署"></a>hexo 使用GitHub Action 进行部署</h1><p>Hexo 使用的是 GitHub Pages，我选择了 dev 分支进行笔记记录，然后 push 到 dev 分支，然后 master 分支作为主分支，用于发布页面。这里，我就想把页面的构建流程全部放在 GitHub Action 上进行这一系列的操作。</p><h2 id="创建脚本"><a href="#创建脚本" class="headerlink" title="创建脚本"></a>创建脚本</h2><p>在项目根目录下，根据下图所示，创建.github/workflows 文件夹，然后在里面可以随便创建个 main.yml，或者起名其他的  yml文件</p><p><img src="/2022/06/15/GitHub-Action记录/githubaction1.jpg" alt="GitHub 创建脚步"></p><h2 id="了解下-Github-Action-yml规范"><a href="#了解下-Github-Action-yml规范" class="headerlink" title="了解下 Github Action yml规范"></a>了解下 Github Action yml规范</h2><p>可以在官网，或者其他学习网站上，大概了解下这个流程写法的规范，以及方式和方法。然后进入yml，可以进行简单的脚本编写</p><h2 id="创建-secrets"><a href="#创建-secrets" class="headerlink" title="创建 secrets"></a>创建 secrets</h2><p>对于在 yml 要使用到的自己的私密key 或者，一些服务器 IP 或者密码，不想暴露在外面的，都可以在这里创建，然后在 yml 中，通过变量的方式引用就可以了</p><p><img src="/2022/06/15/GitHub-Action记录/githubaction2.jpg" alt="GitHub 创建secret"></p><h2 id="分析-yml-脚本"><a href="#分析-yml-脚本" class="headerlink" title="分析 yml 脚本"></a>分析 yml 脚本</h2><figure class="highlight yml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br><span class="line">37</span><br><span class="line">38</span><br><span class="line">39</span><br><span class="line">40</span><br><span class="line">41</span><br><span class="line">42</span><br><span class="line">43</span><br><span class="line">44</span><br><span class="line">45</span><br><span class="line">46</span><br><span class="line">47</span><br><span class="line">48</span><br><span class="line">49</span><br><span class="line">50</span><br><span class="line">51</span><br><span class="line">52</span><br><span class="line">53</span><br><span class="line">54</span><br><span class="line">55</span><br><span class="line">56</span><br><span class="line">57</span><br><span class="line">58</span><br><span class="line">59</span><br><span class="line">60</span><br><span class="line">61</span><br><span class="line">62</span><br><span class="line">63</span><br><span class="line">64</span><br><span class="line">65</span><br><span class="line">66</span><br><span class="line">67</span><br><span class="line">68</span><br><span class="line">69</span><br><span class="line">70</span><br><span class="line">71</span><br><span class="line">72</span><br><span class="line">73</span><br><span class="line">74</span><br><span class="line">75</span><br><span class="line">76</span><br><span class="line">77</span><br><span class="line">78</span><br><span class="line">79</span><br><span class="line">80</span><br><span class="line">81</span><br><span class="line">82</span><br><span class="line">83</span><br><span class="line">84</span><br><span class="line">85</span><br><span class="line">86</span><br><span class="line">87</span><br><span class="line">88</span><br><span class="line">89</span><br><span class="line">90</span><br><span class="line">91</span><br><span class="line">92</span><br><span class="line">93</span><br><span class="line">94</span><br><span class="line">95</span><br><span class="line">96</span><br><span class="line">97</span><br></pre></td><td class="code"><pre><span class="line"><span class="comment"># This workflow will run tests using node and then publish a package to GitHub Packages when a release is created</span></span><br><span class="line"><span class="comment"># For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages</span></span><br><span class="line"></span><br><span class="line"><span class="attr">name:</span> <span class="string">Deploy</span> <span class="string">Chencc_Blog</span>  <span class="comment">#自动化的名称</span></span><br><span class="line"></span><br><span class="line"><span class="attr">on:</span></span><br><span class="line">  <span class="comment"># Triggers the workflow on push or pull request events but only for the main branch</span></span><br><span class="line"><span class="attr">  push:</span> <span class="comment"># push的时候触发</span></span><br><span class="line"><span class="attr">    branches:</span> <span class="string">[</span> <span class="string">dev</span> <span class="string">]</span>  <span class="comment"># 哪些分支需要触发</span></span><br><span class="line"><span class="attr">  pull_request:</span>  </span><br><span class="line"><span class="attr">    branches:</span> <span class="string">[</span> <span class="string">dev</span> <span class="string">]</span></span><br><span class="line"></span><br><span class="line"><span class="comment"># A workflow run is made up of one or more jobs that can run sequentially or in parallel</span></span><br><span class="line"><span class="attr">jobs:</span></span><br><span class="line">  <span class="comment"># This workflow contains a single job called "build"</span></span><br><span class="line"><span class="attr">  Blog_CI-CD:</span></span><br><span class="line"><span class="attr">    runs-on:</span> <span class="string">ubuntu-latest</span>  <span class="comment"># 服务器环境</span></span><br><span class="line">    <span class="comment"># Steps represent a sequence of tasks that will be executed as part of the job</span></span><br><span class="line">    </span><br><span class="line"><span class="attr">    steps:</span></span><br><span class="line">      <span class="comment"># 检查代码</span></span><br><span class="line"><span class="attr">      - name:</span> <span class="string">Checkout</span></span><br><span class="line"><span class="attr">        uses:</span> <span class="string">actions/checkout@v2</span>  <span class="comment">#软件市场的名称</span></span><br><span class="line"><span class="attr">        with:</span> <span class="comment"># 参数</span></span><br><span class="line"><span class="attr">          submodules:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">          persist-credentials:</span> <span class="literal">false</span></span><br><span class="line">          </span><br><span class="line"><span class="attr">      - name:</span> <span class="string">Setup</span> <span class="string">Node.js</span></span><br><span class="line">       <span class="comment"># 设置 node.js 环境</span></span><br><span class="line"><span class="attr">        uses:</span> <span class="string">actions/setup-node@v1</span></span><br><span class="line"><span class="attr">        with:</span></span><br><span class="line"><span class="attr">          node-version:</span> <span class="string">'v12.14.0'</span></span><br><span class="line">          </span><br><span class="line"><span class="attr">      - name:</span> <span class="string">Cache</span> <span class="string">node</span> <span class="string">modules</span></span><br><span class="line">      <span class="comment"># 设置包缓存目录，避免每次下载</span></span><br><span class="line"><span class="attr">        uses:</span> <span class="string">actions/cache@v1</span></span><br><span class="line"><span class="attr">        with:</span></span><br><span class="line"><span class="attr">          path:</span> <span class="string">~/.npm</span></span><br><span class="line"><span class="attr">          key:</span> <span class="string">$&#123;&#123;</span> <span class="string">runner.os</span> <span class="string">&#125;&#125;-node-$&#123;&#123;</span> <span class="string">hashFiles('**/package-lock.json')</span> <span class="string">&#125;&#125;</span></span><br><span class="line">          </span><br><span class="line">      <span class="comment"># 配置Hexo环境 </span></span><br><span class="line"><span class="attr">      - name:</span> <span class="string">Setup</span> <span class="string">Hexo</span></span><br><span class="line"><span class="attr">        run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          npm install hexo-cli -g</span></span><br><span class="line"><span class="string">          npm install</span></span><br><span class="line"><span class="string">           </span></span><br><span class="line"><span class="string">      </span></span><br><span class="line"><span class="string">      # 生成静态文件</span></span><br><span class="line"><span class="string"></span><span class="attr">      - name:</span> <span class="string">Build</span></span><br><span class="line"><span class="attr">        run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          hexo clean </span></span><br><span class="line"><span class="string">          hexo g</span></span><br><span class="line"><span class="string">        </span></span><br><span class="line"><span class="string">      # 部署到 GitHub Pages</span></span><br><span class="line"><span class="string"></span><span class="attr">      - name:</span> <span class="string">upload</span> <span class="string">GitHub</span> <span class="string">repository</span></span><br><span class="line"><span class="attr">        env:</span> </span><br><span class="line">          <span class="comment"># Github token</span></span><br><span class="line"><span class="attr">          ACTION_DEPLOY_KEY:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.ACCESS_TOKEN</span> <span class="string">&#125;&#125;</span></span><br><span class="line">         <span class="comment"># 将编译后的博客文件推送到指定仓库</span></span><br><span class="line"><span class="attr">        run:</span> <span class="string">|</span></span><br><span class="line"><span class="string">          mkdir -p ~/.ssh/</span></span><br><span class="line"><span class="string">          echo "$ACTION_DEPLOY_KEY" &gt; ~/.ssh/id_rsa</span></span><br><span class="line"><span class="string">          chmod 600 ~/.ssh/id_rsa</span></span><br><span class="line"><span class="string">          ssh-keyscan github.com &gt;&gt; ~/.ssh/known_hosts</span></span><br><span class="line"><span class="string">          </span></span><br><span class="line"><span class="string">          git config --global user.name "chencc"       #username改为你github的用户名</span></span><br><span class="line"><span class="string">          git config --global user.email "932322877@qq.com"     #username改为你github的注册邮箱</span></span><br><span class="line"><span class="string">          </span></span><br><span class="line"><span class="string">          hexo deploy</span></span><br><span class="line"><span class="string">          </span></span><br><span class="line"><span class="string">      # set docker evn</span></span><br><span class="line"><span class="string"></span><span class="attr">      - name:</span> <span class="string">Set</span> <span class="string">up</span> <span class="string">Docker</span> <span class="string">Buildx</span></span><br><span class="line"><span class="attr">        id:</span> <span class="string">buildx</span></span><br><span class="line"><span class="attr">        uses:</span> <span class="string">docker/setup-buildx-action@v1</span></span><br><span class="line">      </span><br><span class="line">      <span class="comment"># 登录到阿里云容器镜像服务</span></span><br><span class="line"><span class="attr">      - name:</span> <span class="string">Login</span> <span class="string">to</span> <span class="string">Ali</span> <span class="string">Docker</span></span><br><span class="line"><span class="attr">        uses:</span> <span class="string">docker/login-action@v1</span></span><br><span class="line">        <span class="comment"># 配置登录信息，secrets 变量在 github settings -&gt; secrets 中设置</span></span><br><span class="line"><span class="attr">        with:</span></span><br><span class="line"><span class="attr">          registry:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.ALIREGISTER</span> <span class="string">&#125;&#125;</span></span><br><span class="line"><span class="attr">          username:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.ALIUSERNAME</span> <span class="string">&#125;&#125;</span></span><br><span class="line"><span class="attr">          password:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.ALIPASSWORD</span> <span class="string">&#125;&#125;</span></span><br><span class="line"></span><br><span class="line">      <span class="comment"># build 并且 push docker 镜像</span></span><br><span class="line"><span class="attr">      - name:</span> <span class="string">Build</span> <span class="string">and</span> <span class="string">push</span></span><br><span class="line"><span class="attr">        id:</span> <span class="string">docker_build</span></span><br><span class="line"><span class="attr">        uses:</span> <span class="string">docker/build-push-action@v2</span></span><br><span class="line"><span class="attr">        with:</span></span><br><span class="line"><span class="attr">          context:</span> <span class="string">./</span></span><br><span class="line"><span class="attr">          file:</span> <span class="string">./Dockerfile</span></span><br><span class="line"><span class="attr">          push:</span> <span class="literal">true</span></span><br><span class="line"><span class="attr">          tags:</span> <span class="string">$&#123;&#123;</span> <span class="string">secrets.ALIREGISTER</span> <span class="string">&#125;&#125;/superchencc/chenccblog:latest</span></span><br><span class="line">      </span><br><span class="line">      <span class="comment"># 打印 docker 镜像 SHA256 Hash 值</span></span><br><span class="line"><span class="attr">      - name:</span> <span class="string">Image</span> <span class="string">digest</span></span><br><span class="line"><span class="attr">        run:</span> <span class="string">echo</span> <span class="string">$&#123;&#123;</span> <span class="string">steps.docker_build.outputs.digest</span> <span class="string">&#125;&#125;</span></span><br></pre></td></tr></table></figure>]]></content:encoded>
      
      <comments>http://yoursite.com/2022/06/15/GitHub-Action%E8%AE%B0%E5%BD%95/#disqus_thread</comments>
    </item>
    
    <item>
      <title>mapbox离线使用</title>
      <link>http://yoursite.com/2019/05/05/mapbox%E7%A6%BB%E7%BA%BF%E4%BD%BF%E7%94%A8/</link>
      <guid>http://yoursite.com/2019/05/05/mapbox%E7%A6%BB%E7%BA%BF%E4%BD%BF%E7%94%A8/</guid>
      <pubDate>Sun, 05 May 2019 10:37:59 GMT</pubDate>
      <description>
      
        &lt;p&gt;mapbox 是一个美国的地图服务供应商，在地图领域技术上是非常领先的。当时对于公司内部想使用 mapbox，但是又是服务于内网客户，于是研究了下mapbox的离线部署方案，这里做个记录，但是mapbox还在高速更新迭代中，这是基于当前能实现的一个方案，后面如果还在使用mapbox，或者继续研究的话，在继续记录吧。&lt;/p&gt;
      
      </description>
      
      <content:encoded><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>mapbox 是一个美国的地图服务供应商，在地图领域技术上是非常领先的。当时对于公司内部想使用 mapbox，但是又是服务于内网客户，于是研究了下mapbox的离线部署方案，这里做个记录，但是mapbox还在高速更新迭代中，这是基于当前能实现的一个方案，后面如果还在使用mapbox，或者继续研究的话，在继续记录吧。</p><a id="more"></a><h2 id="mapbox-gl-介绍"><a href="#mapbox-gl-介绍" class="headerlink" title="mapbox-gl 介绍"></a>mapbox-gl 介绍</h2><p>mapbox是目前地图领域很领先的一家公司，已为 Foursquare、Pinterest、Evernote、金融时报、天气频道、优步科技 等公司的网站提供了订制在线地图服务。Mapbox 是一些开放源代码地图库及应用程序的创建者或最大的贡献者，其中包含了MBTiles 规范、TileMill 制图 IDE、Leaflet JavaScript 库，以及 CartoCSS 地图格式化语言与语法分析器等。对于web端前端 GIS渲染引擎是Mapbox GL JS。由于公司项目处于内网环境，无法访问mapbox的地图服务，因此需要对mapbox进行本地化，以满足公司项目的需求。</p><p><a href="https://www.mapbox.com/" target="_blank" rel="noopener">https://www.mapbox.com/</a></p><h2 id="mapbox-gl-自定义样式"><a href="#mapbox-gl-自定义样式" class="headerlink" title="mapbox-gl 自定义样式"></a>mapbox-gl 自定义样式</h2><ul><li>mapbox样式主要包括以上几个参数：</li><li>version：JS SDK对应版本必须为8，</li><li>name：样式的命名，</li><li>sprite：雪碧图，将一个地图涉及到的所有零星图标图片都包含到一张大图中。</li><li>glyphs：.pbf格式的字体样式，例如微软雅黑等字体库。</li><li>sources：图层的资源文件，可以支持矢量切片、栅格、dem栅格、图片、geojson、视频等格式</li><li>layers：是对每个图层样式的描述，这里就是对地图样式渲染的关键，可以做定制化地图样式。<br>具体参数及其api可以参考mapbox官网。</li></ul><h2 id="离线部署"><a href="#离线部署" class="headerlink" title="离线部署"></a>离线部署</h2><h3 id="mapbox-gl-js，mapbox-gl-css离线部署"><a href="#mapbox-gl-js，mapbox-gl-css离线部署" class="headerlink" title="mapbox-gl.js，mapbox-gl.css离线部署"></a>mapbox-gl.js，mapbox-gl.css离线部署</h3><p>只需要从官网下载mapbox-gl.js，mapbox-gl.css到本地即可。</p><h3 id="glyphs字体本地化"><a href="#glyphs字体本地化" class="headerlink" title="glyphs字体本地化"></a>glyphs字体本地化</h3><p>mapbox需要的字体为.pbf格式字体，可能很多人对于.pbf文件不太了解，在此介绍一下.pbf文件，.pbf文件的全称为Protocol Buffers，是Google公司开发的一种数据描述语言，类似于XML能够将结构化数据序列化，可用于数据存储、通信协议等方面。简单来说就是结构简单、速度快，和JSON之间的对比可以参考使用 Protocol Buffers 代替 JSON 的五个原因。</p><p><img src="/2019/05/05/mapbox离线使用/font.jpg" alt="字体"></p><p>上面是微软雅黑的pbf字体库，如果想将把otf和ttf字体转换为Mapbox GL使用的protobuf格式的DF字体，可以使用mapbox开源的字体转换工具node-fontnik，具体使用方法可以参考官方文档</p><h3 id="sprite本地化"><a href="#sprite本地化" class="headerlink" title="sprite本地化"></a>sprite本地化</h3><p>访问mapbox地图服务我们可以从网络请求中查看官方样式中的sprite</p><p><img src="/2019/05/05/mapbox离线使用/spritepng.jpg" alt="sprite"></p><p>同时还有一个sprite.json数据，用来描述sprite雪碧图</p><p><img src="/2019/05/05/mapbox离线使用/spritejson.jpg" alt="spriteJson"></p><p>另外，需要更加地图zoom可能需要不同大小的sprite图片，为此mapbox用@2x,@3x等等分别表示2倍，3倍大小。</p><p><img src="/2019/05/05/mapbox离线使用/sprite@2json.jpg" alt="sprite@2json"></p><p>了解了mapbox是sprite原理以后，其本地化所要做的工作是将小图标合成一张sprite大图并在sprite.json中记录生成的位置信息，这里最主要的就是图标的摆放规则。</p><h2 id="地图样式编写"><a href="#地图样式编写" class="headerlink" title="地图样式编写"></a>地图样式编写</h2><p>首先，将sprite，glyphs替换为本地环境。</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">"version"</span>: <span class="number">8</span>,</span><br><span class="line">    <span class="attr">"sprite"</span>: <span class="string">"http://172.16.43.88:8082/sprites/sprite"</span>,</span><br><span class="line">    <span class="attr">"glyphs"</span>: <span class="string">"/assets/fonts/&#123;fontstack&#125;/&#123;range&#125;.pbf"</span>,</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>其中fontstack代表字体文件夹名称，range代表当前字体文件名称（mapbox会根据当前zoom和地图自自动匹配）</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    <span class="attr">"layout"</span>: &#123;</span><br><span class="line">        <span class="attr">"text-field"</span>: <span class="string">"&#123;name&#125;"</span>,</span><br><span class="line">        <span class="attr">"text-font"</span>: [</span><br><span class="line">            <span class="string">"Microsoft YaHei"</span>,</span><br><span class="line">        ],</span><br><span class="line">        <span class="attr">"symbol-placement"</span>: <span class="string">"line"</span>,</span><br><span class="line">        <span class="attr">"text-pitch-alignment"</span>: <span class="string">"viewport"</span>,</span><br><span class="line">        <span class="attr">"text-max-angle"</span>: <span class="number">30</span>,</span><br><span class="line">        <span class="attr">"text-size"</span>: &#123;</span><br><span class="line">            <span class="attr">"base"</span>: <span class="number">1</span>,</span><br><span class="line">            <span class="attr">"stops"</span>: [</span><br><span class="line">                [</span><br><span class="line">                    <span class="number">13</span>,</span><br><span class="line">                    <span class="number">12</span></span><br><span class="line">                ],</span><br><span class="line">                [</span><br><span class="line">                    <span class="number">18</span>,</span><br><span class="line">                    <span class="number">16</span></span><br><span class="line">                ]</span><br><span class="line">            ]</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;,</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>text-font下的Microsoft YaHei 为字体文件夹名称</p><p>其次，需要添加sources,sources为geoserver返回的地图数据。</p><figure class="highlight json"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">     <span class="attr">"sources"</span>: &#123;</span><br><span class="line">        <span class="attr">"waterways"</span>: &#123;</span><br><span class="line">            <span class="attr">"type"</span>: <span class="string">"vector"</span>,</span><br><span class="line">            <span class="attr">"scheme"</span>: <span class="string">"tms"</span>,</span><br><span class="line">            <span class="attr">"tiles"</span>: [</span><br><span class="line">                <span class="string">"http://172.16.43.88:8088/geoserver/gwc/service/tms/1.0.0/chinamap%3Agis_osm_waterways_free_1@EPSG%3A900913@pbf/&#123;z&#125;/&#123;x&#125;/&#123;y&#125;.pbf"</span></span><br><span class="line">            ]</span><br><span class="line">        &#125;</span><br><span class="line">        ...</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>这里的 <a href="http://172.16.43.88:8088/geoserver/gwc/service/tms/1.0.0/chinamap%3Agis_osm_waterways_free_1@EPSG%3A900913@pbf" target="_blank" rel="noopener">http://172.16.43.88:8088/geoserver/gwc/service/tms/1.0.0/chinamap%3Agis_osm_waterways_free_1@EPSG%3A900913@pbf</a> 是Geoserver 发布的tms服务，获取的矢量切片</p><p>之前我们在geoserver中添加了waterways的图层，也介绍了geoserver服务能力及其tiles链接规范，我们就可以在sources中添加，type代表类型，我们是矢量切片选择vector，使用的是tms服务。下面我们看看如何编写waterways的样式。</p><figure class="highlight"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br><span class="line">20</span><br><span class="line">21</span><br><span class="line">22</span><br><span class="line">23</span><br><span class="line">24</span><br><span class="line">25</span><br><span class="line">26</span><br><span class="line">27</span><br><span class="line">28</span><br><span class="line">29</span><br><span class="line">30</span><br><span class="line">31</span><br><span class="line">32</span><br><span class="line">33</span><br><span class="line">34</span><br><span class="line">35</span><br><span class="line">36</span><br></pre></td><td class="code"><pre><span class="line">&#123;</span><br><span class="line">    //waterway</span><br><span class="line">    &#123;</span><br><span class="line">        <span class="attr">"id"</span>: <span class="string">"waterway"</span>,</span><br><span class="line">        <span class="attr">"type"</span>: <span class="string">"line"</span>,</span><br><span class="line">        <span class="attr">"source"</span>: <span class="string">"waterways"</span>,</span><br><span class="line">        <span class="attr">"source-layer"</span>: <span class="string">"gis_osm_waterways_free_1"</span>,</span><br><span class="line">        <span class="attr">"filter"</span>: [</span><br><span class="line">            <span class="string">"all"</span>,</span><br><span class="line">            [<span class="string">"=="</span>, <span class="string">"$type"</span>, <span class="string">"LineString"</span>],</span><br><span class="line">            [<span class="string">"in"</span>, <span class="string">"fclass"</span>, <span class="string">"canal"</span>, <span class="string">"river"</span>]</span><br><span class="line">        ],</span><br><span class="line">        <span class="attr">"layout"</span>: &#123;<span class="attr">"line-join"</span>: <span class="string">"round"</span>, <span class="attr">"line-cap"</span>: <span class="string">"round"</span>&#125;,</span><br><span class="line">        <span class="attr">"paint"</span>: &#123;</span><br><span class="line">            <span class="attr">"line-color"</span>: <span class="string">"hsl(209, 18%, 20%)"</span>,</span><br><span class="line">            <span class="attr">"line-width"</span>: [</span><br><span class="line">                <span class="string">"interpolate"</span>,</span><br><span class="line">                [<span class="string">"exponential"</span>, <span class="number">1.3</span>],</span><br><span class="line">                [<span class="string">"zoom"</span>],</span><br><span class="line">                <span class="number">8.5</span>,</span><br><span class="line">                <span class="number">2</span>,</span><br><span class="line">                <span class="number">20</span>,</span><br><span class="line">                <span class="number">15</span></span><br><span class="line">            ],</span><br><span class="line">            <span class="attr">"line-opacity"</span>: [</span><br><span class="line">                <span class="string">"interpolate"</span>,</span><br><span class="line">                [<span class="string">"linear"</span>],</span><br><span class="line">                [<span class="string">"zoom"</span>],</span><br><span class="line">                <span class="number">8</span>,</span><br><span class="line">                <span class="number">0</span>,</span><br><span class="line">                <span class="number">8.5</span>,</span><br><span class="line">                <span class="number">1</span></span><br><span class="line">            ]</span><br><span class="line">        &#125;</span><br><span class="line">    &#125;</span><br><span class="line">&#125;</span><br></pre></td></tr></table></figure><p>需要注意的是filter需要根据数据库字段进行筛选，其他具体可以看mapbox官方文档。<br>具体其他相关操作mapbox官网有相关的demo</p><p><a href="https://docs.mapbox.com/mapbox-gl-js/api/" target="_blank" rel="noopener">https://docs.mapbox.com/mapbox-gl-js/api/</a></p>]]></content:encoded>
      
      <comments>http://yoursite.com/2019/05/05/mapbox%E7%A6%BB%E7%BA%BF%E4%BD%BF%E7%94%A8/#disqus_thread</comments>
    </item>
    
    <item>
      <title>windows搭建Geoserver</title>
      <link>http://yoursite.com/2019/04/30/windows%E6%90%AD%E5%BB%BAGeoserver/</link>
      <guid>http://yoursite.com/2019/04/30/windows%E6%90%AD%E5%BB%BAGeoserver/</guid>
      <pubDate>Tue, 30 Apr 2019 09:18:30 GMT</pubDate>
      <description>
      
        &lt;p&gt;windows 环境下搭建 Geoserver 和 postgis 环境，postgis是基于 postgresql 的一个扩展。整套环境安装后，是为地图数据切片发布坐准备的。下面详细记录了，我是如何在Windows环境下搭建整套环境的，大家可以做个参考。&lt;/p&gt;
      
      </description>
      
      <content:encoded><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>windows 环境下搭建 Geoserver 和 postgis 环境，postgis是基于 postgresql 的一个扩展。整套环境安装后，是为地图数据切片发布坐准备的。下面详细记录了，我是如何在Windows环境下搭建整套环境的，大家可以做个参考。</p><a id="more"></a><h2 id="Windows搭建-Geoserver-和-postgis-环境"><a href="#Windows搭建-Geoserver-和-postgis-环境" class="headerlink" title="Windows搭建 Geoserver 和 postgis 环境"></a>Windows搭建 Geoserver 和 postgis 环境</h2><h3 id="矢量切片与栅格切片"><a href="#矢量切片与栅格切片" class="headerlink" title="矢量切片与栅格切片"></a>矢量切片与栅格切片</h3><p>以fhgis为例我们发现请求的是一张张图片，最后通过将图片进行拼接形成一张完整的地图，首先图片的数据量较大，其次一旦生成的图片，那么所有的属性数据将不存在，图片修改起来麻烦，个性化定制也就很难实现，同时也无法进行交互。<br>对于矢量切片返回的是含有属性信息的地理数据，数据量较小，保留了地图属性数据，可以进行定制化，同时也很容易定制化，基于矢量切片地图可以对地图数据进行定制化和交互，同时基于现代设备的精细视网膜显示器和高性能的计算机图形使得应用具有身临其境的、可交互的效果以及处理大量数据的能力。这可以让我们持续的改进地图的设计和在web上2D和3D之间的转换。</p><h3 id="相关软件安装"><a href="#相关软件安装" class="headerlink" title="相关软件安装"></a>相关软件安装</h3><h4 id="postgresql-postGis-安装"><a href="#postgresql-postGis-安装" class="headerlink" title="postgresql + postGis 安装"></a>postgresql + postGis 安装</h4><p>PostGIS是对象关系型数据库系统PostgreSQL的一个扩展，PostGIS提供如下空间信息服务功能:空间对象、空间索引、空间操作函数和空间操作符。同时，PostGIS遵循OpenGIS的规范。我们项目中主要使用它来保存原始矢量数据,后续可能需要通过PostGis对地理空间数据进行查找，筛选。<br>下载安装相应版本的postgresql和postgis(本次搭建采用的是postgresql-9.6.10-1-windows-x64.exe和postgis-bundle-pg96x64-setup-2.3.7-1.exe)。</p><h4 id="geoserver-geoserver-vectortiles插件安装"><a href="#geoserver-geoserver-vectortiles插件安装" class="headerlink" title="geoserver + geoserver vectortiles插件安装"></a>geoserver + geoserver vectortiles插件安装</h4><p> GeoServer 是 OpenGIS Web 服务器规范的 J2EE 实现，利用 GeoServer 可以方便的发布地图数据，允许用户对特征数据进行更新、删除、插入操作，通过 GeoServer 可以比较容易的在用户之间迅速共享空间地理信息。我们在GeoServer的基础上添加vector Tiles插件可以进行矢量切片。<br>首先安装geoserver (本次安装的版本为geoserver-2.13.2.exe)，安装成功后打开geoserver web admin page（默认登录账户、密码为admin,geoserver），此时可以看到如下界面：</p><p><img src="/2019/04/30/windows搭建Geoserver/Geoserver.png" alt="Geoserver服务"></p><p>接下来还需要安装geoserver vectortiles插件，该插件主要用来对数据进行矢量切片。需要下载geoserver对于的插件（本次安装的版本为：geoserver-2.13-SNAPSHOT-vectortiles-plugin.zip）。下载地址为<a href="http://geoserver.org/release/stable/" target="_blank" rel="noopener">http://geoserver.org/release/stable/</a></p><p><img src="/2019/04/30/windows搭建Geoserver/geoserver-plugin.png" alt="Geoserver服务插件"></p><p>下载成功以后将该文件解压到GeoServer服务器下GeoServer文件夹的WEB-INF的lib文件夹下，重启geoserver，此时重新打开geoserver web admin page，</p><p><img src="/2019/04/30/windows搭建Geoserver/geoser-plu-set.png" alt="Geoserver服务插件"></p><p>此时，我们发现可以进行矢量切片的相关设置，将前四个vertor layers选项勾上。</p><h3 id="geoserver跨域设置"><a href="#geoserver跨域设置" class="headerlink" title="geoserver跨域设置"></a>geoserver跨域设置</h3><p>需要通过geoserver提高切片数据，需要进行跨域设置。找到GeoServer服务器下GeoServer文件夹的WEB-INF文件夹下的web.xml</p><p><img src="/2019/04/30/windows搭建Geoserver/xml.png" alt="java跨域"></p><p>找到上面显示的两个配置，并将注释去掉，下载对应的跨域jar包（本项目下载的是jetty-servlets-9.2.13.v20150730.jar），最后重启geoserver服务器。</p><h3 id="数据导入"><a href="#数据导入" class="headerlink" title="数据导入"></a>数据导入</h3><h4 id="数据获取"><a href="#数据获取" class="headerlink" title="数据获取"></a>数据获取</h4><p>1.基础地图数据：openstreetmap,其他地图厂商<br>2.建筑物轮廓数据（带高度）：淘宝，城市数据派等。</p><h4 id="导入数据"><a href="#导入数据" class="headerlink" title="导入数据"></a>导入数据</h4><p>打开shp2pgsql-gui</p><p><img src="/2019/04/30/windows搭建Geoserver/postgis.jpg" alt="postgis设置"></p><p>打开后点击view connection detail，输入postgresql数据库username,password，serverhost,Database名称后点击ok，此时数据库连接成功。</p><p><img src="/2019/04/30/windows搭建Geoserver/postgis-set.jpg" alt="postgis设置"></p><p>接下来导入.shp数据，点击add files，选择相应的.shp文件</p><p><img src="/2019/04/30/windows搭建Geoserver/postgis-data.jpg" alt="postgis导入数据"></p><p>点击import即可将数据导入到数据库，如果现实出现错误可能由于字符串编码的问题，此时可以通过option设置字符编码及其他设置。</p><h3 id="Geoserver发布"><a href="#Geoserver发布" class="headerlink" title="Geoserver发布"></a>Geoserver发布</h3><h4 id="新建工作区"><a href="#新建工作区" class="headerlink" title="新建工作区"></a>新建工作区</h4><p><img src="/2019/04/30/windows搭建Geoserver/geoserver-new.jpg" alt="新建工作区"></p><h4 id="新建数据源（postgresql数据源）"><a href="#新建数据源（postgresql数据源）" class="headerlink" title="新建数据源（postgresql数据源）"></a>新建数据源（postgresql数据源）</h4><p><img src="/2019/04/30/windows搭建Geoserver/geoserver-dta.jpg" alt="新建数据源"></p><p><img src="/2019/04/30/windows搭建Geoserver/geo-postgis.jpg" alt="新建数据源"></p><p><img src="/2019/04/30/windows搭建Geoserver/geoser-postgis-set.jpg" alt="新建数据源"></p><p>填写相关参数后，点击保存按钮。</p><h4 id="添加图层"><a href="#添加图层" class="headerlink" title="添加图层"></a>添加图层</h4><p><img src="/2019/04/30/windows搭建Geoserver/geoser-layer.jpg" alt="添加图层"></p><p><img src="/2019/04/30/windows搭建Geoserver/geoserver-layer-set.jpg" alt="添加图层"></p><p><img src="/2019/04/30/windows搭建Geoserver/geoserver-configure.jpg" alt="添加图层"></p><p><img src="/2019/04/30/windows搭建Geoserver/geoserver-configu.jpg" alt="添加图层"></p><p><img src="/2019/04/30/windows搭建Geoserver/geoser-configure1.jpg" alt="添加图层"></p><p>配置成功以后点击保存，此时重新点击图层以后，就好出现你已经发布的图层，如果需要对几个图层进行合并，可以建立一个图层组将几个图层进行合并。<br>最后可以通过layer preview查看图层是否发布成功。</p><p><img src="/2019/04/30/windows搭建Geoserver/layer-preview.jpg" alt="添加图层"></p><p><img src="/2019/04/30/windows搭建Geoserver/view-layer.jpg" alt="添加图层"></p><h4 id="为了加快地图访问速度，可以对矢量切片进行缓存。"><a href="#为了加快地图访问速度，可以对矢量切片进行缓存。" class="headerlink" title="为了加快地图访问速度，可以对矢量切片进行缓存。"></a>为了加快地图访问速度，可以对矢量切片进行缓存。</h4><p><img src="/2019/04/30/windows搭建Geoserver/cache-layer.jpg" alt="缓存"></p><p><img src="/2019/04/30/windows搭建Geoserver/cachelayer1.jpg" alt="缓存"></p><p>可以选择切片等级以及切片的线程数后，点击submit，就可以在切片文件夹下查看切片文件。</p><p><img src="/2019/04/30/windows搭建Geoserver/cache-layer2.jpg" alt="缓存"></p><p>注意，这里是在Windows上做缓存，问题影响不大，但是如果在linux做缓存，要注意如果切片文件夹过多，会有inode使用过多，会有inode占用100%，但是硬盘还有很大空间的情况</p><h3 id="geoserver服务能力"><a href="#geoserver服务能力" class="headerlink" title="geoserver服务能力"></a>geoserver服务能力</h3><p>可以从geoserver admin page查看支持那几种服务能力</p><p><img src="/2019/04/30/windows搭建Geoserver/ability.jpg" alt="服务能力"></p><p>以TMS为例，点击TMS，可以查看该服务的链接规范，在mapbox-gl中我们将使用到。</p><p><img src="/2019/04/30/windows搭建Geoserver/ability2.jpg" alt="服务能力"></p>]]></content:encoded>
      
      <comments>http://yoursite.com/2019/04/30/windows%E6%90%AD%E5%BB%BAGeoserver/#disqus_thread</comments>
    </item>
    
    <item>
      <title>geoserver部署</title>
      <link>http://yoursite.com/2019/04/29/geoserver%E9%83%A8%E7%BD%B2/</link>
      <guid>http://yoursite.com/2019/04/29/geoserver%E9%83%A8%E7%BD%B2/</guid>
      <pubDate>Mon, 29 Apr 2019 16:43:09 GMT</pubDate>
      <description>
      
        &lt;p&gt;Geoserver 地图服务部署，使用的打包后jar包，用tomcat的方式部署&lt;/p&gt;
      
      </description>
      
      <content:encoded><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>Geoserver 地图服务部署，使用的打包后jar包，用tomcat的方式部署</p><a id="more"></a><h1 id="Tomcat部署-geoserver-服务"><a href="#Tomcat部署-geoserver-服务" class="headerlink" title="Tomcat部署 geoserver 服务"></a>Tomcat部署 geoserver 服务</h1><h2 id="搭建-jdk-Tomcat-等环境"><a href="#搭建-jdk-Tomcat-等环境" class="headerlink" title="搭建 jdk Tomcat 等环境"></a>搭建 jdk Tomcat 等环境</h2><p>此处我已有了一套一键式在服务器上搭建jdk以及Tomcat环境的软件包，直接解压文件包，执行shell脚本即可。</p><p>此处网上 linux 上搭建 Tomcat 教程很多，我就不写了，大家可以自己配置一下。</p><h2 id="下载-Geoserver-war包"><a href="#下载-Geoserver-war包" class="headerlink" title="下载 Geoserver war包"></a>下载 Geoserver war包</h2><p>此处我们采用 war 包的方式部署 Geoserver，去官网上面可以下载 war 包</p><h2 id="然后启动-Tomcat-服务"><a href="#然后启动-Tomcat-服务" class="headerlink" title="然后启动 Tomcat 服务"></a>然后启动 Tomcat 服务</h2><p>Tomcat会自动帮我们解压war包，然后我们将war包删除，开始修改解压后war包内的配置，来修改跨域问题</p><h2 id="修改跨域问题"><a href="#修改跨域问题" class="headerlink" title="修改跨域问题"></a>修改跨域问题</h2><h3 id="将cors-filter-2-4-jar和java-property-utils-1-9-1-jar，两个jar包文件放入geoserver目录下webapps-geoserver-web-inf-lib中"><a href="#将cors-filter-2-4-jar和java-property-utils-1-9-1-jar，两个jar包文件放入geoserver目录下webapps-geoserver-web-inf-lib中" class="headerlink" title="将cors-filter-2.4.jar和java-property-utils-1.9.1.jar，两个jar包文件放入geoserver目录下webapps\geoserver\web-inf\lib中"></a>将cors-filter-2.4.jar和java-property-utils-1.9.1.jar，两个jar包文件放入geoserver目录下webapps\geoserver\web-inf\lib中</h3><h3 id="打开geoserver目录下webapps-geoserver-web-inf中的web-xml"><a href="#打开geoserver目录下webapps-geoserver-web-inf中的web-xml" class="headerlink" title="打开geoserver目录下webapps\geoserver\web-inf中的web.xml"></a>打开geoserver目录下webapps\geoserver\web-inf中的web.xml</h3><h3 id="添加过滤器代码"><a href="#添加过滤器代码" class="headerlink" title="添加过滤器代码"></a>添加过滤器代码</h3><figure class="highlight xml"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line"><span class="tag">&lt;<span class="name">filter</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">filter-name</span>&gt;</span>CORS<span class="tag">&lt;/<span class="name">filter-name</span>&gt;</span></span><br><span class="line"> <span class="tag">&lt;<span class="name">filter-class</span>&gt;</span>com.thetransactioncompany.cors.CORSFilter<span class="tag">&lt;/<span class="name">filter-class</span>&gt;</span></span><br><span class="line"><span class="tag">&lt;/<span class="name">filter</span>&gt;</span></span><br></pre></td></tr></table></figure><h3 id="添加过滤器路由代码："><a href="#添加过滤器路由代码：" class="headerlink" title="添加过滤器路由代码："></a>添加过滤器路由代码：</h3><pre><code>&lt;filter-mapping&gt;    &lt;filter-name&gt;CORS&lt;/filter-name&gt;    &lt;url-pattern&gt;/*&lt;/url-pattern&gt;&lt;/filter-mapping&gt;</code></pre><h3 id="添加完毕后，重启geoserver"><a href="#添加完毕后，重启geoserver" class="headerlink" title="添加完毕后，重启geoserver"></a>添加完毕后，重启geoserver</h3><h3 id="如果目录中存在maven，需要在pom-xml中，添加"><a href="#如果目录中存在maven，需要在pom-xml中，添加" class="headerlink" title="如果目录中存在maven，需要在pom.xml中，添加"></a>如果目录中存在maven，需要在pom.xml中，添加</h3><pre><code>&lt;dependency&gt;    &lt;groupId&gt;com.thetransactioncompany&lt;/groupId&gt;    &lt;artifactId&gt;cors-filter&lt;/artifactId&gt;    &lt;version&gt;[ version ]&lt;/version&gt;&lt;/dependency&gt;</code></pre><p>这里我设置的Tomcat 端口号为 8088</p><p><img src="/2019/04/29/geoserver部署/tomcatport.jpg" alt="tomcat端口号"></p><p>最后直接访问地址，Geoserver 默认账号admin 密码是geoserver</p><p><img src="/2019/04/29/geoserver部署/geoserver.jpg" alt="geoserver"></p><p>这样，Geoserver 服务搭建就完成了</p><h3 id="Geoserver-连接-postgis"><a href="#Geoserver-连接-postgis" class="headerlink" title="Geoserver 连接 postgis"></a>Geoserver 连接 postgis</h3><p><img src="/2019/04/29/geoserver部署/setData.jpg" alt="setData"></p><p>设置 Geoserver 连接数据库 postgis</p>]]></content:encoded>
      
      <comments>http://yoursite.com/2019/04/29/geoserver%E9%83%A8%E7%BD%B2/#disqus_thread</comments>
    </item>
    
    <item>
      <title>postgresql+postgis安装</title>
      <link>http://yoursite.com/2019/04/25/postgresql-postgis%E5%AE%89%E8%A3%85/</link>
      <guid>http://yoursite.com/2019/04/25/postgresql-postgis%E5%AE%89%E8%A3%85/</guid>
      <pubDate>Thu, 25 Apr 2019 15:28:08 GMT</pubDate>
      <description>
      
        &lt;p&gt;对于在 linux 系统机器上手动一步步安装 postgresql ，以及安装postgis，折腾了好久。对于整改过程，做了一个完整的记录。&lt;/p&gt;
      
      </description>
      
      <content:encoded><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>对于在 linux 系统机器上手动一步步安装 postgresql ，以及安装postgis，折腾了好久。对于整改过程，做了一个完整的记录。</p><a id="more"></a><h1 id="离线安装-postgresql-和配置-postgis-插件-在-redhat-7-3"><a href="#离线安装-postgresql-和配置-postgis-插件-在-redhat-7-3" class="headerlink" title="离线安装 postgresql 和配置 postgis 插件 在 redhat 7.3"></a>离线安装 postgresql 和配置 postgis 插件 在 redhat 7.3</h1><h2 id="安装postgresql"><a href="#安装postgresql" class="headerlink" title="安装postgresql"></a>安装postgresql</h2><h3 id="下载-postgresql"><a href="#下载-postgresql" class="headerlink" title="下载 postgresql"></a>下载 postgresql</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">可以去官方网站下载 postgresql，我这里使用的是postgresql-9.3.2.tar.gz</span><br></pre></td></tr></table></figure><h2 id="解压文件"><a href="#解压文件" class="headerlink" title="解压文件"></a>解压文件</h2><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">tar -zxvf postgresql-9.3.2.tar.gz</span><br></pre></td></tr></table></figure><h3 id="进入解压目录并配置参数"><a href="#进入解压目录并配置参数" class="headerlink" title="进入解压目录并配置参数"></a>进入解压目录并配置参数</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">进入解压目录    cd postgresql-9.3.2</span><br><span class="line"></span><br><span class="line">配置安装参数    ./configure --prefix=/opt/postgresql-9.3.2</span><br></pre></td></tr></table></figure><p>** 注：这一步可能会发生一些错误，如果发生了，请参考下面的常见错误说明 **</p><h3 id="编译"><a href="#编译" class="headerlink" title="编译"></a>编译</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">make</span><br></pre></td></tr></table></figure><h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">make install</span><br></pre></td></tr></table></figure><h3 id="创建用户"><a href="#创建用户" class="headerlink" title="创建用户"></a>创建用户</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">sudo useradd postgresql</span><br></pre></td></tr></table></figure><h3 id="创建数据库文件存储目录并给postgresql用户富裕权限"><a href="#创建数据库文件存储目录并给postgresql用户富裕权限" class="headerlink" title="创建数据库文件存储目录并给postgresql用户富裕权限"></a>创建数据库文件存储目录并给postgresql用户富裕权限</h3><p>进入数据库安装目录        cd /opt/postgresql-9.3.2</p><p>创建data目录             sudo mkdir data</p><p>给postgresql用户赋予权限  sudo chown -R postgresql data</p><h3 id="创建log文件"><a href="#创建log文件" class="headerlink" title="创建log文件"></a>创建log文件</h3><p>创建log目录             sudo mkdir log</p><p>创建pg_server.log文件   vi pg_server.log :wq</p><p>给postgresql用户权限    sudo chown -R postgresql log</p><h3 id="添加环境变量"><a href="#添加环境变量" class="headerlink" title="添加环境变量"></a>添加环境变量</h3><p>在<strong>/etc/profile</strong>中添加环境变量</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">#postgresql</span><br><span class="line">export PGHOME=/opt/postgresql-9.3.2</span><br><span class="line">export PGDATA=/opt/postgresql-9.3.2/data</span><br><span class="line">export PATH=$PATH:$PGHOME/bin:$PGDATA</span><br><span class="line">LD_LIBRARY=/opt/postgresql-9.3.2/lib</span><br><span class="line">export LD_LIBRARY</span><br><span class="line"></span><br><span class="line">source /etc/profile</span><br></pre></td></tr></table></figure><h3 id="初始化数据目录"><a href="#初始化数据目录" class="headerlink" title="初始化数据目录"></a>初始化数据目录</h3><p>切换用户        su postgresql</p><p>初始化数据库    initdb -D data  </p><img src="/2019/04/25/postgresql-postgis安装/04/25/postgresql-postgis安装/pg-initdb.jpg" title="设置桥接网络"><h3 id="启动数据库，设置psql命令"><a href="#启动数据库，设置psql命令" class="headerlink" title="启动数据库，设置psql命令"></a>启动数据库，设置psql命令</h3><p>先切换到root目录下  su root</p><p>执行这句命令   ** /sbin/ldconfig   /opt/postgresql-9.3.2/lib **</p><p>然后切换到  postgresql 用户下</p><p>启动数据库服务  pg_ctl -D data -l /opt/postgresql-9.3.2/log/pg_server.log start</p><p>这里直接可以执行 psql 以 postgresql 用户的身份进入测试一下</p><p>但是目前为止，该数据库只允许本地访问，如果运行其他用户访问的话还需要进行如下配置</p><h3 id="配置监听地址和端口，并允许远程主机连接"><a href="#配置监听地址和端口，并允许远程主机连接" class="headerlink" title="配置监听地址和端口，并允许远程主机连接"></a>配置监听地址和端口，并允许远程主机连接</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">vi /opt/postgresql-9.3.2/data/postgresql.conf</span><br><span class="line"></span><br><span class="line">修改如下配置：</span><br><span class="line">    </span><br><span class="line">    listen_addresses = &apos;*&apos;</span><br><span class="line">    port = 5432 </span><br><span class="line"></span><br><span class="line">vim /opt/postgresql-9.3.2/data/pg_hba.conf</span><br><span class="line"></span><br><span class="line">修改配置如下：</span><br><span class="line"></span><br><span class="line">    # chencc add</span><br><span class="line">    host    all             all             0.0.0.0/0               password</span><br><span class="line"></span><br><span class="line">![设置远程主机](pg_hbf.jpg)</span><br></pre></td></tr></table></figure><h3 id="修改防火墙，开发5432端口"><a href="#修改防火墙，开发5432端口" class="headerlink" title="修改防火墙，开发5432端口"></a>修改防火墙，开发5432端口</h3><p>我在这里是直接将防火墙关闭，并且禁止使用了防火墙，实际操作，可能需要在设置开放5432端口</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">sudo vim /etc/sysconfig/iptables</span><br><span class="line">加上 -A INPUT -p tcp -m tcp -dport 5432 -j ACCEPT</span><br><span class="line">重启防火墙 sudo service iptables restart</span><br></pre></td></tr></table></figure><h3 id="在postgresql数据库中为之前创建的postgresql用户增加密码"><a href="#在postgresql数据库中为之前创建的postgresql用户增加密码" class="headerlink" title="在postgresql数据库中为之前创建的postgresql用户增加密码"></a>在postgresql数据库中为之前创建的postgresql用户增加密码</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">psql template1</span><br><span class="line"></span><br><span class="line">修改postgresql用户密码：    ALTER USER postgresql PASSWORD &apos;123456&apos;;</span><br><span class="line"></span><br><span class="line">ERROR: role &quot;postgresql&quot; dose not exist</span><br><span class="line"></span><br><span class="line">如不存在 postgresql 用户则新建该用户</span><br><span class="line"></span><br><span class="line">CREATE USER postgresql WITH PASSWORD &apos;123456&apos;;</span><br></pre></td></tr></table></figure><p>注：此时 postgresql 用户为数据用户</p><p>这时，postgresql 用户就可以作为数据库的使用用户了，可以打开一个postgresql客户端，如 Navicat，尝试连接一下了</p><h3 id="关闭postgresql数据库，并重新启动，使更改后的配置生效"><a href="#关闭postgresql数据库，并重新启动，使更改后的配置生效" class="headerlink" title="关闭postgresql数据库，并重新启动，使更改后的配置生效"></a>关闭postgresql数据库，并重新启动，使更改后的配置生效</h3><p>下面是通过postgresql的pg_ctl工具操作的</p><p>关闭数据库 pg_ctl stop -m fast<br>启动数据库 pg_ctl -D data -l /opt/postgresql-9.3.2/log/pg_server.log start</p><h2 id="常见错误"><a href="#常见错误" class="headerlink" title="常见错误"></a>常见错误</h2><h3 id="安装常见错误"><a href="#安装常见错误" class="headerlink" title="安装常见错误"></a>安装常见错误</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">readline libray not found</span><br></pre></td></tr></table></figure><p>如果出现以上错误，说明你的系统缺少 readline库</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">rpm -qa | grep readline</span><br></pre></td></tr></table></figure><p>zlib包同理 </p><h2 id="安装postgis"><a href="#安装postgis" class="headerlink" title="安装postgis"></a>安装postgis</h2><h3 id="安装-geos"><a href="#安装-geos" class="headerlink" title="安装 geos"></a>安装 geos</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">tar -jxvf geos-3.7.1.tar.bz2</span><br><span class="line">cd /geos-3.7.1</span><br><span class="line">./configure --prefix=/opt/geos-3.7.1</span><br><span class="line">make</span><br><span class="line">make install</span><br></pre></td></tr></table></figure><h3 id="安装-proj"><a href="#安装-proj" class="headerlink" title="安装 proj"></a>安装 proj</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">tar -zxvf proj-4.8.0.tar.gz</span><br><span class="line">cd /proj-4.8.0</span><br><span class="line">./configure --prefix=/opt/proj-4.8.0</span><br><span class="line">make</span><br><span class="line">make install</span><br></pre></td></tr></table></figure><h3 id="安装-gdal"><a href="#安装-gdal" class="headerlink" title="安装 gdal"></a>安装 gdal</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">tar -zxvf gdal-2.1.1.tar.gz</span><br><span class="line">cd /gdal-2.1.1</span><br><span class="line">./configure --prefix=/opt/gdal-2.1.1</span><br><span class="line">make</span><br><span class="line">make install</span><br></pre></td></tr></table></figure><h3 id="执行postgis-安装"><a href="#执行postgis-安装" class="headerlink" title="执行postgis 安装"></a>执行postgis 安装</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">tar -zxvf postgis-2.4.5.tar.gz</span><br><span class="line"></span><br><span class="line">./configure --prefix=/opt/postgis-2.4.5 --with-pgconfig=/opt/postgresql-9.3.2/bin/pg_config  --with-projdir=/opt/proj  --with-geosconfig=/opt/geos-3.7.1/bin/geos-config  --with-gdalconfig=/opt/gdal-2.1.1/bin/gdal-config</span><br><span class="line"></span><br><span class="line">make</span><br><span class="line">make install</span><br></pre></td></tr></table></figure><p><img src="/2019/04/25/postgresql-postgis安装/configure.jpg" alt="设置postgis"></p><p>登录psql，安装gis扩展</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><span class="line">psql test</span><br><span class="line"></span><br><span class="line">CREATE EXTENSION postgis</span><br><span class="line">CREATE EXTENSION postgis_topology</span><br></pre></td></tr></table></figure><h2 id="出错"><a href="#出错" class="headerlink" title="出错"></a>出错</h2><p><img src="/2019/04/25/postgresql-postgis安装/postgisbug.jpg" alt="添加插件报错"></p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">cp /opt/geos-3.7.1/lib/libgeos_c.so.1    /lib64/</span><br><span class="line">cp /opt/proj/lib/libproj.so.0    /lib64/</span><br><span class="line">cp /opt/gdal-2.1.1/lib/libgdal.so.20     /lib64/</span><br></pre></td></tr></table></figure><p><img src="/2019/04/25/postgresql-postgis安装/finish.jpg" alt="完成"></p><img src="/2019/04/25/postgresql-postgis安装/04/25/postgresql-postgis安装/finish.jpg" title="完成"><h3 id="安装postgis2-0-1出错configure-error-could-not-find-gdal"><a href="#安装postgis2-0-1出错configure-error-could-not-find-gdal" class="headerlink" title="安装postgis2.0.1出错configure error: could not find gdal"></a>安装postgis2.0.1出错configure error: could not find gdal</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">*checking for library containing GDALAllRegister... no*</span><br><span class="line">*configure: error: could not find gdal*</span><br></pre></td></tr></table></figure><p>解决方法：<br> 编译时 完之后，修改下列文件</p><p> 1./etc/ld.so.conf<br> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">include /etc/ld.so.conf.d/*.conf</span><br><span class="line"></span><br><span class="line">/usr/local/pgsql/lib</span><br></pre></td></tr></table></figure></p><p> 2.执行指令<br> <figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">/sbin/ldconfig –v</span><br></pre></td></tr></table></figure></p><p>再执行postgis的编译</p>]]></content:encoded>
      
      <comments>http://yoursite.com/2019/04/25/postgresql-postgis%E5%AE%89%E8%A3%85/#disqus_thread</comments>
    </item>
    
    <item>
      <title>virtualBox安装centos7</title>
      <link>http://yoursite.com/2019/04/25/virtualBox%E5%AE%89%E8%A3%85centos7/</link>
      <guid>http://yoursite.com/2019/04/25/virtualBox%E5%AE%89%E8%A3%85centos7/</guid>
      <pubDate>Thu, 25 Apr 2019 09:25:32 GMT</pubDate>
      <description>
      
        &lt;p&gt;在公司内部系统内虚拟化了一个 virtualBox 的虚拟机群，可以在上面折腾一系列的系统，来折腾折腾了，今天就折腾了一下 centos7 的安装，记录下。&lt;/p&gt;
      
      </description>
      
      <content:encoded><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>在公司内部系统内虚拟化了一个 virtualBox 的虚拟机群，可以在上面折腾一系列的系统，来折腾折腾了，今天就折腾了一下 centos7 的安装，记录下。</p><a id="more"></a><h1 id="virtualBox-安装-centOS7"><a href="#virtualBox-安装-centOS7" class="headerlink" title="virtualBox 安装 centOS7"></a>virtualBox 安装 centOS7</h1><p>最近一直在搞linux相关部署，搭建相关服务等。一直在公司服务器上操作，因为上面有部署服务，一直感觉玩的不好，就要玩出事。就想着在内网机上面搭建一个虚拟机装个centOS，学习一下相关知识，并且在上面试错。于是就有了下面这个在virtualBox上面搭建centOS7</p><h2 id="下载-安装-virtualBox"><a href="#下载-安装-virtualBox" class="headerlink" title="下载 安装 virtualBox"></a>下载 安装 virtualBox</h2><p>这一步相信也不需要咋写了，直接去官网下载安装就是了，特别是Windows安装，下一步就好了</p><h2 id="在virtualBox-中安装-centOS-镜像"><a href="#在virtualBox-中安装-centOS-镜像" class="headerlink" title="在virtualBox 中安装 centOS 镜像"></a>在virtualBox 中安装 centOS 镜像</h2><h3 id="第一步新建，因为选项中没有-centOS，但是Redhat是centOS的发行版本，选Redhat就好了"><a href="#第一步新建，因为选项中没有-centOS，但是Redhat是centOS的发行版本，选Redhat就好了" class="headerlink" title="第一步新建，因为选项中没有 centOS，但是Redhat是centOS的发行版本，选Redhat就好了"></a>第一步新建，因为选项中没有 centOS，但是Redhat是centOS的发行版本，选Redhat就好了</h3><p><img src="/2019/04/25/virtualBox安装centos7/virtualboxSet.jpg" alt="新建一台虚拟机"></p><h2 id="设置系统"><a href="#设置系统" class="headerlink" title="设置系统"></a>设置系统</h2><h3 id="因为我们使用的是iso镜像，所以要将光驱放在最上面用光驱驱动的方式来安装"><a href="#因为我们使用的是iso镜像，所以要将光驱放在最上面用光驱驱动的方式来安装" class="headerlink" title="因为我们使用的是iso镜像，所以要将光驱放在最上面用光驱驱动的方式来安装"></a>因为我们使用的是iso镜像，所以要将光驱放在最上面用光驱驱动的方式来安装</h3><p><img src="/2019/04/25/virtualBox安装centos7/setSystem.jpg" alt="设置系统"></p><p><img src="/2019/04/25/virtualBox安装centos7/setSystemIso.jpg" alt="设置系统存储"></p><p><img src="/2019/04/25/virtualBox安装centos7/centosversion.jpg" alt="系统版本"></p><h2 id="设置-virtualBox-网卡"><a href="#设置-virtualBox-网卡" class="headerlink" title="设置 virtualBox 网卡"></a>设置 virtualBox 网卡</h2><h3 id="因为我们想做到虚拟机和本机能互联，本机也可以和虚拟机互联，同时，虚拟机也可以访问内网搭建的镜像源，所以我们设置了两张网卡，要用桥接的方式来做到"><a href="#因为我们想做到虚拟机和本机能互联，本机也可以和虚拟机互联，同时，虚拟机也可以访问内网搭建的镜像源，所以我们设置了两张网卡，要用桥接的方式来做到" class="headerlink" title="因为我们想做到虚拟机和本机能互联，本机也可以和虚拟机互联，同时，虚拟机也可以访问内网搭建的镜像源，所以我们设置了两张网卡，要用桥接的方式来做到"></a>因为我们想做到虚拟机和本机能互联，本机也可以和虚拟机互联，同时，虚拟机也可以访问内网搭建的镜像源，所以我们设置了两张网卡，要用桥接的方式来做到</h3><p><img src="/2019/04/25/virtualBox安装centos7/network1.jpg" alt="设置网络"></p><p><img src="/2019/04/25/virtualBox安装centos7/network2.jpg" alt="设置桥接网络"></p><h2 id="启动-centOS"><a href="#启动-centOS" class="headerlink" title="启动 centOS"></a>启动 centOS</h2><h3 id="现在virtualBox中的工作已经配置完成，现在启动，就可以进入系统安装了，同时可以在安装过程中可以设置下root用户的密码"><a href="#现在virtualBox中的工作已经配置完成，现在启动，就可以进入系统安装了，同时可以在安装过程中可以设置下root用户的密码" class="headerlink" title="现在virtualBox中的工作已经配置完成，现在启动，就可以进入系统安装了，同时可以在安装过程中可以设置下root用户的密码"></a>现在virtualBox中的工作已经配置完成，现在启动，就可以进入系统安装了，同时可以在安装过程中可以设置下root用户的密码</h3><h2 id="配置系统中网络"><a href="#配置系统中网络" class="headerlink" title="配置系统中网络"></a>配置系统中网络</h2><p>两张网卡所在路径 /etc/sysconfig/network-scripts/<br><img src="/2019/04/25/virtualBox安装centos7/eth0.jpg" alt="设置第一张网卡"></p><h3 id="注意第二章网卡中-BOOTPROTO-static-注意设置成静态"><a href="#注意第二章网卡中-BOOTPROTO-static-注意设置成静态" class="headerlink" title="注意第二章网卡中 BOOTPROTO=static 注意设置成静态"></a>注意第二章网卡中 BOOTPROTO=static 注意设置成静态</h3><p><img src="/2019/04/25/virtualBox安装centos7/eth1.jpg" alt="设置第二张网卡"></p><h3 id="重启网络"><a href="#重启网络" class="headerlink" title="重启网络"></a>重启网络</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">service network restart</span><br></pre></td></tr></table></figure><h3 id="关闭防火墙"><a href="#关闭防火墙" class="headerlink" title="关闭防火墙"></a>关闭防火墙</h3><h4 id="查看防火墙状态"><a href="#查看防火墙状态" class="headerlink" title="查看防火墙状态"></a>查看防火墙状态</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">firewall-cmd --state</span><br></pre></td></tr></table></figure><h4 id="停止firewall"><a href="#停止firewall" class="headerlink" title="停止firewall"></a>停止firewall</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl stop firewalld.service</span><br></pre></td></tr></table></figure><h4 id="禁止firewall-开机启动"><a href="#禁止firewall-开机启动" class="headerlink" title="禁止firewall 开机启动"></a>禁止firewall 开机启动</h4><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">systemctl disable firewalld.service</span><br></pre></td></tr></table></figure><p>现在大家可以尝试ping一下网络，看看是否成功了</p><h3 id="开启ssh"><a href="#开启ssh" class="headerlink" title="开启ssh"></a>开启ssh</h3><p>因为我们一般不想直接在虚拟机中操作命令行，因为界面什么的看上去都不如xshell或者putty用起来舒服，于是我们就要开启 ssh 服务</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><span class="line">service sshd restart</span><br><span class="line"></span><br><span class="line">service sshd status</span><br></pre></td></tr></table></figure><p>现在我们就可以用 xshell 连接服务器，开启linux了</p>]]></content:encoded>
      
      <comments>http://yoursite.com/2019/04/25/virtualBox%E5%AE%89%E8%A3%85centos7/#disqus_thread</comments>
    </item>
    
    <item>
      <title>JS事件捕捉、 事件冒泡</title>
      <link>http://yoursite.com/2019/03/11/JS%E4%BA%8B%E4%BB%B6%E5%86%92%E6%B3%A1%E3%80%81%E4%BA%8B%E4%BB%B6%E6%8D%95%E6%8D%89/</link>
      <guid>http://yoursite.com/2019/03/11/JS%E4%BA%8B%E4%BB%B6%E5%86%92%E6%B3%A1%E3%80%81%E4%BA%8B%E4%BB%B6%E6%8D%95%E6%8D%89/</guid>
      <pubDate>Mon, 11 Mar 2019 14:54:25 GMT</pubDate>
      <description>
      
        &lt;p&gt;那天面试应届生，问了一下 Javascript 的事件机制，发现自己对于这块，有点不能确认了，这里来理了一下整个事件机制，彻底研究了下整改过程。发现对于这种东西，不经常用，就会忘记。还是要多复习，温故而知新，才能不断成长。&lt;/p&gt;
      
      </description>
      
      <content:encoded><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p>那天面试应届生，问了一下 Javascript 的事件机制，发现自己对于这块，有点不能确认了，这里来理了一下整个事件机制，彻底研究了下整改过程。发现对于这种东西，不经常用，就会忘记。还是要多复习，温故而知新，才能不断成长。</p><a id="more"></a><h1 id="Javscript-事件捕捉、-事件冒泡"><a href="#Javscript-事件捕捉、-事件冒泡" class="headerlink" title="Javscript 事件捕捉、 事件冒泡"></a>Javscript 事件捕捉、 事件冒泡</h1><p>事件是监听在某个DOM元素上的，但是js的DOM事件有捕获和冒泡的机制，所以事件处理不是我们想的那样简单</p><p>由于存在捕获和冒泡，所以事件的触发元素（目标源）不一定是当前的监听元素。于是就有一些问题，本文要解决的就是将这些问题整理叙述清楚。</p><h2 id="事件流"><a href="#事件流" class="headerlink" title="事件流"></a>事件流</h2><p>首先我们要理解事件流，即JavaScript中，事件触发的这一系列的流程</p><p><img src="/2019/03/11/JS事件冒泡、事件捕捉/capture.png" alt="事件流"></p><h2 id="事件捕获-event-capturing"><a href="#事件捕获-event-capturing" class="headerlink" title="事件捕获 (event capturing)"></a>事件捕获 (event capturing)</h2><p>事件捕获过程中，document 对象首先接收到click事件，然后事件沿DOM树依次向下，一直到事件的实际目标，既div元素</p><h3 id="Html"><a href="#Html" class="headerlink" title="Html"></a>Html</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><span class="line">&lt;body&gt;</span><br><span class="line">    &lt;ul id=&quot;parent&quot;&gt;</span><br><span class="line">        &lt;li id=&quot;child&quot;&gt;Test1&lt;/li&gt;</span><br><span class="line">    &lt;/ul&gt;</span><br><span class="line">&lt;/body&gt;</span><br></pre></td></tr></table></figure><h3 id="Js"><a href="#Js" class="headerlink" title="Js"></a>Js</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">var parent = document.getElementById(&apos;parent&apos;);</span><br><span class="line">var child = document.getElementById(&apos;child&apos;);</span><br><span class="line">parent.addEventListener(&apos;click&apos;,function()&#123;</span><br><span class="line">    console.log(&apos;parent&apos;)</span><br><span class="line">&#125;,true);</span><br><span class="line">child.addEventListener(&apos;click&apos;,function()&#123;</span><br><span class="line">    console.log(&apos;child&apos;)</span><br><span class="line">&#125;,true);</span><br></pre></td></tr></table></figure><p>点击后打印结果为</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br></pre></td><td class="code"><pre><span class="line">parent</span><br><span class="line">child</span><br><span class="line">```    </span><br><span class="line"></span><br><span class="line">## 事件冒泡 (event bubbling)</span><br><span class="line"></span><br><span class="line">事件冒泡，既事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收，然后逐级向上传播到较为不具体的节点(文档)</span><br><span class="line"></span><br><span class="line">### Html</span><br><span class="line">```[html]</span><br><span class="line">&lt;body&gt;</span><br><span class="line">    &lt;ul id=&quot;parent&quot;&gt;</span><br><span class="line">        &lt;li id=&quot;child&quot;&gt;Test1&lt;/li&gt;</span><br><span class="line">    &lt;/ul&gt;</span><br><span class="line">&lt;/body&gt;</span><br></pre></td></tr></table></figure><h3 id="Js-1"><a href="#Js-1" class="headerlink" title="Js"></a>Js</h3><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><span class="line">var parent = document.getElementById(&apos;parent&apos;);</span><br><span class="line">var child = document.getElementById(&apos;child&apos;);</span><br><span class="line">parent.addEventListener(&apos;click&apos;,function()&#123;</span><br><span class="line">    console.log(&apos;parent&apos;)</span><br><span class="line">&#125;,false);</span><br><span class="line">child.addEventListener(&apos;click&apos;,function()&#123;</span><br><span class="line">    console.log(&apos;child&apos;)</span><br><span class="line">&#125;,false);</span><br></pre></td></tr></table></figure><p>点击后打印结果为</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><span class="line">child</span><br><span class="line">parent</span><br></pre></td></tr></table></figure><p>一般我们都不会传入第三个参数，第三个参数默认一般也都是false，也就是事件冒泡</p><h2 id="实践"><a href="#实践" class="headerlink" title="实践"></a>实践</h2><p>实现将一个功能，点击按钮，就可以弹出一个选择框，在我点击非选择框区域的时候，选择框就会自动消失。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">&lt;div id=&quot;wrapper&quot; class=&quot;wrapper&quot;&gt;</span><br><span class="line">    &lt;button id=&quot;button&quot;&gt;点我&lt;/button&gt;</span><br><span class="line">    &lt;div id=&quot;popover&quot; class=&quot;popover&quot;&gt;</span><br><span class="line">        &lt;input type=&quot;checkbox&quot;&gt;浮层</span><br><span class="line">    &lt;/div&gt;</span><br><span class="line">&lt;/div&gt;</span><br></pre></td></tr></table></figure><p>第一次可能我会这样实现</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><span class="line">button.addEventListener(&apos;click&apos;, function(e)&#123;</span><br><span class="line">    popover.style.display = &apos;block&apos;</span><br><span class="line">&#125;)</span><br><span class="line">document.addEventListener(&apos;click&apos;, function()&#123;</span><br><span class="line">    popover.style.display = &apos;none&apos;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure><p>这里当我们点击按钮之后，看上去什么都没有发生。这是为什么呢？那是因为在事件冒泡阶段，执行完第一个按钮点击事件后，继续向上冒泡，遇到了document的点击事件，于是又执行了，这样弹窗又再次隐藏了。</p><p>很简单的思路是，我们让执行完第一个事件之后，不再冒泡了，事件冒泡就此断开。</p><figure class="highlight plain"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><span class="line">button.addEventListener(&apos;click&apos;, function(e)&#123;</span><br><span class="line">    popover.style.display = &apos;block&apos;</span><br><span class="line">&#125;)</span><br><span class="line">button.addEventListener(&apos;click&apos;, function(e)&#123;</span><br><span class="line">    window.event? window.event.cancelBubble = true : e.stopPropagation();  //停止冒泡</span><br><span class="line">&#125;)</span><br><span class="line">document.addEventListener(&apos;click&apos;, function()&#123;</span><br><span class="line">    popover.style.display = &apos;none&apos;</span><br><span class="line">&#125;)</span><br></pre></td></tr></table></figure>]]></content:encoded>
      
      <comments>http://yoursite.com/2019/03/11/JS%E4%BA%8B%E4%BB%B6%E5%86%92%E6%B3%A1%E3%80%81%E4%BA%8B%E4%BB%B6%E6%8D%95%E6%8D%89/#disqus_thread</comments>
    </item>
    
    <item>
      <title>重新起航</title>
      <link>http://yoursite.com/2018/12/18/%E9%87%8D%E6%96%B0%E8%B5%B7%E8%88%AA/</link>
      <guid>http://yoursite.com/2018/12/18/%E9%87%8D%E6%96%B0%E8%B5%B7%E8%88%AA/</guid>
      <pubDate>Tue, 18 Dec 2018 16:00:25 GMT</pubDate>
      <description>
      
        &lt;p&gt;&lt;img src=&quot;/images/onePiece.jpg&quot; alt=&quot;banner&quot;&gt;&lt;/p&gt;
      
      </description>
      
      <content:encoded><![CDATA[<link rel="stylesheet" class="aplayer-secondary-style-marker" href="/assets/css/APlayer.min.css"><script src="/assets/js/APlayer.min.js" class="aplayer-secondary-script-marker"></script><p><img src="/images/onePiece.jpg" alt="banner"></p><a id="more"></a><h3 id="说在前面"><a href="#说在前面" class="headerlink" title="说在前面"></a>说在前面</h3><p>为什么自己搭建博客，知乎不行吗？</p><p>有自己的博客可以随便折腾，并且全部是自己搭建的，有成绩感，为什么要建自己的博客，可以看看这篇文章：<a href="http://mindhacks.cn/2009/02/15/why-you-should-start-blogging-now/" target="_blank" rel="noopener">刘未鹏 | Mind Hacks</a>。更多请<a href="https://www.zhihu.com/question/19916345" target="_blank" rel="noopener">为什么要建博客</a></p><h3 id="重新起航"><a href="#重新起航" class="headerlink" title="重新起航"></a>重新起航</h3><p>&emsp;&emsp;为什么说重新起航是因为原来自己搭建过博客，折腾过好多平台，自己搞服务器进行过自己建站，但是都忽略了博客最重要的还是内容本身，搞的一切花里胡哨的一切外表，缺缺乏内部内容的充实，最后时间一长，就放弃了。在进行了一轮反思之后，于是决定用最朴实无华的 gitpage 做博客站点。这样，既可以推动我更新博客的同时，也可以在写技术博客时，把相关代码push到github上，让我的github也可以长时间的点亮。</p><p>&emsp;&emsp;总得来说，现在萌生的继续写博客的想法，主要目的，还是因为写博客时总结自我知识，并且将其记录下来的最好的方式，一个知识你看似懂了，和你真的理解了，差距还是很远的。博客不是目的，只是手段，是知识学习积淀过程中的产物，可能写的不一定好，但主要目的还是服务于我自己的。所以大家如果看了我的博客，有不懂的地方，或者我写的不好的，欢迎大家提意见。</p><h3 id="博客计划"><a href="#博客计划" class="headerlink" title="博客计划"></a>博客计划</h3><p>&emsp;&emsp;做什么事情，上来大家都是定计划，我也不能例外。但是可能计划不一定能赶上变化，但是尽量在这条主分支上，不至于偏离太多.第一阶段的文章应该主要</p><ol><li>地图可视化</li><li>webgl</li><li>react</li><li>es6(js相关)</li></ol><p>主要是因为，现在工作内容是预研可视化方向的技术实现，虽然写代码很久了，但是对于openGL webGL这种可视化的东西，也是了解不深，现在主要要研究web端的可视化，所以webGL就必须要学习了，实现在web上，就选择用react写了，这样就需要用es6的代码了，这一连串的知识链就是这么安排的，希望能做出点成绩吧。</p><h3 id="充满动力"><a href="#充满动力" class="headerlink" title="充满动力"></a>充满动力</h3><p>计划已经确定了，下面就是执行了，在2018的结束开始了我博客的新篇章，努力在2019完美的实现，计划可能有相关变更，但是都会写在这篇置顶博客中</p>]]></content:encoded>
      
      <comments>http://yoursite.com/2018/12/18/%E9%87%8D%E6%96%B0%E8%B5%B7%E8%88%AA/#disqus_thread</comments>
    </item>
    
  </channel>
</rss>
