1. android中根据谷歌地图的经纬度怎么计算俩个点之间的直线距离
查询小于 10 公里已内的地图点 SQL 语句
$result = mysql_query ( "SELECT name,longitude,latitude,des FROM location
where type=".$type." and (((longitude - ".$lng.") * (longitude - ".$lng.") + (latitude
- ".$lat.") * (latitude - ".$lat.")) <= (10 / 110) * (10 / 110))");
其中核心部分是 (((longitude - ".$lng.") * (longitude - ".$lng.") + (latitude -
".$lat.") * (latitude - ".$lat.")) <= (10 / 110) * (10 / 110)),$lng和$lat 分别代码
从Android 客户端提交过来的经度和纬度。
2. android初始化坐标距离
两点之间的距离是6378.137。
给定两点的经纬度。计算两点之间的距离。这里要注意经纬度一定要依照顺序填写
1. 利用android中的工具获得,单位是米。
2. 通过计算的方式获得,单位是公里。
当两点的距离较近时使用两种方式计算的结果基本一致,但是当两点的距离比较远时,计算的结果就会相差甚远,比较发现两点之间计算球面距离的方式更加精确一些,更贴近实际距离。本文重点讲解两点之间球面距离的计算方式。
3. 安卓怎么用两点的经纬度计算距离
计算公式:
1、Lat1 Lung1表示A点经纬度,Lat2 Lung2表示B点经纬度;
2、a=Lat1–Lat2为两点纬度之差b=Lung1 -Lung2为两点经度之差;
3、6378.137为地球半径,单位为千米;
计算出来的结果单位为千米。
4. android百度地图怎么计算两点距离
路线规划提供了获取路线距离的方法,见MKRoutePlan 类的 getDistance 方法。
如果是计算任意两点的距离,自2.0.0版本开始,Android SDK为开发者提供了计算距离的接口(DistanceUtil),具体使用方法如下:
1.GeoPoint p1LL = new GeoPoint(39971802, 116347927);
2.GeoPoint p2LL = new GeoPoint(39892131, 116498555);
3.double distance = DistanceUtil.getDistance(p1LL, p2LL);
如果开发者使用的是1.3.5及以前的版本,在计算任意两点之前的距离时,有如下两种方法:一种利用勾股定理计算,适用于两点距离很近的情况;一种按标准的球面大圆劣弧长度计算,适用于距离较远的情况。
5. 两点间距离怎么算啊
在其中一条直线上找一点(有特定的点就直接用)如:2x+y=1,取x=0,则y=1(就可取点(0,1))再用点到直线的距离公式计算即可。
两点间距离公式常用于函数图形内求两点之间距离、求点的坐标的基本公式,是距离公式之一。两点间距离公式叙述了点和点之间距离的关系。
实例
现在有一只工程队要铺设一条网络,连接A,B两城。他们首先要知道两城之间的距离,才能准备材料。他们用全球定位系统将两城的位置在平面直角坐标系中表示出来。我们就来试试看能不能帮他们求出A、B两城之间的距离。
6. android怎么计算两个坐标点之间的距离
千 锋扣丁学堂android开发为您解答:
public static void distanceBetween (double startLatitude, double startLongitude, double endLatitude, double endLongitude, float[] results)
Java code?
Parameters
startLatitude the starting latitude
startLongitude the starting longitude
endLatitude the ending latitude
endLongitude the ending longitude
results an array of floats to hold the results
详细解释见这里: distanceBetween(double, double, double, double, float[])
在大量坐标之间找最近距离的坐标
如果你用Mongodb,获取最近的坐标很简单,Mongodb自带geoNearCommand,可以参照这里:GeospatialIndexing-geoNearCommand
Java code?
> db.runCommand( { geoNear : "places" , near : [50,50], num : 10 } );
> db.runCommand({geoNear:"asdf", near:[50,50]})
{
"ns" : "test.places",
"near" : "",
"results" : [
{
"dis" : 69.29646421910687,
"obj" : {
"_id" : ObjectId("4b8bd6b93b83c574d8760280"),
"y" : [
1,
1
],
"category" : "Coffee"
}
},
{
"dis" : 69.29646421910687,
"obj" : {
"_id" : ObjectId("4b8bd6b03b83c574d876027f"),
"y" : [
1,
1
]
}
}
],
"stats" : {
"time" : 0,
"btreelocs" : 1,
"btreelocs" : 1,
"nscanned" : 2,
"nscanned" : 2,
"objectsLoaded" : 2,
"objectsLoaded" : 2,
"avgDistance" : 69.29646421910687
},
"ok" : 1
}
7. Android游戏开发之Cocos2d-x
游戏的制作如播放电影,拥有四大核心,包括: 导演、场景、图层、演员 。通过它们之间的不同配合,实现丰富多彩的效果。
public class CocosActivity extends AppCompatActivity {
private CCDirector mCcDirector;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
CCGLSurfaceView ccglSurfaceView =new CCGLSurfaceView(this);
setContentView(ccglSurfaceView);
导演,全局只有一个,单例模式创建
mCcDirector = CCDirector.sharedDirector();
开启绘制(开始拍电影)
mCcDirector.attachInView(ccglSurfaceView);
帧率,每秒刷新的次数,与手机性能有关
//ccDirector.setDisplayFPS(true);
设置帧率为60(记得把帧率文件放进项目中)
//ccDirector.setAnimationInterval(1/60f);
设置横屏
//ccDirector.setDeviceOrientation(CCDirector.);
屏幕适配,会基于不同屏幕大小进行适配
mCcDirector.setScreenSize(1920,1080);
场景
CCScene ccScene = CCScene.node();
图层
CCLayer ccLayer =CCLayer.node();
给场景添加图层
ccScene.addChild(ccLayer);
导演运行场景
mCcDirector.runWithScene(ccScene);
}
@Override
protected void onResume() {
super.onResume();
mCcDirector.onResume();
}
@Override
protected void onPause() {
super.onPause();
mCcDirector.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mCcDirector.end();
}
1、平移
参数1是移动时间,参数2是目标位置坐标,ccp方法是把坐标转换为cocos2d的坐标
CCMoveTo ccMoveTo = CCMoveTo.action(3,ccp(200,0));
与上不同的是,第2个参数代表水平移动200,竖直不移动,即偏移量
CCMoveBy ccMoveBy =CCMoveBy.action(3,ccp(200,0));
2、旋转
参数1时间,参数2角度,旋转中心是左下角的点,顺时针转
CCRotateBy ccRotateBy =CCRotateBy.action(3,360);
与上不同的是,逆时针转(捷径,顺时针转270==逆时针转90)
CCRotateTo ccRotateTo =CCRotateTo.action(3,270);
3、缩放
参数1时间,参数2X方向缩放,参数3Y方向缩放
CCScaleBy ccScaleBy =CCScaleBy.action(3,2,2);
参数1时间,参数2缩放
CCScaleTo ccScaleTo =CCScaleTo.action(3,2);
4、跳跃(参数1时间,参数2目标点,参数3跳跃高度,参数4跳跃次数)
CCJumpBy ccJumpBy =CCJumpBy.action(3,ccp(0,0),100,3);
5、淡入淡出(参数是时间)
CCFadeIn ccFadeIn =CCFadeIn.action(2);
CCFadeOut ccFadeOut =CCFadeOut.action(2);
6、贝塞尔曲线
点的含义,从point1出发,经过point2,到达endPosition
CCBezierConfig ccBezierConfig =new CCBezierConfig();
ccBezierConfig. controlPoint_1 =ccp(100,50);
ccBezierConfig. controlPoint_2 =ccp(200,200);
ccBezierConfig. endPosition =ccp(300,100);
CCBezierBy ccBezierBy =CCBezierBy.action(2,ccBezierConfig);
7、加速度
CCMoveBy ccMoveBy =CCMoveBy.action(2,ccp(100,100));
渐快渐慢,参数2是加速度
CCEaseIn ccEaseIn =CCEaseIn.action( ccMoveBy ,5);
CCEaseOut ccEaseOut =CCEaseOut.action( ccMoveBy ,5);
8、闪烁(时间,闪烁次数)
CCBlink ccBlink =CCBlink.action(2,10);
9、文字(参1是显示的文字,参2是字体格式(可不填,如""),参数3是字体大小)
CCLabel ccLabel = CCLabel.labelWithString("显示文字","STCAIYUN.TTF",20);
设置文字颜色
ccColor3B ccColor3B =ccc3(100,50,0);
ccLabel.setColor(ccColor3B );
设置文字位置
ccLabel.setPosition(ccp(width,height));
重置文字
ccLabel.setString("显示文字");
颜色渐变(从本来的文字颜色渐变到设置的字体颜色)
CCTintBy tintBy =CCTintBy.action(3,ccc3(50,-50,100));
10、循环(参数是动画效果)
CCRepeatForever ccRepeatForever =CCRepeatForever.action(action);
11、延迟(参数是时间)
CCDelayTime ccDelayTime =CCDelayTime.action(1);
12、反转(将一个动画倒序执行)
ccJumpBy.reverse();
13、同时(参数是不定长度数组)
CCSpawn ccSpawn =CCSpawn.actions(action1,action2);
14、连续动画(参数是不定长度数组)
CCSequence ccSequence =CCSequence.actions(action1,action2, ccCallFunc ");
15、反射(执行一个动画方法)
CCCallFunc .action(this," anim ");
被反射的执行方法
public void anim (){}
16、逐帧动画
public void walk(){
存放帧动画的集合
ArrayList ccSpriteFrames =new ArrayList<>();
String format="z_1_%d.png"; // %d和%02d代表整数,用i来取代,%d只取代i,%02d会补0
for(int i=1;i<10;i++){
CCSprite ccSprite =CCSprite.sprite(String.format(format,i));
CCSpriteFrame ccSpriteFrame =ccSprite.displayedFrame();
ccSpriteFrames.add(ccSpriteFrame );
}
参数1是动画名称,参数2是每一帧停留的时间,参数3是帧动画集合
CCAnimation ccAnimation =CCAnimation.animation("walk",.2f,ccSpriteFrames);
参数2是否持续执行动画,如果想执行无限循环,可以使用CCRepeatForever
CCAnimate ccAnimate =CCAnimate.action(ccAnimation,false);
mCcSprite.runAction(ccAnimate);
}
17、隐藏
CCHide ccHide =CCHide.action();
18、显示
CCShow ccShow =CCShow.action();
19、跟随(参数是跟随的对象)
CCFollow ccFollow =CCFollow.action(mCCSprite);
20、执行动画(上述皆是)
mCcSprite.runAction(action);
21、工具类使用
CGPointUtil .distance(point1,point2); //计算两点距离
获取声音引擎
SoundEngine engine =SoundEngine.sharedEngine();
参数1是activity,SurfaceView创建时存入,参2是播放资源id(res\raw),参数3是否循环播放
engine.playSound(CCDirector.theApp,1,true);
手动停止音乐播放
engine.realesAllSounds();
生命周期跟随Activity
SoundEngine.sharedEngine().resumeSound();
SoundEngine.sharedEngine().pauseSound();
SoundEngine.sharedEngine().realesAllSounds();
预加载播放音乐,避免播放音乐时没声音
SoundEngine.sharedEngine().preloadEffect();
SoundEngine.sharedEngine().preloadSound();
1、创建
CCSprite mCcSprite =new CCSprite(" pic.jpeg ");
2、锚点(图片上的一点,类似图钉,对应图片显示的位置)
CGPoint cgPoint =ccp(0,0);
mCcSprite.setAnchorPoint(cgPoint);
3、位置
mCcSprite.setPosition(cgPoint);
4、属性(缩放、翻转、透明度)
ccSprite.setFlipX(true); 水平翻转
ccSprite.setOpacity(255); 透明度
ccSprite.setScale(2); 缩放
5、移除(在Layer里面操作)
mCcSprite.removeSelf(); //精灵从图层中移除
( Layer )this.removeSelf(); // 移除整个图层
6、尺寸
CGSize cgSize =CCDirector.sharedDirector().winSize();
1、游戏暂停(图层静止,将不再响应任何事件)
MapLayer.this.onExit();
注意:因为图层不再响应任何事件,所以暂停按钮应该加在暂停图层的父图层上
this.getParent().addChild(new PauseLayer());
2、游戏继续(图层恢复动态,接收点击事件)
MapLayer.this.onEnter();
通用的游戏继续方法
CCDirector.sharedDirector().getRunningScene().onEnter();
3、定时器
CCScheler ccScheler =CCScheler.sharedScheler();
通过反射执行方法
ccScheler.schele(" onScheler ",this,2,false);
方法声明为公开类型
public void onScheler (float f){ //实现具体逻辑
};
4、进度条
CCProgressTimer ccProgressTimer =CCProgressTimer.progressWithFile(" image/pic.jpeg "); //多层目录
ccProgressTimer.setPosition(width,height);
this.getParent().addChild(ccProgressTimer); //具体加到什么图层,看情况
ccProgressTimer.setScale(0.6f);
ccProgressTimer.setPercentage(2);
设置显示样式(垂直,水平)->(最后2个字母,left,right,代表进度条从左往右)
ccProgressTimer.setType(CCProgressTimer. LR );
进度条外框 等元素,都作为精灵与进度条同级加入图层
this.getParent().addChild(sprite);
Android坐标系的(0,0)在左上角,而Cocos2d-x坐标系的(0,0)在左下角。所以在处理Android的点击事件MotionEvent时,需要进行坐标体系的转换。
CGPoint cgPoint = convertPrevTouchToNodeSpace (event);
监听图片的点击范围,自定义封装点击事件
CGRect .containsPoint( mCcSprite.getBoundingBox() , cgPoint );
CCMenu ccMenu =CCMenu.menu();
CCSprite normalSprite =CCSprite.sprite("pic_1.jpeg"); //正常情况下显示的图片
CCSprite selectSprite =CCSprite.sprite("pic_2.jpeg"); //按下时显示的图片
注意:反射的方法需要使用pulbic修饰,参数指target,直接传this,它不是上下文Context
CCMenuItemSprite itemSprite =CCMenuItemSprite.item( normalSprite , selectSprite , this ," onCLick ");
ccMenu.addChild( itemSprite );
this.addChild(ccMenu); //菜单添加到图层
public void onCLick (Object obj){} //点击事件响应方法,必须用public修饰以及带参数
setIsTouchEnabled(true); //打开图层点击事件,默认关闭
模仿任何天气现象,只需要改这一句,剩下的不变
CCParticleSystem ccParticleSystem= CCParticleSnow.node();
设置雪花大小
ccParticleSystem.setScale(2);
设置飘落的速度
ccParticleSystem.setSpeed(10);
设置雪花的图片
ccParticleSystem.setTexture(CCTextureCache.sharedTextureCache().addImage("snow.png"));
this.addChild(ccParticleSystem,1);
停止粒子系统(下雪)
ccParticleSystem.stopSystem();
1、加载地图
ArrayList mCGPoints = new ArrayList<>();
CCTMXTiledMap mCctmxTiledMap = CCTMXTiledMap.tiledMap(" map.tmx ");
mCctmxTiledMap.setAnchorPoint(ccp(0.5f,0.f));
mCctmxTiledMap.setPosition(width,height);
CCTMXObjectGroup cctmxObjectGroup= mCctmxTiledMap.objectGroupNamed("road");
ArrayList<HashMap<String,String>> objects = cctmxObjectGroup.objects;
for(HashMap<String,String> hashMap:objects){ //加载地图的坐标(需要经过的坐标点)
Integer x =Integer.parseInt(hashMap.get("x"));
Integer y =Integer.parseInt(hashMap.get("y"));
CGPoint cgPoint =ccp(x,y);
mCGPoints .add(cgPoint); }
this.addChild(mCctmxTiledMap);
在地图上添加精灵
mCCSprite.setPosition(mCGPoints.get(0));
mCctmxTiledMap.addChild(mCCSprite);
地图跟随精灵的移动而移动
CCFollow ccFollow =CCFollow.action(mCCSprite);
mCctmxTiledMap .runAction(ccFollow);
2、地图随手指触摸事件移动(重写触摸方法)
@Override
public boolean ccTouchesMoved(MotionEvent event) {
手指拖拽时,地图随手指移动
mCctmxTiledMap.touchMove(event,mCctmxTiledMap);
地图移动,地图上所有精灵都随之移动(地图是父亲,精灵是孩子)
mCctmxTiledMap.addChild(mCCSprite);
return super.ccTouchesMoved(event);
}
创建场景
CCScene ccScene =CCScene.node();
场景添加图层
ccScene.addChild(ccLayer);
场景切换特效
CCJumpZoomTransition ccJumpZoomTransition =CCJumpZoomTransition.transition(2,ccScene);
导演切换场景
CCDirector.sharedDirector(). replaceScene (ccJumpZoomTransition);
CopyOnWrite容器即写时复制的容器。通俗的理解是当我们往一个容器添加元素的时候,不直接往当前容器添加,而是先将当前容器进行Copy,复制出一个新的容器,然后新的容器里添加元素,添加完元素之后,再将原容器的引用指向新的容器。这样做的好处是我们可以对CopyOnWrite容器进行并发的读,而不需要加锁,因为当前容器不会添加任何元素。所以CopyOnWrite容器也是一种读写分离的思想,读和写不同的容器。用法和ArrayList相近。
CopyOnWriteArrayList OnWriteArrayList = new CopyOnWriteArrayList();
setIsTouchEnabled(true); //打开点击事件
@Override
public boolean ccTouchesBegan (MotionEvent event) {
return super.ccTouchesBegan(event);
}
@Override
public boolean ccTouchesCancelled (MotionEvent event) {
return super.ccTouchesCancelled(event);
}
@Override
public boolean ccTouchesMoved (MotionEvent event) {
return super.ccTouchesMoved(event);
}
@Override
public boolean ccTouchesEnded (MotionEvent event) {
return super.ccTouchesEnded(event);
}
描述:UI频繁刷新,造成主线程的堵塞或挂起
private CCGLSurfaceView mCCGLSurfaceView;
mCCGLSurfaceView = (CCGLSurfaceView) CCDirector.sharedDirector().getOpenGLView();
mCCGLSurfaceView.queueEvent(new Runnable() {
@Override
public void run() { //切换到主线程
}
});
描述:CCSprite运行动画时,没有表现出任何视觉效果。
原因:一个动画只能被一个CCSprite执行一次,执行完成后,原来的动画会失效。
解决:每次执行的动画,都需要重新生成,即使是相同的动画效果。
缓存:CCDirector.sharedDirector().purgeCachedData();
8. 求一个Android使用LocationManager获取两个点的经纬度之后计算出两个点的距离的Demo十万火急。
两点经纬度,计算距离
这种公式我必然是不知道的,谷歌翻了翻,有人(http://xxyyyboy.blog.163.com/blog/static/765832620110410457662/)说是
1.Lat1 Lung1 表示A点经纬度,Lat2 Lung2 表示B点经纬度;
2.a=Lat1 – Lat2 为两点纬度之差 b=Lung1 -Lung2 为两点经度之差;
3.6378.137为地球半径,单位为千米;
计算出来的结果单位为千米。
也有人(http://panyee.cnblogs.com/archive/2006/07/04/442771.html )说直接从google maps的脚本里扒了段代码。
我作为不明真相的群众就围观转一下maps的代码:计算的结果是米为单位。
// 计算两点距离
private final double EARTH_RADIUS = 6378137.0;
private double gps2m(double lat_a, double lng_a, double lat_b, double lng_b) {
double radLat1 = (lat_a * Math.PI / 180.0);
double radLat2 = (lat_b * Math.PI / 180.0);
double a = radLat1 - radLat2;
double b = (lng_a - lng_b) * Math.PI / 180.0;
double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
+ Math.cos(radLat1) * Math.cos(radLat2)
* Math.pow(Math.sin(b / 2), 2)));
s = s * EARTH_RADIUS;
s = Math.Round(s * 10000) / 10000;
return s;
}