package com.jiuqi.njt.son;
import java.util.ArrayList;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.text.Html;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.widget.Toast;
import com.amap.api.location.core.GeoPoint;
import com.amap.api.maps.AMap;
import com.amap.api.maps.AMap.CancelableCallback;
import com.amap.api.maps.AMap.InfoWindowAdapter;
import com.amap.api.maps.AMap.OnInfoWindowClickListener;
import com.amap.api.maps.AMap.OnMapClickListener;
import com.amap.api.maps.AMap.OnMarkerClickListener;
import com.amap.api.maps.CameraUpdate;
import com.amap.api.maps.CameraUpdateFactory;
import com.amap.api.maps.SupportMapFragment;
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.LatLng;
import com.amap.api.maps.model.Marker;
import com.amap.api.maps.model.MarkerOptions;
import com.amap.api.maps.model.PolylineOptions;
import com.jiuqi.lbsinterface.bean.UserPositionBean;
import com.jiuqi.njt.R;
import com.jiuqi.njt.util.DateUtil;
import com.jiuqi.njt.util.UIUtil;
/**
* ItemizedOverlay实现地图上给定位置用自定义图片标三个点
*/
public class Gzgj extends FragmentActivity implements OnMarkerClickListener,
OnMapClickListener, OnInfoWindowClickListener, InfoWindowAdapter {
private AMap aMap;
private static int zoomLevel = 15;// 放大倍数
ArrayList<UserPositionBean> tracks = null;
ArrayList<UserPositionBean> trackArrayList = null;
private LatLng point;
GeoPoint beginGeoPoint;
GeoPoint endGeoPoint;
UserPositionBean trackbegin;
UserPositionBean trackend;
View popView;
GeoPoint gp;
String begContent = "";
String endContent = "";
private String placeNameShow ;
@SuppressWarnings("unchecked")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);// 隐藏标题栏
setContentView(R.layout.wzcx);
aMap = ((SupportMapFragment) getSupportFragmentManager()
.findFragmentById(R.id.mylocationview)).getMap();
if (null == aMap) {
UIUtil.showMsg(Gzgj.this, "初始化失败");
}
// 获取历史轨迹
Intent intent = new Intent();
intent = getIntent();
tracks = (ArrayList<UserPositionBean>)intent.getSerializableExtra("locList");
setUpMap();
}
// begin------------------------------------------------------------------------------------------
// 设置地图属性
private void setUpMap() {
addMarkersToMap();
mapUISetting();
}
private void mapUISetting() {
UiSettings aUiSettings = aMap.getUiSettings();
aUiSettings.setScaleControlsEnabled(true);// 设置地图默认的比例尺是否显示
aUiSettings.setZoomControlsEnabled(true);// 设置地图默认的缩放按钮
}
@SuppressLint("NewApi")
private void addMarkersToMap() {
if (tracks.size() == 1) {
UserPositionBean position = tracks.get(0);
Double lon = position.getLongitude();
Double lat = position.getLatitude();
if (lon != 0.0 && lat != 0.0) {
String addtime = DateUtil.getTimeStamp(
position.getCreateDate(), DateUtil.MM_DD_HH_MM);
begContent = "时间:" + addtime + "</br><br>经度:"
+ position.getLongitude() + "</br>" + "<br>纬度:"
+ position.getLatitude() + "</br>" + "<br>详情:"
+ position.getContent() + "</br>";
point = new LatLng(lat, lon);
addMarker(point, position.getUserName(), begContent);
}
} else {
ArrayList<LatLng> poiList = new ArrayList<LatLng>();
for (UserPositionBean track : tracks) {
// 开始
String addtime = DateUtil.getTimeStamp(track.getCreateDate(),
DateUtil.MM_DD_HH_MM);
Double lon = track.getLongitude();
Double lat = track.getLatitude();
if (lon == 0.0 && lat == 0.0) {
continue;
}
if (null == track.getContent()) {
placeNameShow = "";
}else {
placeNameShow = splitStr(track.getContent(), 10);
}
begContent = "时间:" + addtime + "<br>经度:" + track.getLongitude()
+ "</br>" + "<br>纬度:" + track.getLatitude() + "</br>"
+ "<br>详情:" + placeNameShow
+ "</br>";
LatLng ll = new LatLng(lat, lon);
poiList.add(ll);
if (point == null) {
point = ll;
}
addMarker(ll, "目标名称:" + track.getUserName(),
Html.fromHtml(begContent).toString());
}
drawLine(poiList);
}
updateView(point);
registerListener();// 注册监听
}
private void registerListener() {
aMap.setOnMapClickListener(Gzgj.this);
aMap.setOnMarkerClickListener(Gzgj.this);
aMap.setOnInfoWindowClickListener(Gzgj.this);
aMap.setInfoWindowAdapter(Gzgj.this);
}
private void releaseListener() {
aMap.setOnMapClickListener(null);
aMap.setOnMarkerClickListener(null);
aMap.setOnInfoWindowClickListener(null);
aMap.setInfoWindowAdapter(null);
}
// 切换视图
private void updateView(LatLng poi) {
if (point != null) {
CameraPosition camerapoint = new CameraPosition.Builder()
.target(poi).zoom(zoomLevel).bearing(0).tilt(45).build();
changeCamera(CameraUpdateFactory.newCameraPosition(camerapoint),
null);
} else {
Toast.makeText(Gzgj.this, "没有可显示的轨迹信息", Toast.LENGTH_LONG).show();
}
}
/**
* 根据动画按钮状态,调用函数animateCamera或moveCamera来改变可视区
*
*/
private void changeCamera(CameraUpdate update, CancelableCallback callback) {
aMap.moveCamera(update);
}
private void addMarker(LatLng poi, String title, String snippet) {
Marker startMarker = aMap.addMarker((new MarkerOptions()).position(poi)
.icon(BitmapDescriptorFactory.defaultMarker()).title(title)
.snippet(snippet));
startMarker.showInfoWindow();
}
// private void drawLine(Marker start ,Marker end){
// aMap.addPolyline((new PolylineOptions())
// .add(start.getPosition(), end.getPosition())
// .color(Color.RED).width(5));
// }
private void drawLine(ArrayList<LatLng> poiList) {
aMap.addPolyline((new PolylineOptions()).addAll(poiList)
.color(Color.RED).width(5));
}
// end------------------------------------------------------------------------------
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
releaseListener();
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onInfoWindowClick(Marker marker) {
if (marker.isInfoWindowShown()) {
marker.hideInfoWindow();
}
}
@Override
public void onMapClick(LatLng arg0) {
}
@Override
public boolean onMarkerClick(Marker arg0) {
return false;
}
@Override
public View getInfoContents(Marker arg0) {
return null;
}
@Override
public View getInfoWindow(Marker arg0) {
return null;
}
@SuppressLint("NewApi")
private String splitStr(String str, int length) {
StringBuffer sbBuffer = new StringBuffer();
if (str.length() <= length) {
sbBuffer.append(str);
} else {
int len = str.length() / length;
for (int i = 0; i <= len; i++) {
sbBuffer.append("</br>");
if (length <= str.length() && i != len) {
sbBuffer.append(str.substring(i * length, (i + 1)
* length));
} else {
sbBuffer.append(str.substring(i * length, str.length()));
}
sbBuffer.append("<br>");
}
}
return sbBuffer.toString();
}
}