map & scale

TW bug

https://antv.alipay.com/zh-cn/g2/3.x/demo/map/drill-down.html


import React, { useEffect } from 'react';
import PropTypes from 'prop-types'; import { bindActionCreators } from 'redux';
import { connect } from 'dva'; import G2 from '@antv/g2';
import DataSet from '@antv/data-set'; import numeral from 'numeral'; import {
// Spin,
Tooltip,
Button,
// message,
} from 'antd'; import { formatAdcode, isSpecialArea, getAreaNode } from '@/utils/regionUtils'; import dashboardRegionActions from '../actions/dashboard.region.action'; let chart; const mapStateToProps = ({ dashboard }) => ({
regionData: dashboard.regionData,
// mapLoading: dashboard?.mapLoading,
}); const mapDispatchToProps = dispatch => ({
actions: bindActionCreators(dashboardRegionActions, dispatch),
}); // export default connect(
// mapStateToProps,
// mapDispatchToProps,
// )(RegionChart);
// @connect(mapStateToProps, mapDispatchToProps,) const RegionChart = ({
regionData,
actions: {
changeRegion,
}
}) => {
let _drawChart;
const { adcode, regions = [] } = regionData;
let scaleHeight = 520;
let scaleWidth = 700;
let paddingLeft = 100;
useEffect(() => {
getAreaNode(adcode).then(_drawChart);
}, [_drawChart, adcode, regionData]); const _dataSource = geoJSON => {
const data = [];
for (let i = 0; i < geoJSON.length; i++) {
// if (i === 0) {
// console.log(`geoJSON[i]`, geoJSON[i]);
// }
const { name, adcode } = geoJSON[i].properties;
// 可以与后端沟通改数据格式
const target = regions.find(({ code }) => formatAdcode(code) === adcode) || {};
const { code, totalUv } = target;
data.push({
adcode,
code,
name,
totalUv,
});
}
return data;
}; _drawChart = areaNode => {
if (!areaNode) return; const geoJSON = isSpecialArea(adcode)
? [areaNode.getParentFeature()]
: areaNode.getSubFeatures(); chart && chart.destroy(); const ds = new DataSet();
const geoDataView = ds.createView().source(
{
type: 'FeatureCollection',
features: geoJSON,
},
{
type: 'GeoJSON',
},
);
const dvData = ds.createView().source(_dataSource(geoJSON));
// 构造 mock 数据
if (adcode === "71") {
dvData.origin.push({
adcode: 710000,
code: undefined,
name: "台湾省",
totalUv: undefined,
});
dvData.rows.push({
adcode: 710000,
code: undefined,
name: "台湾省",
totalUv: undefined,
lat: [0],
lng: [0],
});
} dvData.transform({
type: 'geo.region',
field: 'name',
geoDataView,
as: ['lng', 'lat'],
});
window.$$ = (uid = ``) => document.querySelector(uid);
if (adcode === "71") {
// skip 台湾 bug
scaleHeight = 0;
scaleWidth = 0;
setTimeout(() => {
let TW = window.$$(".region-map-chart-tw");
if (TW) {
TW.style.display = "block";
}
}, 0);
} else {
setTimeout(() => {
let TW = window.$$(".region-map-chart-tw");
if (TW) {
TW.style.display = "none";
}
}, 0);
// start: 计算地图的最佳宽高
let longitudeRange = dvData.range('lng');
let lantitudeRange = dvData.range('lat');
let chartBox = window.$$(".region-container");
let ratio = (longitudeRange[1] - longitudeRange[0]) / (lantitudeRange[1] - lantitudeRange[0]);
if (ratio > chartBox.clientWidth / chartBox.clientHeight) {
scaleWidth = chartBox.clientWidth;
scaleHeight = scaleWidth / ratio;
} else {
scaleWidth = chartBox.clientHeight * ratio;
scaleHeight = chartBox.clientHeight;
} // if (scaleWidth > scaleHeight) {
// paddingLeft = (scaleWidth - scaleHeight) * ratio;
// } else {
// paddingLeft = (scaleHeight - scaleWidth);
// }
// end: 计算地图的最佳宽高
} chart = new G2.Chart({
container: 'region_chart',
height: scaleHeight,
width: scaleWidth,
// padding: 0,
padding: {
left: paddingLeft,
top: 0,
},
// padding: {
// left: 100,
// top: 0,
// },
}); chart.source(dvData); chart.tooltip({
title: 'name',
}); // chart.scale([0, 0.5]);
// chart.scale([0, 1]); chart
.legend(false)
.axis(false)
.polygon()
.position('lng*lat')
.label('name', {
type: 'map',
textStyle: {
fill: '#333',
fontSize: 12,
},
})
.style({
stroke: '#fff',
lineWidth: 1,
})
// 渐变色, 颜色串(start -> end)
.color('totalUv', '#6882FFFF-#898bf2FF-#c3c4f8FF')
// .color('totalUv', '#BAE7FF-#1890FF-#0050B3')
.tooltip('name*totalUv', (name, totalUv) => ({
name: '累计用户数',
value: totalUv ? numeral(totalUv).format('0,0') + '人' : '- -',
})); // 文字
if (adcode === "71") {
// 不好使???
chart
.guide()
.text({
// position: ['min', 'max'],
position: [0, 0],
offsetX: 100 - paddingLeft,
offsetY: 100,
content: "台湾省",
style: {
fontSize: 14,
fontWeight: 'bold',
},
});
} else {
chart
.guide()
.text({
position: ['min', 'max'],
offsetX: 30 - paddingLeft,
offsetY: 20,
content: areaNode.getName(),
// content: "台湾省",
style: {
fontSize: 14,
fontWeight: 'bold',
},
});
} chart.render();
// if (adcode === 'all') {
// chart.on('click', ev => {
// if (ev?.data?._origin) {
// if (ev.data._origin.code) {
// changeRegion(ev.data._origin.code);
// } else {
// message.warning('暂无数据');
// }
// }
// });
// }
}; return (
<>
{adcode !== 'all' && (
<Tooltip title="点击返回全国">
<Button
size="small"
className="region-map-tooltip"
icon="left"
onClick={() => changeRegion('all')}
/>
</Tooltip>
)}
<div id="region_chart" className="region-map-chart" />
<div className="region-map-chart-legend"></div>
<div className="region-map-chart-tw">
台湾省
</div>
</>
);
}; RegionChart.propTypes = {
regionData: PropTypes.object,
}; export default connect(
mapStateToProps,
mapDispatchToProps,
)(RegionChart); // export {
// RegionChart,
// };
// export default RegionChart;

