0.0.7 • Published 4 months ago

sitclib v0.0.7

Weekly downloads
-
License
MIT
Repository
github
Last release
4 months ago

空间交互标签云布局库(SitcLib)

目录

简介

返回

SitcLib 是用于绘制空间交互标签云(Spatial Interaction Tag Cloud, SITC)的 JavaScript 库,它依赖于D3.js,使用 SVG 绘制 SITC。

基本使用

返回

SitcLib内部依赖于 D3.js,使用时需要导入 D3.js。

使用 script 标签导入

返回

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>umd版本演示</title>
    <link rel="stylesheet" href="./style.css" />
    <!-- 导入d3 -->
    <script src="https://cdn.bootcdn.net/ajax/libs/d3/7.9.0/d3.min.js"></script>
    <!-- 导入Sitc -->
    <script src="../dist/sitclib.umd.js"></script>
  </head>
  <body>
    <!-- 指定画布,SITC算法默认选择id为sitc-svg的svg元素作为画布 -->
    <svg id="sitc-svg"></svg>
    <script>
      // 实例化sitc对象
      const sitc = new Sitc();

      // 这里使用D3读取空间交互数据
      d3.json("../testData/flightsData.json").then((sourceData) => {
        sitc
          .data([sourceData[0]]) // 指定空间交互数据
          .layout(); // 基于默认配置生成空间交互标签云
      });
    </script>
  </body>
</html>

使用 esm 导入

返回

可以通过 npm 下载 es 版本的SitcLib,也可以将 dist 文件下的sitclib.es.js直接下载到本地。

npm install sitclib
<!DOCTYPE html>
<html lang="zh">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>es版本演示</title>
    <link rel="stylesheet" href="./style.css" />
  </head>
  <body>
    <!-- 指定画布,SITC算法默认选择id为sitc-svg的svg元素作为画布 -->
    <svg id="sitc-svg"></svg>
  </body>
  <script type="module">
    import * as d3 from "d3";
    import Sitc from "sitclib"; // 导入Sitc

    // 或下载到本地后导入
    // import Sitc from "path/to/sitclib.es.js";

    //实例化得到sitc对象
    const sitc = new Sitc();

    // 使用D3读取空间交互数据
    d3.json("../testData/flightsData.json").then((sourceData) => {
      sitc.data([sourceData[0]]).layout();
    });
  </script>
</html>

前置概念

默认配置

返回

SitcLib 默认导出Sitc类,实例化该类得到一个具有绘制 SITC 默认配置的 sitc 对象,具体配置如下:

{
  // 参数名:默认值
  sidata: null, // 布局所需的空间交互数据
  mode: 'S1', // 空间交互标签云模式,可选值: 'S1' | 'S2' | 'D1' | 'D2' | 'M'
  direction: 'totalValue', // 空间交互方向,可选值: 'totalValue' | 'inValue' | 'outValue'
  // 指向箭头相关配置
  arrow: {
    show: true, // 是否显示指向箭头
    stroke: { // 箭头描边样式
      color: "#333", // 颜色
      opacity: 0.8, // 透明度
      width: 1, // 宽度
    }
  },
  // 标签配色,分别对应中心、共有、部分共有、独有标签
  colorScheme: ["red", "green", "yellow", "blue"],
  // 标签字体配置
  font: {
    fontSizeRange: [16, 40], // 字号范围
    fontSizeScale: "global", // 字号映射尺度,可选值:'global' | 'local'
    fontFamily: "微软雅黑",  // 字体
    fontWeight: "normal",  // 字重,可选值:'normal' | 'bold'
    fontStyle: "normal", // 倾斜, 可选值:'normal' | 'italic'
  },
  // 显示、隐藏标签簇外接圆和标签包围盒
  isShow: {
    circle: false, // 外接圆
    rect: false, // 包围盒
  },
  // 阿基米德螺线配置
  spiralCfg: {
    ratio: 1, // 螺线长宽比,取值范围[0.5, 1.5]
    step: 0.1, // 步长,取值范围[0.01, 1]
    b: 1, // 螺距,取值范围[0.1, 1.5]
    a: 0, // 起始点偏移量, 固定为0
  },
  // SVG画布的css选择器
  svgSelector: '#sitc-svg',
  // SVG画布
  svgSelection: Selection
}

空间交互数据

返回

SITC布局所需的数据,具体格式如下:

