Python坐标线性插值应用实现

一、背景

在野外布设700米的测线,点距为10米,用GPS每隔50米测量一个坐标,再把测线的头和为测量一个坐标。现在需使用线性插值的方法求取每两个坐标之间的其他4个点的值。

二、插值原理

使用等比插值的方法

起始值为 a

终止值为 b

步长值为 (a-b)/5

后面的数分别为 a+n, a+2n, a+3n, a+4n

三、代码实习对 x 插值

interx.py

import numpy as np
f = np.loadtxt('datax.txt')
a = f[:, 0]
b = f[:, 1]
for j in np.arange(len(a)):
	aa = a[j]*1000	# np.arrange()会自动去掉小数
	bb = b[j]*1000
	n = (bb-aa) / 5
	x = np.arange(6)
	x[0] = aa
	print(x[0]/1000)
	for i in range(1, 5, 1):
		x[i] = x[i-1]+n
		print(x[i]/1000)
		i = i+1
	# print(bb/1000)
	# print("\n")

datax.txt

514873.536 	514883.939
514883.939 	514894.358
514894.358 	514903.837
514903.837 	514903.807
514903.807 	514907.179
514907.179 	514911.356
514911.356 	514913.448
514913.448 	514913.315
514913.315 	514917.344
514917.344 	514923.684
514923.684 	514924.801
514924.801	514929.697
514929.697 	514916.274

对 y 插值

intery.py

import numpy as np
f = np.loadtxt('datay.txt')
a = f[:, 0]
b = f[:, 1]
for j in np.arange(len(a)):
	aa = (a[j] - 2820000)*1000	# 数据太长会溢出
	bb = (b[j]-2820000)*1000
	n = (bb-aa) / 5
	x = np.arange(6)
	x[0] = aa
	print(x[0]/1000+2820000)
	for i in range(1, 5, 1):
		x[i] = x[i-1]+n
		print(x[i]/1000+2820000)
		i = i+1
	# print(bb/1000)
	# print("\n")

datay.txt

2820617.820 	2820660.225
2820660.225 	2820693.988
2820693.988 	2820819.199
2820819.199 	2820831.510
2820831.510 	2820858.666
2820858.666 	2820973.487
2820973.487 	2821017.243
2821017.243 	2821019.518
2821019.518 	2821058.223
2821058.223 	2821097.575
2821097.575 	2821144.436
2821144.436 	2821173.356
2821173.356 	2821218.889 

四、最终成果

手动把两次插值结果复制到dataxy中

dataxy.txt

514873.536 	2820617.819
514875.616 	2820626.300
514877.696 	2820634.781
514879.776 	2820643.262
514881.856 	2820651.743
514883.939 	2820660.225
514886.022 	2820666.977
514888.105 	2820673.729
514890.188 	2820680.481
514892.271 	2820687.233
514894.358 	2820693.987
514896.253 	2820719.029
514898.148 	2820744.071
514900.043 	2820769.113
514901.938 	2820794.155
514903.837 	2820819.199
514903.831 	2820821.661
514903.825 	2820824.123
514903.819 	2820826.585
514903.813 	2820829.047
514903.807 	2820831.509
514904.481 	2820836.940
514905.155 	2820842.371
514905.829 	2820847.802
514906.503 	2820853.233
514907.179 	2820858.666
514908.014 	2820881.630
514908.849 	2820904.594
514909.684 	2820927.558
514910.519 	2820950.522
514911.356 	2820973.487
514911.774 	2820982.238
514912.192 	2820990.989
514912.610 	2820999.740
514913.028 	2821008.491
514913.448 	2821017.242
514913.421 	2821017.697
514913.394 	2821018.152
514913.367 	2821018.607
514913.340 	2821019.062
514913.315 	2821019.518
514914.120 	2821027.259
514914.925 	2821035.000
514915.730 	2821042.741
514916.535 	2821050.482
514917.344 	2821058.223
514918.612 	2821066.093
514919.880 	2821073.963
514921.148 	2821081.833
514922.416 	2821089.703
514923.684 	2821097.575
514923.907 	2821106.947
514924.130 	2821116.319
514924.353 	2821125.691
514924.576 	2821135.063
514924.801 	2821144.436
514925.780 	2821150.219
514926.759 	2821156.002
514927.738 	2821161.785
514928.717 	2821167.568
514929.697 	2821173.356
514927.012 	2821182.462
514924.327 	2821191.568
514921.642 	2821200.674
514918.957 	2821209.780 

五、画图对比

dataxy.py

import numpy as np
import matplotlib as mpl
from matplotlib import pyplot as plt
# 解决中文字体显示不出来
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"] = False

a = np.loadtxt("datax.txt")
b = np.loadtxt('datay.txt')
c = np.loadtxt('dataxy.txt')
x = a[: ,0]
y = b[: ,0]
xx = c[:,0]
yy = c[:,1]
plt.plot(x,y,color = 'orange',
		label = '插值线段')
plt.scatter(xx,yy,marker='o',
	c = 'deepskyblue',
	alpha = 0.6,
	label = '实测点位')
plt.legend()
plt.title('Python坐标插值')
plt.grid()
# 保存高清图片,dpi表示分辨率
plt.savefig('out.png',dpi = 600)
plt.show()

