作者归档:songtianlun

Vue项目api加载json文件

概述

在 vue 项目开发过程中,免不了的要进行 api 接口的调用,当后端接口未搭建完成时,可以使用 json 文件模拟数据调用来搭建功能,同时有一些相关数据也是需要本地 json 文件支持,于是在这里介绍自己实战项目内嵌 api 接口调用本地数据 json 的方式

实现方法

第一步:将 json 放入项目目录

第二步:接口声明

在 build/webpack.dev.conf.js 文件里添加如下代码:

const express = require('express')
const app = express()
var appData = require('../address.json')
var apiRoutes = express.Router()
app.use('/api', apiRoutes) 

// 在devServer对象里添加如下代码:

before(app) {
      app.get('/api/address', (req, res) => {
        res.json({
          errno: 0,
          data: appData
        })
      })
    }

第三步:接口调用

测试

这时候在浏览器输入 http://localhost:8080/api/address 便可看到 json 文件的数据了。

axio 调用

在组件里可以用 axios 或者其它方式请求获取数据,请求 URL 为:’/api/address’,例如用 axios 的话:

(1)、下载 axios,如果没有的话

npm install --save axios vue-axios

(2)、在 main.js 里引入

import axios from 'axios'
Vue.prototype.$http = axios

(3)、开始请求

this.$http.get('/api/address').then(response => {
      console.log(response)
 }, response => {
      console.log('数据加载失败')
 })

参考文档

获取指定尺寸随机美图

简介

unsplash是一个美图资源站点,站点提供大量高质量美图,重点突出,极其美丽,是获取资源的不二选择,同时该站点还提供了一系列接口,在这里介绍一种获取随机美图的方式

获取

使用unsplash提供的接口可以获取制定尺寸的随机图,方式如下: 例如,从unsplash获取一张1280*768尺寸的图,使用如下网址

https://source.unsplash.com/random/1280x768

效果

1280×768

1920×1080

站点

Vue项目使用leaflet+heatmap.js加载热力图

概述

最近做数字工程实践涉及到大量的地图操作,刚开始跳过依赖于 supermap iclient for JavaScript,但是越做深入越发现局限性太大,于是开始考虑使用开源地图库做各项操作,本文记录在 vue 项目中引入原生 leaflet 及 heatmap 打开地图及显示热力图的各项操作。

各项操作

leaflet 打开地图

第一步:下载 leaflet

Leaflet官网下载即可

第二步:vue 引入 leaflet

新建 vue 项目不在叙述,将 leaflet 库解压后拷入项目目录

使用 vendor 方式引入 leaflet 库,不会编译 js 文件

找到 webpack.base.conf.js 文件,在其中的 module.exports 中,找到 entry,在其中找到或新建 vendor,引入即可

第三步:打开第一幅地图

在 vue 文件中操作

template 标签下增加如下代码

template>
  <div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
</template>

style 中引入 css

<style scoped>
  @import "https://unpkg.com/leaflet@1.0.3/dist/leaflet.css";
</style>

script 文件中引入 L

import L from 'leaflet'

新建地图容器

let map = L.map('map', {
          center: [39.9788, 116.30226],
          zoom: 14
        })

打开 openstreetmap

L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
          attribution: 'Haut-Gis-Org © OpenStreetMap'
        }).addTo(this.map)

heatmap 渲染热力图

第一步:npm 方式引入 headmap.js

npm install heatmap.js

第二步:引入 leaflet 中使用的函数

import HeatmapOverlay from 'heatmap.js/plugins/leaflet-heatmap'

第四步:配置

// 配置
        var cfg = {
          'radius': 2,
          'maxOpacity': 0.8,
          'scaleRadius': true,
          'useLocalExtrema': true,
          latField: 'lat',
          lngField: 'lng',
          valueField: 'count'
        }

第五步:模拟数据

// 数据
        var testData = {
          max: 8,
          data: [{ lat: 24.6408, lng: 46.7728, count: 3 },
            { lat: 50.75, lng: -1.55, count: 1 },
            { lat: 51.55, lng: -1.55, count: 9 },
            { lat: 52.65, lng: -1.45, count: 8 },
            { lat: 53.45, lng: -1.35, count: 7 },
            { lat: 54.35, lng: -1.25, count: 6 },
            { lat: 5.25, lng: -1.15, count: 5 }
          ]
        }

第六步:叠加图层

this.heatmapLayer = new HeatmapOverlay(cfg)
        // 图层
        let baseLayer = L.tileLayer(
          'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
            attribution: 'Haut-Gis-Org © OpenStreetMap'
          }
        )

        this.heatmapLayer.addTo(map)
        this.heatmapLayer.setData(testData)

效果图

参考代码


