距離可以用r*arccos[cos(y1)*cos(y2)*cos(x1x2)+sin(y1)*sin(y2)]來(lái)算
10多年的豐澤網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷(xiāo)型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶(hù)設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整豐澤建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。成都創(chuàng)新互聯(lián)從事“豐澤網(wǎng)站設(shè)計(jì)”,“豐澤網(wǎng)站推廣”以來(lái),每個(gè)客戶(hù)項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
r是地球半徑6370km,x是經(jīng)度,y是緯度
注意角度單位的轉(zhuǎn)換。Math類(lèi)里的sin和cos函數(shù)的參數(shù)是以弧度為單位的角度,所以x1、x2、y1、y2要用弧度表示,但一般經(jīng)緯度都是用角度表示(如X1=120 東經(jīng)120度)就要化成弧度(x1*Pi/180)
而acos函數(shù)返回值正好是以弧度為單位的,剛好符合要求
如果你的代碼里的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)));
我算出來(lái)是903.9千米
兩維空間里,兩點(diǎn)間的距離公式是L = sqrt((x1-x2)^2+(y1-y2)^2);
多維空間的公式照推。
假設(shè)文件中數(shù)據(jù)如下:
3
2,5,6
6,8,5
則對(duì)應(yīng)的代碼如下:
BufferedReader reader = new BufferedReader(new FileReader("C:/test.txt"));
//獲取維數(shù)
String s1 = reader.readLine();
num = Integer.parseInt(s1);
//獲取第一個(gè)坐標(biāo)的信息,將其坐標(biāo)信息保存在數(shù)組中
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]);
}
//獲取第二個(gè)坐標(biāo)的信息,同上,略過(guò)
……
//將對(duì)應(yīng)坐標(biāo)之差保存到另外一個(gè)數(shù)組
int a []=new int[num];
for(int i = 0;inum;i++)
a[i] = p1[i]-p2[i];
//求這個(gè)數(shù)組各元素的平方和
int sum = 0;
for(int i=0;inum;i++) {
sum += a[i]*a[i];
}
求距離
int L = Math.sqrt(sum);
以上代碼直接在瀏覽器中完成,可能會(huì)有編碼問(wèn)題,樓主細(xì)察
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));
}
/**
* 獲取兩個(gè)日期之間間隔的天數(shù)
* @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));
}
}
思路是:通過(guò)傳入地址作為參數(shù)拼接url調(diào)用百度地圖,然后解析返回的頁(yè)面,提取經(jīng)緯度坐標(biāo)。以下為具體步驟1、修改excel表中的屬性名(方便后面用查詢(xún)讀?。┤缓蟮谷氲綌?shù)據(jù)庫(kù)。2、代碼實(shí)現(xiàn)
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("請(qǐng)輸入第1個(gè)點(diǎn)的x、y坐標(biāo):");
p1=new Point(sc.nextDouble(),sc.nextDouble());
System.out.println("請(qǐng)輸入第2個(gè)點(diǎn)的x、y坐標(biāo):");
p2=new Point(sc.nextDouble(),sc.nextDouble());
System.out.println("點(diǎn)"+p1+"與點(diǎn)"+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;
}