当前互联网行业竞争激烈,个人小项目有着巨大的发展潜力。今天,我要向大家介绍一个专为公交企业打造叫车软件的私人项目,希望能为有意接手类似项目的同行提供一些实用的经验。
项目背景
城市公交问题在城市交通中广泛存在。有些公交线路长度超过20公里,但站点却非常稀少。增设站点不仅成本高昂,而且需要经历漫长的领导审批过程。为了解决这一难题,公交公司提出了开发类似滴滴打车的公交车服务。目前,这项服务只在一条线路上运行,虽然路线没有改变,但停车点变成了乘客叫车的地点,更加方便乘客。
开发人员与费用
这个团队是由一群热衷于编程的程序员构成的。由于甲方预算有限,我们在开发费用上进行了多次商议,最终确定了数额。虽然利润不高,但这不仅是一个赚钱的机会,更是一次积累经验、提高团队知名度的行动。这样做可以让更多的人认识到我们的实力,为将来承接私人项目奠定基础。
开发方式选择
在这个外包的小项目中,挑选一个经济实惠的开发方案极为关键。虽然原生开发质量上乘,但费用相对较高。我们这次挑选的开发方法可以将多平台开发的成本大幅降低。目前一期项目是小程序,若后续二期要开发APP,也能轻松应对,合理管控开支。
程序功能流程
乘客输入起点与目的地,随后页面将自动跳转至订单页面。在订单页面,乘客可以挑选合适的班次时间。选好后,页面将再次跳转至支付界面。支付成功后,乘客可以查看车辆状态,包括等待发车和正在途中前来接您,信息一目了然,操作简便。
打车范围与算法
public function inArea($x,$y,$arr)
{
//点的数量
$count = count($arr);
$n = 0; //点与线相交的个数
$bool = 0;//外
for ($i = 0, $j = $count - 1; $i =$px1 || $x>= $px2)
{
//判断$y 是否在线的区域
if(($y>=$py1 && $y=$py2 && $y<= $py1)){
if (($y == $py1 && $x == $px1) || ($y == $py2 && $x == $px2)) {
#如果$x的值和点的坐标相同
$bool = 2;//在点上
return $bool;
}else{
$px = $px1+($y-$py1)/($py2-$py1)*($px2-$px1) ;
if($px ==$x)
{
$bool = 3;//在线上
}elseif($px< $x){
$n++;
}
}
}
}
}
if ($n%2 != 0) {
$bool = 1;
}
return $bool;
}
乘客需在规定的电子围栏,即多边形区域内发起打车请求。系统会检查乘客的经纬度是否位于该范围内,并使用相关算法来确定涉及点是否在多边形区域内。您可以通过网络搜索PHP、Java等编程语言的相关实现版本,这些资源为类似项目的开发提供了参考。
/**
*/
static class BoundaryPoint {
public final double x;
public final double y;
public BoundaryPoint(double x, double y) {
this.x = x;
this.y = y;
}
}
static class Boundary {
private final BoundaryPoint[] points;
Boundary(BoundaryPoint[] points) {
this.points = points;
}
boolean contains(BoundaryPoint test) {
boolean result = false;
int i = 0;
for (int j = this.points.length - 1; i test.y != this.points[j].y > test.y
&& test.x < (this.points[j].x - this.points[i].x) * (test.y - this.points[i].y) / (this.points[j].y - this.points[i].y) + this.points[i].x) {
result = !result;
}
}
return result;
}
}
}
位置定位与后端系统
打车应用需要实时更新司机的位置信息。我们通过使用微信小程序内置的API接口来处理这个问题。后端系统主要运行在电脑上,负责管理司机的资料、班车的路线以及订单信息,操作相对简便,可以参照腾讯地图的API文档来开发。
在从事兼职工作时,你曾面临的最棘手的问题是什么?欢迎在评论区告诉我们,同时请不要忘记为这篇文章点赞和转发!