對此問題的任何幫助將不勝感激,并提前感謝所有幫助。
編輯:
在查看了更多內容后,我嘗試了這篇文章
uj5u.com熱心網友回復:
是的,鏈接中的答案會起作用,但前提是球場上的球門柱正指向南北方向。他們在這兩個鏈接中所做的基本上是縮小 GPS 坐標以適合您的螢屏,因此,只有當球門柱指向東西方向時,如您附加的影像,縮小比例才會起作用。
但在實際資料中,球場可以位于任何角度,可能一個球門柱是NE,另一個是SW。所以為了解決這個問題,也可以使用@Jabbar 的回答。
uj5u.com熱心網友回復:
首先,是的,如果 GPS 坐標準確,您可以高精度地執行此操作。
其次,主要問題是旋轉,如果場地是直的,有 lat lng 線,這將很容易和直接(沒有包子的意思)。
簡單的方法是將坐標轉換為類似于真實場的旋轉影像,然后將每個 X、Y 點旋轉到新的直線影像。(見下圖)

這是知道天使如何旋轉 x,y 的方法:
double x,y;
double newX,newY;
double angle;
//Test values:
x=1;
y=1;
angle = 45;
double rad = angle*M_PI/180;
newX = x * cos(rad) - y * sin(rad);
newY = y * cos(rad) x * sin(rad);
更新
long double lat1,lat2,lng1,lng2; //fill these with GPS coordinates
double x1,x2,y1,y2;//fill these of rectangle coordinate in the image
long double realWidth = distance(lat1, long1,lat2,long1);// distance btween the upper left corner & the upper right corner
long double realHieght = distance(lat1, long1,lat1,long2);// distance btween the upper left corner & the lower left corner
double image1Width = abs(x2-x1);
double image1Hieght = abs(y2-y1);
long double playerLat,playerLng;//fill the player lat lng GPS coordiantes
POINT imagePlayerXY = convertGPS2xy(lat1, lng1, playerLat, playerLng, realWidth, realHieght, image1Width, image1Hieght);
//NOW rotate imagePlayerXY.x & imagePlayerXY.y to the final image
POINT convertGPS2xy(long double latOrigin, long double lngOrigin,long double playerLat, long double playerLng,long double realWidth,long double realHieght, double image1Width,double image1Hieght)
{
double lngRatio2Width = distance(playerLat,playerLng, playerLat,lngOrigin ) / realWidth; //horizantal distance from the player place to rectangle origin (then compute the width ratio)
double lngRatio2Hieght = distance(playerLat,playerLng, latOrigin,playerLng ) / realHieght; //virtical distance from the player place to rectangle origin (then compute the Hieght ratio)
POINT imageXY;
imageXY.x = image1Width * lngRatio2Width;
imageXY.y = image1Hieght * lngRatio2Hieght;
return imageXY;
}
long double distance(long double lat1, long double long1,
long double lat2, long double long2)
{
// Convert the latitudes
// and longitudes
// from degree to radians.
lat1 = toRadians(lat1);
long1 = toRadians(long1);
lat2 = toRadians(lat2);
long2 = toRadians(long2);
// Haversine Formula
long double dlong = long2 - long1;
long double dlat = lat2 - lat1;
long double ans = pow(sin(dlat / 2), 2)
cos(lat1) * cos(lat2) *
pow(sin(dlong / 2), 2);
ans = 2 * asin(sqrt(ans));
// Radius of Earth in
// Kilometers, R = 6371
// Use R = 3956 for miles
long double R = 6371;
// Calculate the result
ans = ans * R;
return ans;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/410942.html
標籤:
上一篇:numdifftools.Jacobian的時間分量不應為零
下一篇:超出自簽名證書路徑約束
