javascript纬度经度到地球上的xyz位置(threejs)

javascript Latitude Longitude to xyz position on earth (threejs)(javascript纬度经度到地球上的xyz位置(threejs))
本文介绍了javascript纬度经度到地球上的xyz位置(threejs)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我正在玩three.js

im playing arround with three.js

我想在更大的球体上渲染特定地理坐标上的对象,我非常接近解决方案,但我没有从 lat lon 获得正确的 xyz 位置

i want to render objects on specific geocoordinates on a bigger sphere, im pretty near to the solution, but i dont get the correct xyz position from lat lon

我在jsfiddle上设置了一个测试用例,有两个坐标

i have set up a test case on jsfiddle, there are two coordinates

latlons = [[40.7142700,-74.0059700], [52.5243700,13.4105300]];

纽约和柏林

这是我从纬度和半径计算 xyz 的函数

and this is my function to calc xyz from lat lon and radius

function calcPosFromLatLonRad(lat,lon,radius){

// Attempt1
var cosLat = Math.cos(lat * Math.PI / 180.0);
var sinLat = Math.sin(lat * Math.PI / 180.0);
var cosLon = Math.cos(lon * Math.PI / 180.0);
var sinLon = Math.sin(lon * Math.PI / 180.0);
var rad = radius;
y = rad * cosLat * sinLon;
x = rad * cosLat * cosLon;
z = rad * sinLat;

// Attempt2
// x = radius *  Math.sin(lat) * Math.cos(lon)
// y = radius *  Math.sin(lat) * Math.sin(lon)
// z = radius * Math.cos(lat)


// Attempt3
// latitude = lat * Math.PI/180
// longitude = lon * Math.PI/180
// x =  -radius * Math.cos(latitude) * Math.cos(longitude)
// y =  radius * Math.sin(latitude) 
// z =  radius * Math.cos(latitude) * Math.sin(longitude)


// Attempt4
// var phi   = (90-lat)*(Math.PI/180);
// var theta = (lng+180)*(Math.PI/180);
// x = ((rad) * Math.sin(phi)*Math.cos(theta));
// z = ((rad) * Math.sin(phi)*Math.sin(theta));
// y = ((rad) * Math.cos(phi));



   console.log([x,y,z]);
   return [x,y,z];
}

但所有尝试都返回不同的 xy,它们都不正确(z 始终正确).

but all attempts return different xy, and they are all not correct ( z is always correct).

有人可以指导我正确的方式吗?我不知道可能出了什么问题

could someone pleas guide me to the right way ? i have no idea what could be wrong

这就是要玩的小提琴

更新:正在工作的 jsfiddle

推荐答案

不幸的是,我无法进一步解释,但在玩了这个之后,它就像一个魅力:)

unfortunatly i cant further explain, but after playing around this one works like a charme :)

function calcPosFromLatLonRad(lat,lon,radius){
  
    var phi   = (90-lat)*(Math.PI/180);
    var theta = (lon+180)*(Math.PI/180);

    x = -(radius * Math.sin(phi)*Math.cos(theta));
    z = (radius * Math.sin(phi)*Math.sin(theta));
    y = (radius * Math.cos(phi));
  
    return [x,y,z];

}

是的,那很酷,不是吗?而且我仍然对一些更短的方程式感兴趣

yeah thats pretty cool isnt it ? And im still interested into some shorter equation

工作小提琴

这篇关于javascript纬度经度到地球上的xyz位置(threejs)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

SCRIPT5: Access is denied in IE9 on xmlhttprequest(SCRIPT5:在 IE9 中对 xmlhttprequest 的访问被拒绝)
XMLHttpRequest module not defined/found(XMLHttpRequest 模块未定义/未找到)
Show a progress bar for downloading files using XHR2/AJAX(显示使用 XHR2/AJAX 下载文件的进度条)
How can I open a JSON file in JavaScript without jQuery?(如何在没有 jQuery 的情况下在 JavaScript 中打开 JSON 文件?)
quot;Origin null is not allowed by Access-Control-Allow-Originquot; in Chrome. Why?(“Access-Control-Allow-Origin 不允许 Origin null在铬.为什么?)
How to get response url in XMLHttpRequest?(如何在 XMLHttpRequest 中获取响应 url?)