在 Openstreetmap 中的路径内单击
Click inside the Path in Openstreetmap
我的 openstreetmap 应用程序中有两个叠加层,即分项叠加层和路径叠加层。我想在路径覆盖和自定义标记内的路径内提供点击
不适用于 PathOverlay。
使用 OSMBonusPack Polyline。
如果您只想打开一个气泡,请使用 setInfoWindow。
如果你想做其他事情,继承自 Polyline class,覆盖 onSingleTapConfirmed,并使用 isCloseTo。
我终于得到了上述问题的答案...
*将所有路径叠加层添加到一个层中...
*在点击检查 isPointOnLine(lox,loy,ltx,lty, x, y)
public boolean isPointOnLine(double lox, double loy, double ltx,
双 lty, 双 x, 双 y) {
//判断点是否在线
双 dx = x - lox;
双 dy = y - loy;
双 tx = ltx - lox;
双 ty = lty - loy;
// normalise the line vector
Double t1 = new Double(1 / Math.sqrt(tx * tx + ty * ty));
tx *= t1;
ty *= t1;
// calculate inverse length of secondary vector
Double dl = new Double(1 / Math.sqrt(dx * dx + dy * dy));
// take dot product of normalised line vector, and rotated normalised
// secondary vector
Double dot = (dy * tx - dx * ty) * dl;
// Increase these values for less or more picky
if (dot < -0.2 || dot > 0.2)
return false;
// calculate distance along line segment by taking dot product of
// normalised
// line vector and un-normalised secondary vector
Double dis = tx * dx + ty * dy;
if (dis < 0 || dis > 1 / t1)
return false;
return true;
}
我的 openstreetmap 应用程序中有两个叠加层,即分项叠加层和路径叠加层。我想在路径覆盖和自定义标记内的路径内提供点击
不适用于 PathOverlay。 使用 OSMBonusPack Polyline。
如果您只想打开一个气泡,请使用 setInfoWindow。
如果你想做其他事情,继承自 Polyline class,覆盖 onSingleTapConfirmed,并使用 isCloseTo。
我终于得到了上述问题的答案...
*将所有路径叠加层添加到一个层中... *在点击检查 isPointOnLine(lox,loy,ltx,lty, x, y)
public boolean isPointOnLine(double lox, double loy, double ltx, 双 lty, 双 x, 双 y) { //判断点是否在线 双 dx = x - lox; 双 dy = y - loy; 双 tx = ltx - lox; 双 ty = lty - loy;
// normalise the line vector
Double t1 = new Double(1 / Math.sqrt(tx * tx + ty * ty));
tx *= t1;
ty *= t1;
// calculate inverse length of secondary vector
Double dl = new Double(1 / Math.sqrt(dx * dx + dy * dy));
// take dot product of normalised line vector, and rotated normalised
// secondary vector
Double dot = (dy * tx - dx * ty) * dl;
// Increase these values for less or more picky
if (dot < -0.2 || dot > 0.2)
return false;
// calculate distance along line segment by taking dot product of
// normalised
// line vector and un-normalised secondary vector
Double dis = tx * dx + ty * dy;
if (dis < 0 || dis > 1 / t1)
return false;
return true;
}