map & scale bug
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的更多相关文章
- RAD C++Builder xe7 std::map xtree BUG
c++Builder 6 下的std::map还能用,有代码提示. 换到xe7,代码提示出来就一个tt.operator [](),代码没法往下写了. 最后把Target Platforms切换到64 ...
- 在mpvue中使用map如何避坑
最近在做一个需求,当用户放大地图到某个级别时,自动显示marker的callout标签,当小于这个缩放级别时,则隐藏callout.然而在我实现的过程中,却发现一个严重的问题:当我操作marker数据 ...
- ArcGIS Google Map 增加虚拟图层(MapImageLayer)(转载)
<?xml version="1.0" encoding="utf-8"?> <s:Application xmlns:fx="ht ...
- 微信小程序 - 多地点标识(map)
演示如下: wxml <map id="map" scale="{{scale}}" controls="{{controls}}" ...
- 小程序map地图多点定位
最近需求有一个类似共享单车查看附近单车的功能,看了看小程序map api对多点定位显示描述的不怎么清晰.显示定位数组添加多个时就不显示了.踩了几个坑写了几个方法.最终弄出来了.有问题建议欢迎留言. h ...
- CartO
Carto documentation The following is a list of properties provided in CartoCSS that you can apply to ...
- arcmap Command
The information in this document is useful if you are trying to programmatically find a built-in com ...
- GIS理论(墨卡托投影、地理坐标系、地面分辨率、地图比例尺、Bing Maps Tile System)
[注]原文 http://www.cnblogs.com/beniao/archive/2010/04/18/1714544.html 墨卡托投影(Mercator Projection),又名&qu ...
- ArcGIS API for JavaScript 4.0(一)
原文:ArcGIS API for JavaScript 4.0(一) 最近ArcGIS推出了ArcGIS API for JavaScript 4.0,支持无插件3D显示,而且比较Unity和Sky ...
随机推荐
- 圣诞快乐!OIer挂分小技巧
OIer常犯错误 自己的错误 循环里套return 线段树求和 int 定义,下传 int 定义 cmp<,>号分不清 主观行为举动错误 踢电源线,注意安全(_Destiny) TLE 大 ...
- 深入理解java虚拟机,GC参考手册
深入理解java虚拟机 一.<深入理解Java虚拟机> 1.第2章 Java内存区域与内存溢出异常 2.第3章 垃圾收集器与内存分配策略 3.第4章 虚拟机性能监控与故障处理工具 4.第5 ...
- SparkSQL访问Hive源,MySQL源
SparkSQL访问Hive源,MySQL源 一.SparkSQL访问Hive源 软件环境 SparkSQL命令行模式可以直接连接Hive的 Java程序SparkSQL连接Hive 二.SparkS ...
- 将Spring Boot项目运行在Docker上
将Spring Boot项目运行在Docker上 一.使用Dockerfile构建Docker镜像 1.1Dockerfile常用指令 1.1.1ADD复制文件 1.1.2ARG设置构建参数 1.1. ...
- Dos命令思维导图
通过思维导图的方式,总结常用Dos命令. 各种思维导图下载地址
- python--可迭代对象、迭代器和生成器
迭代器 1.什么是迭代器? 不依赖于索引的取值方式 迭代是一个重复的过程,即每一次重复为一次迭代,并且每次迭代的结果都是下一次迭代的初始值 示例: str1 = 'abcde' count = 0 w ...
- Java 复习整理day05
1 package com.it.demo01_oop; 2 3 import java.util.Arrays; 4 5 /* 6 案例: 演示面向过程和面向对象代码的区别 7 8 面向过程编程思想 ...
- 深入Jar包:Gradle构建可执行jar包与访问jar包中文件夹与文件
前言 Java的跨平台功能听起来很诱人可口,号称"Write Once,Run Everywhere",实际上是"Run Once,Debug Everywh" ...
- mac外接键盘HOME,END键问题
参考: How to Fix the Home and End Buttons for an External Keyboard in Mac mac老用户应该都知道, MAC自带的键盘的 cmd+左 ...
- 【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) 解法:首先我们从最直接最暴力的方法开始思考:四重循 ...