<template>

  <div id="map" style="margin:0 auto;width: 100%;height: 100%"></div>
</template>

<script>
  import HeatmapOverlay from 'heatmap.js/plugins/leaflet-heatmap'
  import L from 'leaflet'

  export default {
    name: 'gis-population-density',
    data () {
      return {
        heatmapLayer: null,
        map: null
      }
    },
    mounted () {
      // 引用heatmap.js
      // let script = document.createElement('script')
      // script.type = 'text/javascript'
      // script.src =
      // 'http://api.map.baidu.com/library/Heatmap/2.0/src/Heatmap_min.js'
      // document.body.appendChild(script)
      this.initmap()
    },
    methods: {
      initmap: function () {
        // this.map = L.map('map', {
        //   center: [39.9788, 116.30226],
        //   zoom: 14
        // })
        //
        // L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
        //   attribution: 'Haut-Gis-Org © OpenStreetMap'
        // }).addTo(this.map)

        // 数据
        var testData = {
          max: 8,
          data: [{ lat: 24.6408, lng: 46.7728, count: 3 },
            { lat: 50.75, lng: -1.55, count: 1 },
            { lat: 51.55, lng: -1.55, count: 9 },
            { lat: 52.65, lng: -1.45, count: 8 },
            { lat: 53.45, lng: -1.35, count: 7 },
            { lat: 54.35, lng: -1.25, count: 6 },
            { lat: 5.25, lng: -1.15, count: 5 }
          ]
        }
        // 配置
        var cfg = {
          'radius': 2,
          'maxOpacity': 0.8,
          'scaleRadius': true,
          'useLocalExtrema': true,
          latField: 'lat',
          lngField: 'lng',
          valueField: 'count'
        }
        this.heatmapLayer = new HeatmapOverlay(cfg)
        // 图层
        let baseLayer = L.tileLayer(
          'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
            attribution: 'Haut-Gis-Org © OpenStreetMap'
          }
        )
        this.map = L.map('map', {
          center: [25.6586, -80.3568],
          zoom: 4
        })
        baseLayer.addTo(this.map)
        this.heatmapLayer.addTo(this.map)
        this.heatmapLayer.setData(testData)

        L.control.scale({ maxWidth: 200, metric: true, imperial: false }).addTo(this.map)

        let baseLayers = {
          'heatmapLayer': this.heatmapLayer,
          'OpenStreetMap': baseLayer
        }
        // let overlays = {
        //   'Marker': null,
        //   'Roads': null
        // }
        L.control.layers(baseLayers).addTo(this.map)
      }
    }
  }
</script>

<style scoped>
  @import "https://unpkg.com/leaflet@1.0.3/dist/leaflet.css";
</style>

常用插件

npm安装指令
npm i leaflet.chinatmsproviders
npm安装指令
npm install leaflet.markercluster
npm安装指令
npm install heatmap.js

参考文档

Vue项目使用Vue2Leaflet插件实现地图显示

简介

vue是一个渐进式javascript框架,用来快速构建网页项目,在vue框架之上结构化leaflet地图库的产物vue2leaflet可以在vue项目中很方便的加载地图,下面简单介绍一个vue2leaflet加载地图的过程。

第一个地图显示页面

第一步:新建vue项目

第二步:安装Vue2Leaflet

在项目目录下运行如下代码

npm i vue2-leaflet -S

实测项目还需安装leaflet

npm install --save leaflet

第三步: 新建VueLeaflet.vue

在components文件夹中新建vue文件VueLeaflet.vue

在template标签下增加如下内容,显示地图,并增加一个marker

<div class="vue-leaflet">
    <l-map style="width: 100%; height: 600px;" :zoom="zoom" :center="center">
      <l-tile-layer :url="url" :attribution="attribution"></l-tile-layer>
      <l-marker :lat-lng="marker">
        <l-popup :content="text"></l-popup>
      </l-marker>
    </l-map>

  </div>

在script标签,name之下增加如下内容

data () {
    return {

    }
  }

第三步:修改路由

修改index.js,将helloworld修改为vueleaflet

第四步:引入组件

在vueleaflet.vue的script标签下增加如下内容(注意合并部分)

import { LMap, LTileLayer, LMarker, LPopup } from 'vue2-leaflet'
import L from 'leaflet'
export default {
  name: 'VueLeaflet.vue',
  components: {
    LMap,
    LTileLayer,
    LMarker,
    LPopup
  },
  data () {
    return {
      zoom: 13,
      center: L.latLng(47.413220, -1.219482),
      url: 'http://{s}.tile.osm.org/{z}/{x}/{y}.png',
      attribution: '© <a href="http://osm.org/copyright">OpenStreetMap</a> Haut-Gis-Org',
      marker: L.latLng(47.413220, -1.219482),
      text: 'this is a marker'
    }
  }
}

