第一,先定一个一个pojo。就是一个对象,对象里有 id  经度lag  维度lat

public class Company {

private int id;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public Double getLat() {

return lat;

}

public void setLat(Double lat) {

this.lat = lat;

}

public Double getLag() {

return Lag;

}

public void setLag(Double lag) {

Lag = lag;

}

private Double lat;

private Double Lag;

}

第二:写一个方法,判断该项目的坐标是不是在,在给定的坐标半径范围内

package cn.searchmap.db;

import java.math.BigDecimal;

public class SearchMapService {/**

* @param lat

* 纬度

* @param lag

* 经度

* @param r

* 半径

* @return Boolean

*/

public static Boolean check(Company company, Double lat, Double lag,

Integer r) {

double R = 6371;// 地球半径

double distance = 0.0;

double dLat = Double.valueOf(new BigDecimal(String.valueOf((company

.getLat() - lat)))

.multiply(new BigDecimal(String.valueOf(Math.PI)))

.divide(new BigDecimal(String.valueOf(180)), DEFAULT_DIV_SCALE,

BigDecimal.ROUND_HALF_EVEN).toString());

double dLon = Double.valueOf(new BigDecimal(String.valueOf((company

.getLag() - lag)))

.multiply(new BigDecimal(String.valueOf(Math.PI)))

.divide(new BigDecimal(String.valueOf(180)), DEFAULT_DIV_SCALE,

BigDecimal.ROUND_HALF_EVEN).toString());

double a = Math.sin(dLat / 2) * Math.sin(dLat / 2)

+ Math.cos(company.getLat() * Math.PI / 180)

* Math.cos(lat * Math.PI / 180) * Math.sin(dLon / 2)

* Math.sin(dLon / 2);

distance = (2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))) * R * 1000;

System.out.println(distance);

if (distance > Double.valueOf(String.valueOf(r))) {

return false;

}

return true;

}

第三:在使用端调用该方法:通过boolean值去判断在不在:

//建一个company对象 给赋值

// 以南宁市中心朝阳广场5000m内22.82515108.327743 5000是半径哦

boolean isok = SearchMapService.check(你的company对象, 22.82515,

108.327743, 5000);

if (isok) {

Log.e("haha", "亲你在指定的范围内哦");

//把该项目绘制在地图上。亲,大家懂了吧!如有不懂,欢迎骚扰!

}else {

Log.e("haha", "亲,你被抛弃了,不在指定的范围内");

}

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