距离可以用r*arccos[cos(y1)*cos(y2)*cos(x1x2)+sin(y1)*sin(y2)]来算
10多年的丰泽网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。营销型网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整丰泽建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联从事“丰泽网站设计”,“丰泽网站推广”以来,每个客户项目都认真落实执行。
r是地球半径6370km,x是经度,y是纬度
注意角度单位的转换。Math类里的sin和cos函数的参数是以弧度为单位的角度,所以x1、x2、y1、y2要用弧度表示,但一般经纬度都是用角度表示(如X1=120 东经120度)就要化成弧度(x1*Pi/180)
而acos函数返回值正好是以弧度为单位的,刚好符合要求
如果你的代码里的lat1、lat2、lon1、lon2单位是角度,可以这么改
double radius=6371000;
double distance=radius*Math.acos((Math.cos(lat2*Math.PI/180)*Math.cos(lat2*Math.PI/180)*Math.cos(lon1*Math.PI/180-lon2*Math.PI/180)+Math.sin(lat1*Math.PI/180)*Math.sin(lat2*Math.PI/180)));
我算出来是903.9千米
两维空间里,两点间的距离公式是L = sqrt((x1-x2)^2+(y1-y2)^2);
多维空间的公式照推。
假设文件中数据如下:
3
2,5,6
6,8,5
则对应的代码如下:
BufferedReader reader = new BufferedReader(new FileReader("C:/test.txt"));
//获取维数
String s1 = reader.readLine();
num = Integer.parseInt(s1);
//获取第一个坐标的信息,将其坐标信息保存在数组中
String s2 = reader.readLine();
String[]str2 = s2.split(",");
int p1[] =new int[num];
for(int i=0;inum;i++) {
p1[i] = Integer.parseInt(str2[i]);
}
//获取第二个坐标的信息,同上,略过
……
//将对应坐标之差保存到另外一个数组
int a []=new int[num];
for(int i = 0;inum;i++)
a[i] = p1[i]-p2[i];
//求这个数组各元素的平方和
int sum = 0;
for(int i=0;inum;i++) {
sum += a[i]*a[i];
}
求距离
int L = Math.sqrt(sum);
以上代码直接在浏览器中完成,可能会有编码问题,楼主细察
package com.example.time.test;
import com.example.time.Utils.DateUtil;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
/*
*@description:
*@author jiafeng
*@date 2019/12/6 0006 14:28
*/
public class brithday {
public static final String DATE_FORMAT = "yyyy-MM-dd";
public static void main(String[] args) {
String brithday = "12-07";
System.out.println(getBrithday(brithday));
}
public static int getBrithday(String brithday){
String dataOne = String.valueOf(getNowYear())+"-"+brithday;
String dataTwo = String.valueOf(getNowYear()+1)+"-"+brithday;
Date birthdayOne = DateUtil.parse(dataOne,DATE_FORMAT);
Date birthdayTwo = DateUtil.parse(dataTwo,DATE_FORMAT);
int n = 0;
if (birthdayOne.before(new Date())){
n = getIntervalDay(new Date(),birthdayTwo);
}else {
n = getIntervalDay(new Date(),birthdayOne);
}
return n;
}
/**
* 获取今年是哪一年
* @return
*/
public static Integer getNowYear(){
Date date = new Date();
GregorianCalendar gc=(GregorianCalendar) Calendar.getInstance();
gc.setTime(date);
return Integer.valueOf(gc.get(1));
}
/**
* 获取两个日期之间间隔的天数
* @author sunyy
* @return
*/
public static int getIntervalDay(Date start_date, Date end_date) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
start_date = sdf.parse(sdf.format(start_date));
end_date = sdf.parse(sdf.format(end_date));
} catch (ParseException e) {
e.printStackTrace();
}
Calendar cal = Calendar.getInstance();
cal.setTime(start_date);
long time1 = cal.getTimeInMillis();
cal.setTime(end_date);
long time2 = cal.getTimeInMillis();
long between_days = (time2-time1)/(1000*3600*24);
return Integer.parseInt(String.valueOf(between_days));
}
}
思路是:通过传入地址作为参数拼接url调用百度地图,然后解析返回的页面,提取经纬度坐标。以下为具体步骤1、修改excel表中的属性名(方便后面用查询读取)然后倒入到数据库。2、代码实现
int x1 = 0, y1 = 0;
int x2 = 1, y2 = 1;
double d = Math.sqrt(Math.pow((x1 - x2), 2) + Math.pow((y1 - y2), 2));
System.out.println(d);
import java.util.Scanner;
public class Demo
{
public static void main(String[] args)
{
Scanner sc=new Scanner(System.in);
Point p1,p2;
System.out.println("请输入第1个点的x、y坐标:");
p1=new Point(sc.nextDouble(),sc.nextDouble());
System.out.println("请输入第2个点的x、y坐标:");
p2=new Point(sc.nextDouble(),sc.nextDouble());
System.out.println("点"+p1+"与点"+p2+"的距离是"+p1.distance(p2));
}
}
class Point
{
Point(double x,double y)
{
this.x=x;
this.y=y;
}
public String toString()
{
return "("+x+","+y+")";
}
double distance(Point p)
{
return Math.sqrt(Math.pow(this.x-p.x,2)+Math.pow(this.y-p.y,2));
}
private double x,y;
}
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款