2013-10-23 126 views
0

我有從Northing(X),Easting(y)和Elevation(z)數據創建的表面地圖。我想圍繞特定半徑的特定點(例如400米)繪製一個圓。該圓必須顯示在地圖上。以下是我創建表面貼圖的代碼。任何幫助將不勝感激。在地圖上繪製圓圖Matlab

% load the map data 
x = elevgrid(:,4); % northing 
y = elevgrid(:,5); % easting 
z = elevgrid(:,3); % elevation 
% Put data onto a grid 
[qx,qy] = meshgrid(linspace(min(x),max(x)),linspace(min(y),max(y))); 
F = TriScatteredInterp(x,y,z); 
qz = F(qx,qy); 
% plot in matrix form 
surf(qx,qy,qz) 

編輯 Here是樣本數據的文本文件的鏈接 - 格式爲經度,latitiude,海拔。

+1

u能提供'elevgrid'例如數據? – Marcin

+0

我已經添加了示例數據的鏈接。 – user1854628

回答

0

你應該可以很容易地用plot3做到這一點。請參閱下面的代碼,瞭解您的發佈代碼的修改版本。

我不確定您的示例數據是如何表示的(爲避免將來出現問題,請嘗試將您的問題簡化爲僅包含輸入的基本要素)。

clear;clc 
% create data 
xy = -2.5 + 5*gallery('uniformdata',[200 2],0); 
x = xy(:,1); 
y = xy(:,2); 
z = x.*exp(-x.^2-y.^2); 

% Put data onto a grid 
[qx,qy] = meshgrid(linspace(min(x),max(x)),linspace(min(y),max(y))); 
F = scatteredInterpolant(x,y,z); 
qz = F(qx,qy); 
% plot in matrix form 
mesh(qx,qy,qz) 

% Plot circle 
hold on 
r = 0.6; 
xp = 0.4; 
yp = -1.2; 
t = linspace(0,2*pi); 
Xp = r*sin(t)+xp; 
Yp = r*cos(t)+yp; 
plot3(Xp,Yp,F(Xp,Yp)) 
hold off 

BR馬格努斯

+0

雖然看起來不是100%專業,但確實有效。我附帶的csv文件是1米分辨率的緯度,經度和海拔高度coorindates。當我在曲面圖上繪製圓時,曲線不會在曲面上顯示100%。無論是更改線寬,陰影還是關閉網格都無關緊要。我附上了一個我在這裏討論的例子:https://drive.google.com/file/d/0B9EIozHd9086WlYtYWxQczlINXM/edit?usp=sharing – user1854628

+0

我的電腦被盜了,所以我的答案會延遲幾周。希望你找到一些解決方案,或者稍後再看看。建議:添加一個常數z值,即Plot3(Xp,Yp,F(Xp,Yp)+10)根據數據的平滑程度,您也可以在吊環上使用非偶然過濾器(加權平均值)。 – vindarmagnus