using System.Collections;
using TencentMap.API;
using TencentMap.CoordinateSystem;
using UnityEngine;
using UnityEngine.EventSystems;
public class xxlDemo : MonoBehaviour, IDragHandler, IBeginDragHandler, IEndDragHandler
{
[Header("地图控制器脚本"),SerializeField]
private MapController m_map;
[Header("地图移动速度"), SerializeField]
private float m_speed = 20f;
private IEnumerator zoom_coroutine;
private bool m_moveDirty = false;
private Vector2 m_upPos = Vector2.zero;
private Vector2 m_offset = Vector2.zero;
//缩放
private Vector3 originPos0 = Vector3.zero;
private Vector3 originPos1 = Vector3.zero;
void Start()
{
m_map.SetCoordinate(new Coordinate(39.990255, 116.483988));
m_map.DidRender();
}
void Update()
{
//缩放地图
if (Input.touchCount == 2)
{
if (originPos0 == Vector3.zero || originPos1 == Vector3.zero)
{
originPos0 = Input.GetTouch(0).position;
originPos1 = Input.GetTouch(1).position;
return;
}
float distance1 = Vector3.Distance(originPos0, originPos1);
float distance2 = Vector3.Distance(Input.GetTouch(0).position, Input.GetTouch(1).position);
if (Mathf.Abs(distance1 - distance2) > 5)
ZoomTo(distance1, distance2);
originPos0 = originPos1 = Vector3.zero;
return;
}
else
{
originPos0 = originPos1 = Vector3.zero;
}
//移动地图
if (m_moveDirty)
{
m_map.MoveOffset(m_offset.x * m_speed, m_offset.y * m_speed);
m_map.DidRender();
m_moveDirty = false;
}
}
#region 移动地图
public void OnBeginDrag(PointerEventData eventData)
{
m_upPos = eventData.position;
}
public void OnDrag(PointerEventData eventData)
{
m_offset = (m_upPos - eventData.position ).normalized;
m_upPos = eventData.position;
m_moveDirty = true;
}
public void OnEndDrag(PointerEventData eventData)
{
m_moveDirty = false;
}
#endregion
#region 缩放地图
//平滑缩放地图
private void ZoomTo(float distance1,float distance2)
{
double from = m_map.GetZoomLevel();
// 停止之前的动画.
if (zoom_coroutine != null)
{
StopCoroutine(zoom_coroutine);
zoom_coroutine = null;
}
double zoomLevel = CalZoomLevelDelta(m_map.GetZoomLevel(), distance1, distance2);
zoom_coroutine = ZoomEnumerator(from, zoomLevel, 1f);
StartCoroutine(zoom_coroutine);
}
private IEnumerator ZoomEnumerator(double start, double end, float second)
{
float t = 0.0f;
while (t <= 1.0f)
{
t += Time.deltaTime / second;
double v = Interpolate.Quartic_EaseOut(start, end, t);
m_map.SetZoomLevel(v);
yield return null;
}
originPos0 = originPos1 = Vector3.zero;
m_map.DidRender();
}
//缩放 值
private double CalZoomLevelDelta(double currlevel, float upDist, float curpDist)
{
double nextLevel = currlevel;
if (upDist < curpDist)
nextLevel = currlevel + 1;
else if (upDist > curpDist)
nextLevel = currlevel - 1;
if (nextLevel < 10)
nextLevel = 10;
else if (nextLevel > 16)
nextLevel = 16;
return nextLevel;
}
#endregion
/// <summary>
/// 根据经纬度获取 屏幕坐标(左下角0,0)
/// </summary>
/// <param name="lat"></param>
/// <param name="lon"></param>
/// <returns></returns>
public Vector2 GetHeadScreenPos(double lat,double lon)
{
return m_map.ConvertCoordinateToScreen(new Coordinate(39.990255, 116.483988));
}
}
把unity 腾讯地图sdk导入后,挂上此脚本就可以了,缩放需要在移动端测试