水位时态数据在地图上的动态展示

水位时态数据在地图上的动态展示

需求

如何在地图上动态展示水位随时间变化,并且用不同颜色表示该点的水位量,今天介绍如何通过Python来实现这个目标。

去看原文

数据

数据主要是某城市的每天的水位量,包含4个字段:日期、水位量、经度、纬度。(所有数据都经过处理,非原始数据)。

在这里插入图片描述

实现

#Python

#coding=utf-8
import shapefile
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from matplotlib.patches import Polygon
from matplotlib.collections import PatchCollection
from matplotlib.cm import get_cmap
import numpy as np
import pandas as pd
import math
import sys
import PlotUtil

# 画底图
def initFunc(handle):
  #   -- input --
  sf = shapefile.Reader("yc_shp/HBcities")
  shapes = sf.shapes()
  Nshp = len(shapes)

  # 获得颜色条
  cm = get_cmap('Dark2')
  cccol = cm(1.* np.arange(Nshp) / Nshp)

  #   -- plot --
  for nshp in xrange(Nshp):
    ptchs = []
    pts = np.array(shapes[nshp].points) # 该矢量对象所有的点集合

    prt = shapes[nshp].parts # 返回这个组合的多个部分的第一个点对应的index

    par = list(prt) + [pts.shape[0]]

    for pij in xrange(len(prt)):
       ptchs.append(Polygon(pts[par[pij]:par[pij+1]])) # 第pij个部分
    handle.add_collection(PatchCollection(ptchs, facecolor = cccol[nshp,:], edgecolor = 'k', linewidths=.1))
  handle.autoscale_view()

def main():
  water = pd.read_excel("waterlevel.xlsx")
  water.sort_values(by = ["date"], inplace = True) # 按时间排序
  water = water.round({'water': 2})
  max_water_level = math.ceil(water["water"].max()) + 1
  min_water_level = math.floor(water["water"].min()) - 1

  datas = []
  for index, row in water.iterrows():
    datas.append([row["lat"], row["lnt"], row["water"]])
    # datas.append([4582867, 3277697, row["water"]])

  datas = np.array(datas)
  plotF = PlotUtil.Plot(initFunc, datas)
  plotF.setColorBox([min_water_level, max_water_level])
  plotF.showGif("test.gif")

if __name__ == '__main__':
  main()

结果

在这里插入图片描述
原文有源码,更多内容,请关注地学数据处理分析。
在这里插入图片描述

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值