文件结构

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Python实现分段线性插值

    本文实例为大家分享了Python实现分段线性插值的具体代码,供大家参考,具体内容如下 函数: 算法 这个算法不算难.甚至可以说是非常简陋.但是在代码实现上却比之前的稍微麻烦点.主要体现在分段上. 图像效果 代码 import numpy as np from sympy import * import matplotlib.pyplot as plt def f(x): return 1 / (1 + x ** 2) def cal(begin, end): by = f(begin) ey =

  • Python坐标线性插值应用实现

    一.背景 在野外布设700米的测线,点距为10米,用GPS每隔50米测量一个坐标,再把测线的头和为测量一个坐标.现在需使用线性插值的方法求取每两个坐标之间的其他4个点的值. 二.插值原理 使用等比插值的方法 起始值为 a 终止值为 b 步长值为 (a-b)/5 后面的数分别为 a+n, a+2n, a+3n, a+4n 三.代码实习对 x 插值 interx.py import numpy as np f = np.loadtxt('datax.txt') a = f[:, 0] b = f[:

  • python实现线性插值的示例

    目录 线性插值 python实现线性插值 numpy.interp scipy.interpolate.interp1d 线性插值 插值:是根据已知的数据序列(可以理解为你坐标中一系列离散的点),找到其中的规律,然后根据找到的这个规律,来对其中尚未有数据记录的点进行数值估计.线性插值:是针对一维数据的插值方法.它根据一维数据序列中需要插值的点的左右临近两个数据来进行数值估计.当然了它不是求这两个点数据大小的平均值(在中心点的时候就等于平均值).而是根据到这两个点的距离来分配比重的. python

  • Python实现线性插值和三次样条插值的示例代码

    (1).函数 y = sin(x) (2).数据准备 #数据准备 X=np.arange(-np.pi,np.pi,1) #定义样本点X,从-pi到pi每次间隔1 Y= np.sin(X)#定义样本点Y,形成sin函数 new_x=np.arange(-np.pi,np.pi,0.1) #定义差值点 (3).样条插值 #进行样条差值 import scipy.interpolate as spi #进行一阶样条插值 ipo1=spi.splrep(X,Y,k=1) #样本点导入,生成参数 iy1

  • 用python绘制极坐标雷达图

    目录 综述 绘图代码和解析 绘制一张多主体雷达图 绘制多张单主体雷达图 总结 综述 python的matplotlib画图库的功能非常强大,可以画很多很多种图,我们日常生活中遇到的雷达图也不例外. 雷达图也被称为网络图,蜘蛛图,星图等,是一个不规则的多边形.雷达图可以形象地展示相同事物的多维指标,应用场景非常多,比如本篇博客中,用来展示球员的不同能力的区别. matplotlib库中的雷达图绘制是基于极坐标的,因此所有的数据和标签都要根据角度来计算出位置. 本篇博客将详细的解释绘制雷达图过程中的

  • python导入坐标点的具体操作

    小编今天教你们python怎么导入坐标点,解决你在生活中遇到的小问题. 首先下载安装python,打开文本编辑器,将文件保存成 py格式,如果python目录不在usr/bin目录下,则替换成当前python执行程序的目录. 编写完脚本之后注意调试.可以直接用editplus调试.调试方法可自行百度.脚本写完之后,打开CMD命令行,前提是python 已经被加入到环境变量中. 在CMD命令行中,输入 "python" + "空格",即 "python &q

  • python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法

    1. test.txt文件,数据以逗号分割,第一个数据为x坐标,第二个为y坐标,数据如下:1.1,2 2.1,2 3.1,3 4.1,5 40,38 42,41 43,42 2. python部分代码 #!/usr/bin/python # coding: utf-8 import matplotlib.pyplot as plt import numpy as np import matplotlib as mpl mpl.rcParams['font.family'] = 'sans-ser

  • python绘制已知点的坐标的直线实例

    如下所示: import matplotlib.pyplot as plt import numpy as np x = [11422,11360,11312,11274,11233,11196,11160,11129,11098,11038, 10984,10944,10903,10863,10828,10789,10752,10715,10675,10639, 10654,10619,10587,10550,10510,10466,10425,10389,10350,10311, 10272

  • Python+selenium点击网页上指定坐标的实例

    例如有些页面元素很难获取,但是位置很固定,那么可以直接用坐标来进行操作 例如要对页面上的(x:200, y:100)进行操作,可以用如下代码: from selenium import webdriver from selenium.webdriver.common.action_chains import ActionChains dr = webdriver.Chrome() dr.get('http://www.baidu.com') ActionChains(dr).move_by_of

  • python获取点击的坐标画图形的方法

    获取输入的五个点画五边形 def pentagonUpdate(): p = {} win = GraphWin("Click", 800, 300)#后面两个值为窗体的长和宽 for i in range(5): p[i] = win.getMouse() p[i].draw(win) polygon = Polygon(p[0], p[1], p[2], p[3], p[4]) polygon.setFill("peachpuff") polygon.setOu

  • python从list列表中选出一个数和其对应的坐标方法

    例1:给一个列表如下,里面每个元素对应的是x和y的值 a = [[5,2],[6,3],[8,8],[1,3]] 现在要挑出y的值为3对应的x的值,即6和1 import numpy as np a = [[5,2],[6,3],[8,8],[1,3]] #c=np.mat(a),因为只有矩阵(也可以用array)才能用a[0,0]这样的调用 #表示第一个数的用法而list没有,故在最后append需要用到 #注意:array也没有index这样的用法(只有list有,此题a已经是list),

随机推荐