https://www.yuque.com/antv/g2-docs/api-scale

https://www.yuque.com/antv/g2-docs/tutorial-scale



[
{
"name": "全国数据",
"key": "all",
"alias": 10,
"group": "Q"
},
{
"name": "北京市",
"key": 11,
"group": "B"
},
{
"name": "天津市",
"key": 12,
"group": "T"
},
{
"name": "河北省",
"key": 13,
"group": "H"
},
{
"name": "山西省",
"key": 14,
"group": "S"
},
{
"name": "内蒙古自治区",
"key": 15,
"group": "N"
},
{
"name": "辽宁省",
"key": 21,
"group": "L"
},
{
"name": "吉林省",
"key": 22,
"group": "J"
},
{
"name": "黑龙江省",
"key": 23,
"group": "H"
},
{
"name": "上海市",
"key": 31,
"group": "S"
},
{
"name": "江苏省",
"key": 32,
"group": "J"
},
{
"name": "浙江省",
"key": 33,
"group": "Z"
},
{
"name": "安徽省",
"key": 34,
"group": "A"
},
{
"name": "福建省",
"key": 35,
"group": "F"
},
{
"name": "江西省",
"key": 36,
"group": "J"
},
{
"name": "山东省",
"key": 37,
"group": "S"
},
{
"name": "河南省",
"key": 41,
"group": "H"
},
{
"name": "湖北省",
"key": 42,
"group": "H"
},
{
"name": "湖南省",
"key": 43,
"group": "H"
},
{
"name": "广东省",
"key": 44,
"group": "G"
},
{
"name": "广西壮族自治区",
"key": 45,
"group": "G"
},
{
"name": "海南省",
"key": 46,
"group": "H"
},
{
"name": "重庆市",
"key": 50,
"group": "C"
},
{
"name": "四川省",
"key": 51,
"group": "S"
},
{
"name": "贵州省",
"key": 52,
"group": "G"
},
{
"name": "云南省",
"key": 53,
"group": "Y"
},
{
"name": "西藏自治区",
"key": 54,
"group": "X"
},
{
"name": "陕西省",
"key": 61,
"group": "S"
},
{
"name": "甘肃省",
"key": 62,
"group": "G"
},
{
"name": "青海省",
"key": 63,
"group": "Q"
},
{
"name": "宁夏回族自治区",
"key": 64,
"group": "N"
},
{
"name": "新疆维吾尔自治区",
"key": 65,
"group": "X"
},
{
"name": "台湾省",
"key": 71,
"group": "T"
},
{
"name": "香港特别行政区",
"key": 81,
"group": "X"
},
{
"name": "澳门特别行政区",
"key": 82,
"group": "A"
}
]

