python线性插值_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.801514929.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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值