我用Python做设计(二)

2 篇文章 0 订阅
2 篇文章 0 订阅

前言

  上次看着生成的图像,可总是感觉少了什么,对了,是不是少了行政区划图,没有行政区划,难怪看着这么别扭。geoplotlib是支持*.shp格式的文件的,这样的行政区划图,在geoplotlib中只要使用geoplotlib.shapefiles()函数加载就行了,可是我手里面并没有当地区界的shp文件,但是有区界的多段线文件。所以本文的内容就是,怎么用在geoplotlib中怎么自己画图。

数据导出

  不知道是CAD设计不合理,还是我不会总,总感觉,CAD中的【数据提取】功能很不好用,比方说,不能按图层提取,相同类型的数据,总是一次提取一大堆,然后再筛选,拖累速度。所以这次用的是CAD中的LIST命令。用法很简单,选中需要得到坐标的对象,然后输入“list”回车,就行了。
  这里写图片描述
  然后就会出来如下的对话框,这个虽然说对于单个对象来说,比较简单,方便,但是也是感觉很坑的是,输入框中能容纳的内容有限,按几次“ENTER”后,前面的内容就没有,所以只能,隔几次就把数据拷贝出来他出保存,然后继续“ENTER”,直到全部枚举结束。
这里写图片描述
  这里得到的是点的信息,还要把它处理成直线信息,其实就是把得到的数据,复制后,全部上移一位,然后最上面的点,移到最下面,最终处理完成后保存为“.csv”文件保存如下表,包含2组经纬度坐标。
这里写图片描述

数据处理

  下面就开始用geoplatlib来显示了,在geoplatlib中,新增一个图层的方法也很简单,首先,新增加的图层,要继承BaseLayer这个基类,然后再重写其中的部分方法,比如,我们这次要重写invalidate(self, proj)这个方法,这个方法的作用,就是在每次geoplatlib相机高度改变,需要重绘的时候,调用的。
  最终实现的效果如下。
  这里写图片描述
  图中蓝色的线条,就是在新增加的图层上绘制的,不过明显的感觉就是,这样每次切换高程,重新绘制的时后,都感觉要好久,没有直接加载.shp文件的快。
  整个的代码如下,已加入注释。这段代码的主要思路就是,在新增的图层中,用proj.lonlat_to_screen(self.data['lon0'], self.data['lat0']),将经纬坐标转为屏幕坐标,然后用self.painter.lines(x0, y0, x1, y1)绘制线段。

import geoplotlib
from geoplotlib.layers import BaseLayer
from geoplotlib.core import BatchPainter
from geoplotlib.utils import BoundingBox
import numpy as np
import com

class AreaLayer(BaseLayer): #基于BaseLayer创建AreaLayer子类

    def __init__(self, data):
        self.data = data
        self.k = 2

    def invalidate(self, proj): #此函数,会在重新映射坐标的时候调用
        self.painter = BatchPainter()
        x0, y0= proj.lonlat_to_screen(self.data['lon0'], self.data['lat0']) #读取线段的起点坐标数组
        x1, y1= proj.lonlat_to_screen(self.data['lon1'], self.data['lat1']) #读取线段的终点坐标数组
        self.painter.lines(x0, y0, x1, y1) #绘制线段

    def draw(self, proj, mouse_x, mouse_y, ui_manager):
        ui_manager.info('Use left and right to increase/decrease the number of clusters. k = %d' % self.k)
        self.painter.batch_draw()

data = geoplotlib.utils.read_csv('data/lh_area.csv') #读取区界数据
geoplotlib.add_layer(AreaLayer(data)) #加载新继承的AreaLayer图层

geoplotlib.set_smoothing(True)
geoplotlib.set_bbox( com.boundingBoxDefault) #这里是我定义的起始经纬坐标
geoplotlib.show()
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python语言程序设计是一种高级编程语言,常被用于开发各种应用程序。级网盘是一种网络存储服务,它允许用户将文件上传至云端,并能够随时随地访问和分享这些文件。 使用Python语言编写级网盘程序,可以实现以下功能: 1. 用户注册和登录:用户可以注册账号并进行身份验证,以便后续的文件上传和下载操作。 2. 文件上传和下载:用户可以通过网盘将本地文件上传至云端,并能够随时随地下载需要的文件。通过Python的文件操作函数,可以实现文件的读取、写入和删除等功能。 3. 文件共享和权限控制:用户可以选择将文件设置为私有或公开,并可以与其他用户共享文件。可以使用Python的数据库技术,例如SQLite,来存储和管理用户和文件的权限信息。 4. 文件夹管理:用户可以创建文件夹进行文件的分类和组织,可以使用Python的目录操作函数实现文件夹的创建、删除和重命名等功能。 5. 文件搜索:用户可以通过关键词搜索文件,可以使用Python的字符串处理和搜索函数来实现文件搜索的功能。 6. 文件备份和恢复:用户可以选择将某些重要文件进行备份,并能够在需要时进行文件的恢复。可以使用Python的压缩和解压功能,对文件进行备份和恢复操作。 总之,使用Python语言编写级网盘程序可以实现用户文件的管理、共享和备份等功能,为用户提供方便快捷的云端存储服务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值