[
  // 一个中心地点对应的空间交互数据
  {
    // 中心地点
    source: {
      name: string, // 中心地点名称
      crd: [number, number], // 中心地点地理坐标
      province: string, // 中心地点所属省份
      nameEn: string, // 中心地点英文名称
    },
    // 与中心地点交互的地点集合
    targets: [
      {
        name: string, // 地点名称
        crd: [number, number], // 地点地理坐标
        province: string, // 地点所属省份
        nameEn: string, // 地点英文名称
        inValue: number, // 该地点流入中心地点的交互强度
        outValue: number, // 中心地点流出到该地点的交互强度
        totalValue: number, // 流入与流出强度总和
        class?: number, // 地点的尺度[可选参数,仅S1模式可用],将targets中的地点按class分为不同的尺度,可选值: 1 | 2 | 3
      },
      ...
    ]
  },
  ...
]

空间交互数据示例如下:

{
  {"source": {
    "name": "上海市",
    "crd": [121.4737021, 31.2303904],
    "province": "上海市",
    "nameEn": "ShangHaiShi"
  },
  "targets": [
    {
      "name": "临沧市",
      "nameEn": "LinCangShi",
      "crd": [100.088824, 23.884154],
      "province": "云南省",
      "inValue": 2,
      "outValue": 1,
      "totalValue": 3
    },
    {
      "name": "丽江市",
      "nameEn": "LiJiangShi",
      "crd": [100.22775, 26.855047],
      "province": "云南省",
      "inValue": 7,
      "outValue": 7,
      "totalValue": 14
    }
  ]
  },
  {
  "source": {
      "name": "保山市",
      "crd": [
        99.16176100000001,
        25.112046
      ],
      "province": "云南省",
      "nameEn": "BaoShanShi"
    },
    "targets": [
      {
        "name": "上海市",
        "nameEn": "ShangHaiShi",
        "crd": [
          121.4737021,
          31.2303904
        ],
        "province": "上海市",
        "inValue": 1,
        "outValue": 1,
        "totalValue": 2
      },
      {
        "name": "昆明市",
        "nameEn": "KunMingShi",
        "crd": [
          102.832891,
          24.880095
        ],
        "province": "云南省",
        "inValue": 34,
        "outValue": 35,
        "totalValue": 69
      },
      {
        "name": "北京市",
        "nameEn": "BeiJingShi",
        "crd": [
          116.4073963,
          39.90419989999999
        ],
        "province": "北京市",
        "inValue": 1,
        "outValue": 1,
        "totalValue": 2
      },
    ]
  }
}

空间交互标签云模式

返回

空间交互标签云设计有单中心双中心多中心 三种模式,每种模式支持输出的空间交互数据的中心地点数量与应用场景不同。

1.单中心模式

单中心模式支出输入一个中心地点的空间交互数据,细分为单中心同尺度(S1)单中心不同尺度(S2) 两种模式。

单中心同尺度(S1) 用于展示一个中心地点与同一尺度的其他地点的空间交互情况; 单中心不同尺度(S2) 用于展示一个中心地点与不同尺度的其他地点的空间交互情况,注意,需要指定空间交互数据中 targets 里地点的 class 属性

2.双中心模式

双中心模式又细分为双中心同流向(D1)双中心不同流向(D2) 两种模式。

双中心同流向(D1) 需要输入两个中心地点交互数据,对比这两个地点流入(inValue)、流出(outValue)或总和(totalValue)的交互情况; 双中心不同流向(D2) 需要输入一个中心地点的交互数据,对比这一个地点作为交互流入地与流出地的交互情况。

3.多中心模式

多中心模式(M) 支持输入任意数量中心地点的空间交互数据,展示这些地点空间交互情况。

API

sitc.data()

返回

用途: 指定空间交互数据。注意:指定的空间交互数据中的中心地点数量需要和模式对应,S1、S2、D2 模式支持一个中心地点,D1 模式支持两个中心地点,M 模式支持任意数量的中心地点。

默认值: null

返回值: sitc 对象

const sidata1 = [...];
const sitc = new Sitc(sidata1); // 实例化时可以传入空间交互数据
const sidata2 = [...];
sitc.data(sidata2); // 重新指定空间交互数据

sitc.setMode()

