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 ...
随机推荐
- LOJ10090
题目描述 原题来自:USACO 2005 Dec. Gold FJ 有 n 头奶牛(2<=n<=1000) ,编号为1..n .奶牛们将按照编号顺序排成一列队伍(可能有多头奶牛在同一位置上 ...
- MySQL下载地址与Centos7安装MySQL以及启动问题排查
目录 一.MySQL国内镜像下载 二.国内镜像相关站点 三.Centos7安装MySQL5.7 1. 下载并解压至/usr/local 2. 配置信息 3. 用户及用户组管理(提高安全) 4. 初始化 ...
- vue项目在IE下报 [vuex] vuex requires a Promise polyfill in this browser错误
ie浏览器下报错 vue刚搭建的项目,在谷歌浏览器能够正常访问,但是在ie11等ie浏览器下无法显示页面,打开控制台查看无报错信息,打开仿真一栏,提示[vuex] vuex requires a Pr ...
- 通过jenkins构建服务,并发布服务,修改Jenkins以Root用户运行
通过jenkins构建服务,并发布服务,修改Jenkins以Root用户运行 其他博文:从0到1体验Jenkins+Docker+Git+Registry实现CI自动化发布 Jenkins注册中心 一 ...
- Poem 01(转)
Dear Sunshine The way you glow through my blinds in the morning. It makes me feel like you missed me ...
- python模块----configpaser (key:value型 配置文件解析器)
configparser是用来读取配置文件的包,配置文件的格式类似:[section]+内容(键=值) 标准库网址:https://docs.python.org/3/library/configpa ...
- python里正则表达式基础及注意事项
感觉正则匹配是一件很酷的事,用得好的话可以极大地提高编程效率.虽然在html中BeautifulSoup更好用一些,但有时候还是需要使用正则匹配.所以就此做一些学习和使用过程中的笔记. python有 ...
- Python3.9.1中如何使用split()方法?
本文出自:lunvey,半路出家学编程之Python.split()方法定义于str类中,str类大家都知道是python内置定义的一个字符串类. split()默认两个参数,分别是分隔符和分隔数量, ...
- js实现购物车左滑删除
使用 js 和jquery动画实现购物车左滑,请引入jquery库,不然会报错哦! 首页编写页面,注意布局,滑动分成两部分,商品图片和信息放在一个布局,删除和移入收藏放在一起. 其中js用到了 tou ...
- 2017-2018 ACM-ICPC German Collegiate Programming Contest (GCPC 2017)(9/11)
$$2017-2018\ ACM-ICPC\ German\ Collegiate\ Programming\ Contest (GCPC 2017)$$ \(A.Drawing\ Borders\) ...