Detecção de toque de polígono Google Map API V2
Eu estou tentando descobrir a melhor maneira de fazer isso, eu tenho um mapa com umPolygon
desenhado nele. Como não parece que a API do Google Maps V2 tenha uma detecção de toque em um polígono. Fiquei imaginando se é possível detectar se o ponto de contato está dentro do polígono? Se sim, então, como, meu principal objetivo é delinear um estado em um mapa e quando o usuário tocar nesse estado, ele mostrará mais detalhes dentro de uma visualização personalizada. A partir de agora eu sou capaz de capturar oMapOnClick
do mapa, mas quando o usuário toca dentro doPolygon
eu quero opolygon.getID()
definido noToast
. Eu sou um novato, então peço desculpas se não for claro o suficiente.
googleMap.setOnMapClickListener(new OnMapClickListener()
{
public void onMapClick(LatLng point)
{
boolean checkPoly = true;
Toast.makeText(MainActivity.this,"The Location is outside of the Area", Toast.LENGTH_LONG).show();
}
});
}
}
catch (Exception e) {
Log.e("APP","Failed", e);
}
Ok, isso é o que eu tenho semi-trabalhando até agora
private boolean rayCastIntersect(LatLng tap, LatLng vertA, LatLng vertB) {
double aY = vertA.latitude;
double bY = vertB.latitude;
double aX = vertA.longitude;
double bX = vertB.longitude;
double pY = tap.latitude;
double pX = tap.longitude;
if (aY > bY) {
aX = vertB.longitude;
aY = vertB.latitude;
bX = vertA.longitude;
bX = vertA.latitude;
}
System.out.println("aY: "+aY+" aX : "+aX);
System.out.println("bY: "+bY+" bX : "+bX);
if (pX < 0) pX += 360;
if (aX < 0) aX += 360;
if (bX < 0) bX += 360;
if (pY == aY || pY == bY) pY += 0.00000001;
if ((pY > bY || pY < aY) || (pX > Math.max(aX, bX))) return false;
if (pX < Math.min(aX, bX))
return true;
// }
double m = (aX != bX) ? ((bY - aY) / (bX - aX)) : aX;
double bee = (aX != pX) ? ((pY - aY) / (pX - aX)) : aX;
double x = (pY - bee) / m;
return x > pX;
}
}
O problema que estou tendo é que o toque é verdadeiro à esquerda de cada polígono até chegar a outro. O que há de errado com meu algoritmo que causaria esse problema? Qualquer ajuda seria apreciada.