第五步:引入css

在main.js中添加

import 'leaflet/dist/leaflet.css'
import L from 'leaflet'

第六步:修改icon路径

在main.js中添加如下代码

/* leaflet icon */
delete L.Icon.Default.prototype._getIconUrl
L.Icon.Default.mergeOptions({
  iconRetinaUrl: require('leaflet/dist/images/marker-icon-2x.png'),
  iconUrl: require('leaflet/dist/images/marker-icon.png'),
  shadowUrl: require('leaflet/dist/images/marker-shadow.png')
})

效果展示

项目地址

完成这个项目花费了一些精力,故将项目源码分享在了github上

GitHub

Windows下纯控制台配置vue环境并创建第一个vue项目

概述

本文叙述如何在windows环境下完全使用cmd控制台配置vue环境并使用控制台创建vue项目,最终使用webstorm运行。

环境配置

第一步:node.js安装

Vue项目通常通过webpack工具来构建,而webpack命令的执行是依赖node.js的环境的,所以首先要安装node.js。node.js的官方地址为:https://nodejs.org/en/download/,下载相应版本。

安装完毕之后,在命令行下验证是否安装成功:输入npm,显示如下就表示安装成功。

第二步:cnpm的安装

安装完node之后,npm包含的很多依赖包是部署在国外的,在天朝,大家都知道下载速度是超级慢啊。所以我们要安装cnpm,cnpm是淘宝对npm的镜像服务器,这样依赖的包安装起来就快多了。 安装命令为:npm install -g cnpm --registry=https://registry.npm.taobao.org~~~~

最好还是科学上网,使用淘宝镜像会出现各种诡异的bug,特此忠告!

第三步:vue-cli的安装

vue-cli是vue官方提供的一个命令行工具,可用于快速搭建大型单页应用。该工具提供开箱即用的构建工具配置,带来现代化的前端开发流程。只需一分钟即可启动带热重载、保存时静态检查以及可用于生产环境的构建配置的项目。 安装命令为:

npm install -g vue-cli

回车,等待安装。

安装完后,检查是否安装成功,输入vue,出现以下提示表示安装成功

控制台新建vue项目

(1)新建一个项目文件夹,命名为 vue-demo,cd到此文件夹,输入:vue init webpack vue-demo,回车,按照如下操作进行初始化:

我们暂时不适用模板提供的测试框架,Karma + Mocha,以及Nightwatch。 (2)项目目录

(3)安装项目依赖的包 cd到vue-demo 文件夹,执行cnpm install,安装依赖包,安装完成之后,项目目录下多了node_modules:

(4)运行项目 在命令行里输入 cnpm run dev,执行完成后启动项目,浏览器出现以下接结果,说明启动成功。注意浏览器的版本,低版本的不支持哦。

在webstorm中打开项目

在webstorm中打开刚刚新建的项目

按照下图指示打开npm

package.json上右键

打开npm

双击dev,等待运行,成功即显示访问域名

运行成功

npm配置

修改仓库源

开始:在cmd中输入

npm config ls

出现npm的配置,你可以看到如下:

其中metrics-registry是远程仓库源

prefix是储存npm下载的包和其他工具的本地仓库地址

更换仓库源:

**npm config set registry http://registry.npm.taobao.org/**

这是淘宝的仓库源,淘宝仓库源和npm仓库源每10分钟同步一次,基本满足你的需求

如果你觉得不满意,可以更换回npm官方仓库源:

npm config set registry http://www.npmjs.org

参考文档

WebStorm中使用Git同步代码到Github

WebStorm下配置GitHub实现代码同步

项目开发时使用GitHub作为公共代码仓库托管代码,可以极大的提高团队合作效率,同时也可以实现代码云端存储等,方便自己也方便大家!下面记录一下自己配置webstorm同步github的过程,仅供参考。

安装git

没什么说的,直接去git官网下载安装即可。

git官网

准备SSH

在进行下一步之前先检查一下计算机中是否有已存在的ssh,打开如下目录C:\Users\songt,其中songt为您的用户名,在该目录下检查是否存在.ssh目录。

情况一-若存在,则表示电脑中存在ssh

可直接复制其中的id_rsa.pub中的内容进行下一步。

情况二-不存在,创建ssh

打开git bash,可通过快捷方式打开,也可通过鼠标右键打开。

打开后在其中运行如下代码

ssh-keygen -t rsa -C “你的邮箱”

我的输入如下图所示

上述代码我运行了两次,暂时不清楚原因。

之后就是三次回车,即可生成ssh。

在我的电脑C:\Users\songt\.ssh目录下可以找到生成的id_rsa.pub文件。

使用ssh

