Я пытаюсь выяснить, как это сделать, у меня есть карта с одним Polygon
, нарисованным на ней. Поскольку API Google Maps V2 не имеет сенсорного обнаружения на многоугольнике. Мне было интересно, можно ли определить, находится ли точка касания внутри Polygon? Если да, то как, моя главная цель состоит в том, чтобы нарисовать состояние на карте, и когда пользователь закроет это состояние, он покажет больше деталей внутри пользовательского представления. На данный момент я могу захватить MapOnClick
карты, но когда пользователь вступает в Polygon
, я хочу, чтобы polygon.getID()
был установлен на Toast
. Я новичок, поэтому я приношу свои извинения, если не достаточно ясен.
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);
}
Хорошо, это то, что я до сих пор полуработаю
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;
}
}
Проблема, с которой я столкнулась, - это касание слева от каждого полигона, пока оно не достигнет другого. Что не так с моим алгоритмом, который может вызвать эту проблему? Любая помощь будет оценена.