移动端地图:屏幕边沿方向指示图标

写在前面

在我们打游戏的时候,队友跑出我们的屏幕可视区域外时,经常会有一个头像图标在屏幕的边沿,并且起着指示队友方向的作用。

在移动端地图应用的开发中,同样可能会有这种需求,下面将着重讲解设计思路(Android、iOS都适用),github代码在这里(iOS代码): https://github.com/indulgeIn/YBAnnotationViewSet

设计思路

我们从图中可以直观的看出,A点与B点所形成的线段和屏幕边沿的交点即为我们需要的点。

那么我们的思路就出来了: 直接计算A、B所形成的线段与屏幕四个边缘的交点,相当于我们需要得到五条线段。值得注意的是,我们用的是线段,而非直线,因为如果用直线来计算,将会得到至少两个交点,而用线段则必然只得到一个交点(希望初中数学知识还记得)。 Demo里面有计算线段交点函数(OC写的,Android直接改一下就行了)。

我们来说说实现的步骤:

for Android

将A、B两点的经纬度转换为屏幕坐标系的点(高德和百度都有对应方法),然后结合屏幕四个角的屏幕坐标系点,计算出来交点(计算线段交点的方法demo里有)。

for iOS

iOS有个蛋疼的地方,当经纬度距离屏幕中心点过远时,将无法通过地图的SDK方法装换成屏幕坐标系点。所以,iOS这边的话必须得换个思路处理: 将屏幕四个角的点转换为地图上的经纬度(地图SDK有方法),然后将这些经纬度的点看成是一个标准的坐标系,同样使用计算线段交点的方法算出交点。然后得到的交点转换为屏幕坐标系点就行了。

这里讲述得很简单,iOS端具体的实现可以看demo: https://github.com/indulgeIn/YBAnnotationViewSet

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏GreenLeaves

Javascript之Dom学习

1.简介:DOM是一套对文档的内容进行抽象和概念化的方法。在现实世界里,人们对"世界对象模型"一定不会陌生,当人们用"房子","汽车"等这一类专用名字来描述生活...

21190
来自专栏灯塔大数据

技术 | Python从零开始系列连载(二十三)

为了解答大家学习Python时遇到各种常见问题,小灯塔特地整理了一系列从零开始的入门到熟练的系列连载,每周五准时推出,欢迎大家学积极学习转载~

15830
来自专栏恰童鞋骚年

使用Unity3D的设计思想实现一个简单的C#赛车游戏场景

最近看了看一个C#游戏开发的公开课,在该公开课中使用面向对象思想与Unity3D游戏开发思想结合的方式,对一个简单的赛车游戏场景进行了实现。原本在C#中很方便地...

14630
来自专栏韩伟的专栏

你真的理解数码技术吗?(完)

1.3 图片是如何用数字来记录的 除了文字以外,人类表达信息的另外一个重要手段就是图案。图画对比文字,更能在不同语言、不同种族间的人们之间传递信息。 1.3....

27350
来自专栏慎独

Unity第三人称视角解决方案

33920
来自专栏MelonTeam专栏

[译]Android Interpolator详解

原文地址:<https://blog.mindorks.com/understanding-interpolators-in-android- ce4e8d1d...

22270
来自专栏逍遥剑客的游戏开发

Direct3D学习(六):动画基础(3)网格模型基础

14860
来自专栏数据小魔方

一篇小短文助你打开数据可视化的任督二脉!

本文主要讨论ggplot2是如何通过颜色信号来对多边形进行填充的底层理念,这也是想要进阶R语言数据可视化过程中必须搞明白的关键环节。 ggplot2所有图层对象...

34940
来自专栏潇涧技术专栏

When Math meets Android Animation (1)

当数学遇上动画:讲述ValueAnimator、TypeEvaluator和TimeInterpolator之间的恩恩怨怨(1)

9920
来自专栏葡萄城控件技术团队

WPF/Silverlight Layout 系统概述——Measure

前言 在WPF/Silverlight当中,如果已经存在的Element无法满足你特殊的需求,你可能想自定义Element,那么就有可能会面临重写Measure...

20380

扫码关注云+社区

领取腾讯云代金券