城市编码表

https://lbs.amap.com/api/webservice/download

cdn

https://a.amap.com/lbs/static/file/AMap_adcode_citycode.xlsx.zip



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


map & scale bug的更多相关文章

  1. RAD C++Builder xe7 std::map xtree BUG

    c++Builder 6 下的std::map还能用,有代码提示. 换到xe7,代码提示出来就一个tt.operator [](),代码没法往下写了. 最后把Target Platforms切换到64 ...

  2. 在mpvue中使用map如何避坑

    最近在做一个需求,当用户放大地图到某个级别时,自动显示marker的callout标签,当小于这个缩放级别时,则隐藏callout.然而在我实现的过程中,却发现一个严重的问题:当我操作marker数据 ...

  3. ArcGIS Google Map 增加虚拟图层(MapImageLayer)(转载)

    <?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...

  4. 微信小程序 - 多地点标识(map)

    演示如下: wxml <map id="map" scale="{{scale}}" controls="{{controls}}" ...

  5. 小程序map地图多点定位

    最近需求有一个类似共享单车查看附近单车的功能,看了看小程序map api对多点定位显示描述的不怎么清晰.显示定位数组添加多个时就不显示了.踩了几个坑写了几个方法.最终弄出来了.有问题建议欢迎留言. h ...

  6. CartO

    Carto documentation The following is a list of properties provided in CartoCSS that you can apply to ...

  7. arcmap Command

    The information in this document is useful if you are trying to programmatically find a built-in com ...

  8. GIS理论(墨卡托投影、地理坐标系、地面分辨率、地图比例尺、Bing Maps Tile System)

    [注]原文 http://www.cnblogs.com/beniao/archive/2010/04/18/1714544.html 墨卡托投影(Mercator Projection),又名&qu ...

  9. ArcGIS API for JavaScript 4.0(一)

    原文:ArcGIS API for JavaScript 4.0(一) 最近ArcGIS推出了ArcGIS API for JavaScript 4.0,支持无插件3D显示,而且比较Unity和Sky ...

随机推荐

  1. 圣诞快乐!OIer挂分小技巧

    OIer常犯错误 自己的错误 循环里套return 线段树求和 int 定义,下传 int 定义 cmp<,>号分不清 主观行为举动错误 踢电源线,注意安全(_Destiny) TLE 大 ...

  2. 深入理解java虚拟机,GC参考手册

    深入理解java虚拟机 一.<深入理解Java虚拟机> 1.第2章 Java内存区域与内存溢出异常 2.第3章 垃圾收集器与内存分配策略 3.第4章 虚拟机性能监控与故障处理工具 4.第5 ...

  3. SparkSQL访问Hive源,MySQL源

    SparkSQL访问Hive源,MySQL源 一.SparkSQL访问Hive源 软件环境 SparkSQL命令行模式可以直接连接Hive的 Java程序SparkSQL连接Hive 二.SparkS ...

  4. 将Spring Boot项目运行在Docker上

    将Spring Boot项目运行在Docker上 一.使用Dockerfile构建Docker镜像 1.1Dockerfile常用指令 1.1.1ADD复制文件 1.1.2ARG设置构建参数 1.1. ...

  5. Dos命令思维导图

    通过思维导图的方式,总结常用Dos命令. 各种思维导图下载地址

  6. python--可迭代对象、迭代器和生成器

    迭代器 1.什么是迭代器? 不依赖于索引的取值方式 迭代是一个重复的过程,即每一次重复为一次迭代,并且每次迭代的结果都是下一次迭代的初始值 示例: str1 = 'abcde' count = 0 w ...

  7. Java 复习整理day05

    1 package com.it.demo01_oop; 2 3 import java.util.Arrays; 4 5 /* 6 案例: 演示面向过程和面向对象代码的区别 7 8 面向过程编程思想 ...

  8. 深入Jar包:Gradle构建可执行jar包与访问jar包中文件夹与文件

    前言 Java的跨平台功能听起来很诱人可口,号称"Write Once,Run Everywhere",实际上是"Run Once,Debug Everywh" ...

  9. mac外接键盘HOME,END键问题

    参考: How to Fix the Home and End Buttons for an External Keyboard in Mac mac老用户应该都知道, MAC自带的键盘的 cmd+左 ...

  10. 【uva 1152】4 Values Whose Sum is Zero(算法效率--中途相遇法+Hash或STL库)

    题意:给定4个N元素几个A,B,C,D,要求分别从中选取一个元素a,b,c,d使得a+b+c+d=0.问有多少种选法.(N≤4000,D≤2^28) 解法:首先我们从最直接最暴力的方法开始思考:四重循 ...