接下来就要配置github,在github中添加我们的git进入github的密钥啦!

打开github

进入个人设置

选择左侧的SSH and GPG keys选项

添加ssh

输入title和key即可,其中title自定义,key内容为C:\Users\songt\.sshid_rsa.pub文件中的内容。(注:文件直接使用记事本打开即可)

ok!

测试ssh是否配置成功

在git bash中运行如下代码

ssh -T git@github.com

若询问Are you sure you want to continue connecting (yes/no)?则输入yes

输入类似下列信息即连接成功

Hi songtianlun! You've successfully authenticated, but GitHub does not provide shell access.

webstorm

配置GitHub

打开webstorm,在file-settings中搜索github,输入自己的账号密码。

若没有异常提醒,就可以看到自己的GitHub了。

配置git

在settings中查找git,将git的安装路径输入,点击text,若没有异常提示则应该可以看到如下界面。

尽情使用吧

代码拉取

准备工作做好之后就可以上传代码啦,打开webstorm,如图

之后会弹出如下窗口,填写实例如图

其中URL填写代码仓库的地址,在图示位置中可以找到。

directory中填写本地项目地址,即您的电脑中存储该项目的路径。

如果上传路径和已有仓库同名产生冲突,直接换个文件夹的路径就好了。

下面信息写给我的同组伙伴们,实践作业的代码仓库地址如下:https://github.com/songtianlun/Gis-ChangChun-Info.git,在url中填入这个地址

注,在在这里的操作是直接将代码仓库中的文件拉取到选择的本地路径,这个路径下的文件夹要保证为空或不存在,webstorm可直接使用这个文件夹作为工程文件打开。

点击clone就会将代码仓库中的内容直接拉取到本地,如图所示。

代码上传

在本地对代码进行了修改,需要上传时,使用VCS-Commit,如图。

点击之后弹出如下窗口

蓝色的文件表示待提交文件,在commit message中简要描述做的修改操作,之后点击commit and push。

成功提交会弹出以下提示。

在GitHub代码仓库中就可以看到刚刚提交的内容了。

在webstorm中如果仅使用commit,不push,则在github中看不到提交的代码,代码仅仅是提交给了git,因此注意提交代码需要使用commit and push!

【书评】一百个人的十年

最近看了冯骥才老先生写的《一百个人的十年》,讲述的是文革时期那段不堪回首的回忆。作者通过100个在文革中受苦受难的大众,记录下他们在文革中经历的苦难故事,让我们这一代人才有机会如此近距离地接触那一段上一辈不愿提起的往事。前辈人经历的苦难会变作后辈人宝贵的精神财富,文革必定会成为激励我们这一代人奋力前行的一段历史。 阅读书籍,虽然是一本纪实书籍,文字看上去很轻,但事实上每一个字都重重的捶打在我的心上,常常看到有时候捶胸顿足,有一口气久久上不来,看到难以入眠,眼睛实在睁不开了才慢慢地睡去。文革,那是一段不堪的往事,作为我们这一代人又是不知其真面目的。 阅读书籍有很多的感受,在下面请允许我慢慢叙述: 1.生而为人从来就没有不受苦难能长大的。人们常说“知识改变命运”,有知识的人常常被人们看作是腰缠万贯,虽说在古代常常有“穷酸书生”的说法,但是在当代,读书人越来越受到重视,被更多的人所敬仰。可是事情不总是这样子发展的,在文革时期,受到迫害最严重的当属知识分子了…..有人前一天晚上结束考研,北师大的高才生,经过了长时间艰苦的复习,考完试晚上想着自己一定可以考一个好的成绩,看着窗外的风景,突然间闹起了文革,学生们喊着要废除考研政策,把考研试卷拖出来点了一把火……葬送了未来不说,浪费的是大好的青春。可这还不算完,幸幸苦苦准备的考试成绩作废,人还要受尽各种批斗,不知多少知识分子被打成“右派”,他们中大部分用各种残忍的方式离开了这个世界,活着的也是苟延残喘受尽了折磨,每天经受的不仅仅是皮肉上的痛苦,更是精神上的折磨!知识分子中有一派人更艰难,那就是中国的科学家们,当年的科学家大部分都被迫害,国防科研项目保护了一小部分科学家,其他的科学家前途未卜,很多人都受不了种种折磨早早离开了这个世界,当时的人们,在哪里都闹革命,根本没有搞科研的地方,有一个对农学很感兴趣的科学家,明明为土地高产做出了很大的贡献,却只能来到乡下,隐姓埋名,把自己活成一个“隐形人”,穷困落后的乡下反而成了最好的科研地。也许这就是科学家最好的结局了吧。 2.上代人经受的苦难,定将成为下一辈人的精神财富。文革是一代人的噩梦,看尽书中的种种