[返回](#top)

用途: 指定空间交互模式,必须为"S1", "S2", "D1", "D2", "M"中的一种。详见[空间交互标签云模式](#空间交互标签云模式)

默认值:"S1"

返回值: sitc 对象

const sitc = new Sitc(); // 实例化
sitc.setMode("M"); // 指定为多中心模式

sitc.setDirection()

[返回](#top)

用途: 指定空间交互的方向,必须为"totalValue", "inValue", "outValue"中的一种。

默认值: "totalValue"

返回值: sitc 对象

const sitc = new Sitc(); // 实例化
sitc.setMode("inValue"); // 指定为交互方向为"inValue"

sitc.setArrow()

[返回](#top)

用途: 指定空间交互标签云中指向箭头的相关配置。

默认值:

{
  show: true, // 是否显示指向箭头, boolean类型
    stroke: { // 箭头描边样式
      color: "#333", // 颜色
      opacity: 0.8, // 透明度, number类型, 取值范围[0,1]
      width: 1, // 宽度, number类型
  }
}

返回值: sitc 对象

const sitc = new Sitc(); // 实例化
sitc.setArrow({
  stroke: {
    color: "blue",
  },
}); // 修改箭头颜色为蓝色

sitc.setColorScheme()

[返回](#top)

用途: 指定空间交互标签云中标签的配色。

默认值:

["red", "green", "yellow", "blue"]; // 分别对应中心、共有、部分共有与独有标签

返回值: sitc 对象

const sitc = new Sitc(); // 实例化
sitc.setColorScheme(["purple", "rgb(255,255,255)", "#333", "#e6e6e6"]); // 修改箭头颜色为蓝色

sitc.setFont()

[返回](#top)

用途: 指定空间交互标签云中标签文本相关配置。

默认值:

{
  fontSizeRange: [16, 40], // 字号范围
  fontSizeScale: "global", // 字号映射尺度,可选值:'global' | 'local'
  fontFamily: "微软雅黑",  // 字体
  fontWeight: "normal",  // 字重,可选值:'normal' | 'bold'
  fontStyle: "normal", // 倾斜, 可选值:'normal' | 'italic'
}

返回值: sitc 对象

const sitc = new Sitc(); // 实例化
sitc.setFont({
  fontFamily: "楷体",
  fontWeight: "bold",
}); // 指定字体为楷体并加粗

sitc.setShow()

[返回](#top)

用途: 指定标签簇外接圆与文本标签矩形包围盒是否可见。

默认值:

{
  circle: false, // 外接圆,boolean类型
  rect: false // 包围盒,boolean类型
}

返回值: sitc 对象

const sitc = new Sitc(); // 实例化
sitc.setShow({
  circle: true, // 可见
  rect: true, // 可见
});

sitc.spiral()

[返回](#top)

用途: 指定阿基米德螺线相关配置。

默认值:

{
  ratio: 1, // 螺线长宽比,取值范围[0.5, 1.5]
  step: 0.1, // 步长,取值范围[0.01, 1]
  b: 1, // 螺距,取值范围[0.1, 1.5]
  a: 0, // 起始点偏移量, 固定为0
}

返回值: sitc 对象

const sitc = new Sitc(); // 实例化
sitc.spiral({
  step: 0.01,
}); // 修改阿基米德螺线的螺距

sitc.svg()

[返回](#top)

用途: 指定 svg 画布的 css 选择器。

默认值: "#sitc-svg"

返回值: sitc 对象

<svg class="my-svg"></svg>
<script>
  const sitc = new Sitc(); // 实例化
  sitc.svg(".my-class"); // 修改svg的选择器
</script>

sitc.setInteraction()

[返回](#top)

用途: 指定 SITC 是否开启交互,默认开启的交互有画布的平移缩放、鼠标悬浮高亮同名标签、拖拽中心标签移动整个地名标签簇。

默认值: true

返回值: sitc 对象

const sitc = new Sitc(); // 实例化
sitc.setInteraction(false); // 关闭交互

sitc.layout()

[返回](#top)

用途: 根据设定配置绘制空间交互标签云。

返回值: sitc 对象

const sitc = new Sitc(); // 实例化
// sitc暴露的方法支持链式调用
sitc
	.data(your sidata)
	.setMode(simode)
	.setColorScheme(your color scheme)
	.loyout(); // 根据指定的数据、模式、色带并结合其他未修改的默认配置绘制空间交互标签云

测试用例中的 SITC

[返回](#top)

npm run dev

测试用例结果

0.0.7

4 months ago

0.0.6

4 months ago

0.0.5

4 months ago

0.0.4

4 months ago

0.0.3

4 months ago

0.0.2

4 months ago

0.0.1

4 months ago

0.0.0

4 months ago