Map 在墨卡托地图上绘制飞行路线如何计算具有给定经度的多段线点
我想在墨卡托地图上画两个城市之间的多段线。e、 g起点:Map 在墨卡托地图上绘制飞行路线如何计算具有给定经度的多段线点,map,latitude-longitude,mercator,Map,Latitude Longitude,Mercator,我想在墨卡托地图上画两个城市之间的多段线。e、 g起点: Location berlin = new Location(52.517, 13.40); Location tokio = new Location(35.70,139.767); 它应该看起来像一条飞行路线 所以我的计划是通过两个城市之间的所有经度值,计算出相应的纬度值: LocationCollection locationCollection = new LocationCollection(); Location ne
Location berlin = new Location(52.517, 13.40);
Location tokio = new Location(35.70,139.767);
它应该看起来像一条飞行路线
所以我的计划是通过两个城市之间的所有经度值,计算出相应的纬度值:
LocationCollection locationCollection = new LocationCollection();
Location next = new Location(berlin.Latitude,berlin.Longitude); //startpunkt
for (double x = berlin.Longitude+1; x < tokio.Longitude; x++) {
locationCollection.Add(next);
next = new Location(???, x);
}
LocationCollection LocationCollection=new LocationCollection();
下一个位置=新位置(柏林。纬度,柏林。经度)//起始点
对于(双x=柏林经度+1;x<东京经度;x++){
locationCollection.Add(下一步);
下一步=新位置(???,x);
}
问题是如何计算多段线的每个经度值的纬度?
谢谢 来自:
这里有一个C语言的实现
#define PI 3.14159265358979323846
double degrees_radians(double d) { return d * PI / 180.0; }
double radians_degrees(double r) { return r * 180.0 / PI; }
double latitude(double lat1, double lon1, double lat2, double lon2, double lon)
{
return atan((sin(lat1)*cos(lat2)*sin(lon-lon2)-sin(lat2)*cos(lat1)*sin(lon-lon1))/(cos(lat1)*cos(lat2)*sin(lon1-lon2)));
}
int main()
{
// start and end in degrees
double lat1_d = 52.517;
double lon1_d = 13.40;
double lat2_d = 35.70;
double lon2_d = 139.767;
// start and end in radians
double lat1_r = degrees_radians(lat1_d);
double lon1_r = degrees_radians(lon1_d);
double lat2_r = degrees_radians(lat2_d);
double lon2_r = degrees_radians(lon2_d);
// interpolate latitide at every degree of longitude between 1 and 2
for (double lon = ceil(lon1_d); lon < lon2_d; lon += 1.0)
{
double lat_r = latitude(lat1_r, lon1_r, lat2_r, lon2_r, degrees_radians(lon));
double lat_d = radians_degrees(lat_r);
printf("%.3f , %.3f\n", lat_d, lon);
}
return 0;
}
#定义PI 3.14159265358979323846
双度弧度(双d){返回d*PI/180.0;}
双弧度(双r){返回r*180.0/PI;}
双纬度(双lat1、双lon1、双lat2、双lon2、双lon)
{
返回atan((sin(lat1)*cos(lat2)*sin(lon-lon2)-sin(lat2)*cos(lat1)*sin(lon-lon1))/(cos(lat1)*cos(lat2)*sin(lon1-lon2));
}
int main()
{
//以度开始和结束
双lat1_d=52.517;
双lon1_d=13.40;
双lat2_d=35.70;
双lon2_d=139.767;
//以弧度开始和结束
双lat1_r=度_弧度(lat1_d);
双lon1_r=度弧度(lon1_d);
双lat2_r=度_弧度(lat2_d);
双lon2_r=度弧度(lon2_d);
//在1和2之间的每个经度处插入纬度
对于(双lon=ceil(lon1_d);lon
柏林和东京之间的大圈上的最大纬度显示为66.183°,经度为68°。这是一个数学问题。y-y1=k(x-x1)将是您的起点@HampusBrynolf笛卡尔直线插值不适用于角地理坐标。true已尝试将笛卡尔直线上的所有点转换为极坐标,但结果也是一条直线。(就我记忆所及)我想在地图上画一条黄线: