技术标签: 随记 当前位置设为地图中心点 移动地图设置中心点 搜索地点设为中心点
package com.cn.logistics.ui.activity;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.appcompat.widget.AppCompatButton;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.LocationSource;
import com.amap.api.maps.MapView;
import com.amap.api.maps.UiSettings;
import com.amap.api.maps.model.BitmapDescriptorFactory;
import com.amap.api.maps.model.CameraPosition;
import com.amap.api.maps.model.CircleOptions;
import com.amap.api.maps.model.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.MyLocationStyle;
import com.amap.api.services.core.AMapException;
import com.amap.api.services.geocoder.GeocodeAddress;
import com.amap.api.services.geocoder.GeocodeQuery;
import com.amap.api.services.geocoder.GeocodeResult;
import com.amap.api.services.geocoder.GeocodeSearch;
import com.amap.api.services.geocoder.RegeocodeQuery;
import com.amap.api.services.geocoder.RegeocodeResult;
import com.cn.logistics.R;
import com.cn.logistics.common.MyActivity;
import com.cn.logistics.utils.L;
import com.cn.logistics.utils.MapUtils;
import com.hjq.toast.ToastUtils;
import com.hjq.widget.view.ClearEditText;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
/**
* time : 2019/12/23
* desc : 出发地
*/
public final class StartAddressActivity extends MyActivity implements AMap.OnMapLoadedListener, AMap.OnMarkerClickListener, AMap.OnMapClickListener, GeocodeSearch.OnGeocodeSearchListener, LocationSource, AMap.OnCameraChangeListener, AMapLocationListener {
@BindView(R.id.ce_search)
ClearEditText ceSearch;
@BindView(R.id.tv_right)
TextView tvRight;
@BindView(R.id.acb_yes)
AppCompatButton acbYes;
private GeocodeSearch.OnGeocodeSearchListener mOnGeocodeSearchListener;
@Override
protected int getLayoutId() {
return R.layout.activity_start_address;
}
@Override
protected void initView() {
}
@Override
protected void initData() {
}
private MapView mMapView;
private AMap mAMap;
private Marker mGPSMarker; //定位位置显示
private AMapLocation location;
private OnLocationChangedListener mListener;
//声明AMapLocationClient类对象
public AMapLocationClient mLocationClient = null;
//声明mLocationOption对象
public AMapLocationClientOption mLocationOption = null;
//你编码对象
private GeocodeSearch geocoderSearch;
private String custAddr;
private Double custLon;
private Double custLat;
private String actualAddr;
private Double actualLon;
private Double actualLat;
private ImageView img_back;
private String city;
private MarkerOptions markOptions;
private LatLng latLng;
private String addressName;
/**
* @param savedInstanceState
*/
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO: add setContentView(...) invocation
ButterKnife.bind(this);
initMap(savedInstanceState);
}
private void initMap(Bundle savedInstanceState) {
mMapView = (MapView) findViewById(R.id.mapview);
mMapView.onCreate(savedInstanceState);
geocoderSearch = new GeocodeSearch(this);
mAMap = mMapView.getMap();
// 设置定位监听
mAMap.setOnMapLoadedListener(this);
mAMap.setOnMarkerClickListener(this);
mAMap.setOnMapClickListener(this);
mAMap.setLocationSource(this);
//设置地图拖动监听
mAMap.setOnCameraChangeListener(this);
// 绑定marker拖拽事件
// mAMap.setOnMarkerDragListener(this);
//逆编码监听事件
// GeocodeSearch.OnGeocodeSearchListener,
geocoderSearch.setOnGeocodeSearchListener(this);
initListener();
MyLocationStyle myLocationStyle = new MyLocationStyle();
myLocationStyle.myLocationIcon(BitmapDescriptorFactory.fromResource(R.drawable.bom_center_sel));// 设置小蓝点的图标
//myLocationStyle.strokeColor(Color.BLACK);// 设置圆形的边框颜色
myLocationStyle.radiusFillColor(Color.argb(100, 0, 0, 180));// 设置圆形的填充颜色
// myLocationStyle.anchor(int,int)//设置小蓝点的锚点
myLocationStyle.strokeWidth(0f);// 设置圆形的边框粗细
myLocationStyle.anchor(0.5f, 0.7f);
mAMap.setMyLocationStyle(myLocationStyle);
mAMap.moveCamera(CameraUpdateFactory.zoomTo(16f)); //缩放比例
//添加一个圆
CircleOptions circleOptions = new CircleOptions();
circleOptions.radius(20.0f);
mAMap.addCircle(circleOptions);
//设置amap的属性
UiSettings settings = mAMap.getUiSettings();
settings.setMyLocationButtonEnabled(true);// 设置默认定位按钮是否显示
mAMap.setMyLocationEnabled(true);// 设置为true表示显示定位层并可触发定位,false表示隐藏定位层并不可触发定位,默认是false
}
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
location = aMapLocation;
if (mListener != null && location != null) {
if (location != null && location.getErrorCode() == 0) {
mListener.onLocationChanged(location);// 显示系统箭头
LatLng la = new LatLng(location.getLatitude(), location.getLongitude());
// setMarket(la, location.getCity(), location.getAddress());
setMarket(la, "", location.getAddress());
this.actualAddr = location.getAddress();
this.actualLon = location.getLongitude();
this.actualLat = location.getLatitude();
mLocationClient.stopLocation();
// this.location = location;
// 显示导航按钮
// btnNav.setVisibility(View.VISIBLE);
}
} else {
// Util.showToast(AttendanceViewMap.this, "定位失败");
ToastUtils.show("定位失败");
}
}
/**
* 激活定位
*/
@Override
public void activate(OnLocationChangedListener onLocationChangedListener) {
mListener = onLocationChangedListener;
//初始化定位
mLocationClient = new AMapLocationClient(getApplicationContext());
//设置定位回调监听
mLocationClient.setLocationListener(this);
//初始化定位参数
mLocationOption = new AMapLocationClientOption();
//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(true);
//设置是否只定位一次,默认为false
mLocationOption.setOnceLocation(false);
//设置是否强制刷新WIFI,默认为强制刷新
mLocationOption.setWifiActiveScan(true);
//设置是否允许模拟位置,默认为false,不允许模拟位置
mLocationOption.setMockEnable(false);
//设置定位间隔,单位毫秒,默认为2000ms
mLocationOption.setInterval(2000 * 10);
//给定位客户端对象设置定位参数
mLocationClient.setLocationOption(mLocationOption);
//启动定位
mLocationClient.startLocation();
}
/**
* 停止定位
*/
@Override
public void deactivate() {
mListener = null;
if (mLocationClient != null) {
mLocationClient.stopLocation();
mLocationClient.onDestroy();
}
}
@Override
public void onMapClick(LatLng latLng) {
// mAMap.clear();
// this.custLat = latLng.latitude;
// this.custLon = latLng.longitude;
//
LatLonPoint latLonPoint = new LatLonPoint(latLng.latitude, latLng.longitude);
if (!TextUtils.isEmpty(latLonPoint.toString())) {
getAddress(latLonPoint);
} else {
Util.showToast(AttendanceViewMap.this, "拜访地址获取失败");
}
// MarkerOptions otMarkerOptions = new MarkerOptions();
// otMarkerOptions.icon(BitmapDescriptorFactory.fromResource(R.drawable.bd_location_icon01));
// otMarkerOptions.position(latLng);
// mAMap.addMarker(otMarkerOptions);
// mAMap.moveCamera(CameraUpdateFactory.changeLatLng(latLng));
}
@Override
public void onMapLoaded() {
}
@Override
public boolean onMarkerClick(Marker marker) {
if (marker.isInfoWindowShown()) {
marker.hideInfoWindow();
} else {
marker.showInfoWindow();
}
return false;
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
mMapView.onSaveInstanceState(outState);
}
protected void onResume() {
super.onResume();
mMapView.onResume();
// aMapEx.onRegister();
}
protected void onPause() {
super.onPause();
mMapView.onPause();
}
protected void onDestroy() {
super.onDestroy();
// 销毁定位
if (mLocationClient != null) {
mLocationClient.stopLocation();
mLocationClient.onDestroy();
}
// if (aMapEx != null) {
// aMapEx.onUnregister();
// }
mMapView.onDestroy();
}
private void setMarket(LatLng latLng, String title, String content) {
if (mGPSMarker != null) {
mGPSMarker.remove();
}
//获取屏幕宽高
WindowManager wm = this.getWindowManager();
int width = (wm.getDefaultDisplay().getWidth()) / 2;
int height = ((wm.getDefaultDisplay().getHeight()) / 2) - 80;
markOptions = new MarkerOptions();
markOptions.draggable(true);//设置Marker可拖动
markOptions.icon(BitmapDescriptorFactory.fromBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.lubiao))).anchor(0.5f, 0.7f);
//设置一个角标
mGPSMarker = mAMap.addMarker(markOptions);
//设置marker在屏幕的像素坐标
mGPSMarker.setPosition(latLng);
mGPSMarker.setTitle(title);
mGPSMarker.setSnippet(content);
//设置像素坐标
mGPSMarker.setPositionByPixels(width, height);
if (!TextUtils.isEmpty(content)) {
mGPSMarker.showInfoWindow();
}
mMapView.invalidate();
}
// 当marker开始被拖动时回调此方法, 这个marker的位置可以通过getPosition()方法返回。
// 这个位置可能与拖动的之前的marker位置不一样。
// marker 被拖动的marker对象。
/* @Override
public void onMarkerDragStart(Marker marker) {
Log.e("marker","marker正在拖拽");
}
// 在marker拖动完成后回调此方法, 这个marker的位置可以通过getPosition()方法返回。
// 这个位置可能与拖动的之前的marker位置不一样。
// marker 被拖动的marker对象。
@Override
public void onMarkerDrag(Marker marker) {
latLng=marker.getPosition();
double latitude= latLng.latitude;
double longitude= latLng.longitude;
Log.e("latitude",latitude+"");
Log.e("longitude",longitude+"");
getAddress(latLng);
}
// 在marker拖动过程中回调此方法, 这个marker的位置可以通过getPosition()方法返回。
// 这个位置可能与拖动的之前的marker位置不一样。
// marker 被拖动的marker对象。
@Override
public void onMarkerDragEnd(Marker marker) {
Log.e("marker","marker拖拽完成");
setMarket(latLng, location.getCity(), addressName);
// 销毁定位
if (mLocationClient != null)
{
mLocationClient.stopLocation();
mLocationClient.onDestroy();
}
}*/
@Override
public void onCameraChange(CameraPosition cameraPosition) {
}
@Override
public void onCameraChangeFinish(CameraPosition cameraPosition) {
latLng = cameraPosition.target;
double latitude = latLng.latitude;
double longitude = latLng.longitude;
Log.e("latitude", latitude + "");
Log.e("longitude", longitude + "");
getAddress(latLng);
}
/**
* 根据经纬度得到地址
*/
public void getAddress(final LatLng latLonPoint) {
// 第一个参数表示一个Latlng,第二参数表示范围多少米,第三个参数表示是火系坐标系还是GPS原生坐标系
RegeocodeQuery query = new RegeocodeQuery(MapUtils.convertToLatLonPoint(latLonPoint), 500, GeocodeSearch.AMAP);
geocoderSearch.getFromLocationAsyn(query);// 设置同步逆地理编码请求
}
/**
* 逆地理编码回调
*/
@Override
public void onRegeocodeSearched(RegeocodeResult result, int rCode) {
if (rCode == 1000) {
if (result != null && result.getRegeocodeAddress() != null
&& result.getRegeocodeAddress().getFormatAddress() != null) {
addressName = result.getRegeocodeAddress().getFormatAddress(); // 逆转地里编码不是每次都可以得到对应地图上的opi
L.e("逆地理编码回调 得到的地址:" + addressName);
// mAddressEntityFirst = new AddressSearchTextEntity(addressName, addressName, true, convertToLatLonPoint(mFinalChoosePosition));
// setMarket(latLng, location.getCity(), addressName);
setMarket(latLng, "", addressName);
}
}
}
/**
* 地理编码查询回调
*/
@Override
public void onGeocodeSearched(GeocodeResult result, int rCode) {
}
@Override
public void onPointerCaptureChanged(boolean hasCapture) {
}
@OnClick({R.id.ce_search, R.id.tv_right,R.id.acb_yes})
public void onViewClicked(View view) {
switch (view.getId()) {
case R.id.tv_right:
// String s = GaodeApi.httpURLConectionGET(ceSearch.getText().toString().trim());
getLatlon(ceSearch.getText().toString().trim());
// L.e("===================="+s);
break;
case R.id.acb_yes:
ToastUtils.show(mGPSMarker.getTitle()+"====="+mGPSMarker.getSnippet());
break;
}
}
//传入地址进行正向地理编码
public void getLatlon(final String name) {
GeocodeSearch geocoderSearch = new GeocodeSearch(this);
GeocodeQuery query = new GeocodeQuery(name, "");// 第一个参数表示地址,第二个参数表示查询城市,中文或者中文全拼,citycode、adcode,
geocoderSearch.getFromLocationNameAsyn(query);// 设置同步地理编码请求
geocoderSearch.setOnGeocodeSearchListener(mOnGeocodeSearchListener);
}
private void initListener() { //初始化
//逆地址搜索监听器
mOnGeocodeSearchListener = new GeocodeSearch.OnGeocodeSearchListener() {
@Override
public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {
if (i == 1000) {
if (regeocodeResult != null) {
// tv_address.setText(regeocodeResult.getRegeocodeAddress().getProvince() + regeocodeResult.getRegeocodeAddress().getCity() + regeocodeResult.getRegeocodeAddress().getDistrict());
}
}
}
//正地理编码
@Override
public void onGeocodeSearched(GeocodeResult result, int rCode) {
if (rCode == AMapException.CODE_AMAP_SUCCESS) {
if (result != null && result.getGeocodeAddressList() != null && result.getGeocodeAddressList().size() > 0) {
GeocodeAddress address = result.getGeocodeAddressList().get(0);
if (address != null) {
addressName = "经纬度值:" + address.getLatLonPoint() + "\n位置描述:" + address.getFormatAddress();
LatLng latLng = new LatLng(address.getLatLonPoint().getLatitude(), address.getLatLonPoint().getLongitude());
mAMap.moveCamera(CameraUpdateFactory.changeLatLng(latLng));
getAddress(latLng);
setMarket(latLng, "", address.getFormatAddress());
ToastUtils.show(addressName);
}
} else {
ToastUtils.show("没有找到该地址");
}
} else {
// ToastUtil.showerror(this, rCode);
}
}
};
}
}
package com.cn.logistics.utils;
import com.amap.api.location.AMapLocation;
import com.amap.api.maps.AMap;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.model.LatLng;
import com.amap.api.services.core.LatLonPoint;
/**
* Created by Xie JiaBin on 2019/12/23.
*/
public class MapUtils {
/**
* 把LatLng对象转化为LatLonPoint对象
*/
public static LatLonPoint convertToLatLonPoint(LatLng latlon)
{
return new LatLonPoint(latlon.latitude, latlon.longitude);
}
/**
* 把LatLonPoint对象转化为LatLon对象
*/
public static LatLng convertToLatLng(LatLonPoint latLonPoint)
{
return new LatLng(latLonPoint.getLatitude(), latLonPoint.getLongitude());
}
/**********************************************************移动地图**************************************/
public static void animMove(AMap aMap, LatLng latLng)
{
aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 15));
}
public static void animMove(AMap aMap, LatLonPoint point)
{
aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(convertToLatLng(point), 15));
}
public static void animMove(AMap aMap, AMapLocation location)
{
aMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(location.getLatitude(), location.getLongitude()), 18));
}
}
注意:动态获取定位权限!!!
文章浏览阅读4.3k次,点赞5次,收藏15次。Timeline的timelineAsset文件只会保留轨道的编辑信息,而不会保存轨道的绑定列表,这些绑定的信息是和场景一同绑定的。如果我们在制作的过程中没有保存场景,或者在协作的过程中只传送了timelineAsset而没有传送场景信息,这些绑定信息就会丢失,就像如下这种情况:我们可以通过创建Asset文件来保存和恢复绑定信息,具体思路是创建Asset来存储每个轨道绑定物体的名称,通过实现函数将名称信息保存到Asset文件里,在恢复的时候再通过读取Asset文件,根据其中存取的名称来._unity 获取timeline 数据
文章浏览阅读179次。题目链接:点击打开链接题目大意:略解题思路相关企业字节跳动 亚马逊(Amazon) 微软(Microsoft) 苹果(Apple) Facebook 谷歌(Google) 彭博(bloomberg) 华为 优步(Uber) VMwareAC 代码Java// 解决方案(1)class Solution { public int lengthOfLongestSubstring(String s) { Map<Ch_剑指offer48 leetcode
文章浏览阅读3k次。在java开发中确保线程安全已成为基本要求,线程安全就是指某段代码在多线程环境下能够正确的执行,不会出现数据不一致的情况,反之就是非线程安全。目前解决线程安全的方式有:线程安全类,如AtomicInteger加锁排队执行,如synchronized、reentrantLock线程本地变量,如ThreadLocal场景分析:创建一个变量num等于0,然后创建线程1,执行1000000次++操作,然后在创建线程2执行1000000次–操作,等线程1和2都执行完之后,打印num变量值,若结果为0,则说_java 本地线程安全吗
文章浏览阅读135次。学习总结(2020.04.10)一、学习了数据库的基本语句二、建表的约束:1.主键约束:使某个字段不重复且不得为空,确保表内所有数据的唯一性(primary key)2.非空约束(not null)外键约束三、数据库的三大范式设计1.1NF:只要字段值还可以继续拆分,就不满足第一范式。(范式设计得越...
文章浏览阅读1.2w次,点赞4次,收藏24次。分类模型评价一般有以下几种方法:混淆矩阵(Confusion Matrix)、收益图(Gain Chart)、提升图(Lift Chart)、KS图(KS Chart)、接受者操作特性曲线(ROC Chart)。“分类模型评价与在R中的实现”系列中将逐个介绍。本篇介绍最基础的混淆矩阵。一、混淆矩阵简介混淆矩阵将分类预测结果与实际目标进行比较,并汇总成NXN列联表(N为分类类_r语言混淆矩阵
文章浏览阅读1.5w次。史上最漂亮-Mac支持NTFS工具-NTFSX。NTFS格式的硬盘在mac系统上默认只能读,不能写入,mac原生支持NTFS写入功能,需要手动执行一些命令才能完成NTFS挂载写入功能,本软件提供了漂亮的界面,简单的操作,很方便的调用系统命令实现原生NTFS磁盘挂载读写功能。_ntfsx
文章浏览阅读517次。1.按标记位截取#取左侧第三个下划线左侧的数据SELECT substring_index(scenario,'_',3) FROM test_list where scenario = 'AVW_14_4_1_64.xml';#结果:AVW_14_4#取右侧第三个下划线右侧的数据SELECT substring_index(scenario,'_',-3) FROM test_list wher..._mysql 数据做特定标记截取
文章浏览阅读3.1w次,点赞11次,收藏87次。1. 功能介绍以太网的功能是允许设备提供硬件接口通过插入网线的形式访问互联网的功能。接入网线之后,设备可以动态的获取IP,DNS,Gateway等一系列网络属性,我们也可以手动配置设备的网络属性,使用静态配置参数。Google已经有一套现成的机制使用有线网,但没有涉及有线网配置的功能,本文主要介绍如何Google现有机制的基础上实现静态网络的配置。本文基于高通MSM8953平台进行开发,通过配置e..._android 以太网
文章浏览阅读753次。区分两组概念:request / requestScope、getParameter() / getAttribute()1.request对象通常用来接收客户端提交到服务端的数据,如在servlet或者action中可以用request.getParameter()的方法获取参数内容,在服务端无法通过request.setParameter()设置参数;2.requestScope通常是在servlet或者action的服务端中通过request.setAttribute()方法把数据放到reques_将请求放入request的scope中
文章浏览阅读129次。1、List接口介绍java.util.list接口继承自Collection接口,是单列集合的一个重要分支,习惯性地会将实现了List接口的对象成为List集合。在List集合中允许出现重复的元素,所有元素是以一种线性方式进行存储的,在程序中可以通过索引来访问集合中的指定元素。另外,List集合还有一个特点就是元素有序,即元素的存入顺序和取出顺序是一致的。List接口特点:1、它是一个元素存取有序的集合。例如,存元素的顺序是11,22,33。那么集合中,元素的存储就是按照11,22,33的顺序完成的_java list接口方法 pop
文章浏览阅读4k次,点赞3次,收藏15次。各位客官,好久不见了。之前已经和大家说过,由于忙于结婚所以没有时间更新博客,先说声对不住了!今天之所以要更新一篇博客,主要是因为刚刚在上班的过程中和同事探讨了什么是服务IP,它存在的意义又是什么?说真的,我之前对这个还真不太了解,所以特意求助了度娘和我的大牛级别的同事,经过一番学习,基本上明白了这个服务IP的作用,接下来咱们说一说。 小二,上菜!!! 一、什么是服务IP虚拟IP地址(VIP) 是一个bai不与特定计算机或一个计算机中的网络接口卡(NIC)相连的IP地址。数据包被d..._ip vip
文章浏览阅读6.1k次。CJQtime ,搬砖师在读韦易笑、 朱炫、 ze ran 等 18453 人赞同进知乎两年了,一直是个透明人,从来不问不答,只是看到自己喜欢的答案会点个赞而已。基友在身边有个会画画的朋友是怎样的体验? - 艺术发了些我平时瞎画的画,结果我就从两年来的一直1关注者变成了9关注者,嘎哈哈哈 感激涕零,所以认真答上一题,也对得起这几位关注者。入正题,画过哪些有意思的东西