Mam MapView, że wyświetlam "użyteczny promień" (myślę o dokładności współrzędnych). Używanie 's Projection' s metersToEquatorPixels, co jest wprawdzie tylko dla odległości równikowej) nie daje mi wystarczająco dokładnej odległości (w pikselach). Jak byś to obliczył, gdybyś chciał wyświetlić okrąg wokół swojej współrzędnej, z podanym promieniem?Jak obliczyć promień wokół punktu w Android MapView?
Odpowiedz
Mapy Google używają numeru Mercator projection. Oznacza to, że im dalej dostaniesz się od równika, tym bardziej zniekształcone stają się odległości. Według this discussion, właściwy sposób przekonwertować na dystansach jest coś takiego:
public static int metersToRadius(float meters, MapView map, double latitude) {
return (int) (map.getProjection().metersToEquatorPixels(meters) * (1/ Math.cos(Math.toRadians(latitude))));
}
Dziękuję za odpowiedź. Ale miałem pytanie dotyczące tego równania. Czy to równanie jest wystarczająco ciężkie, aby spowolnić działanie aplikacji? Po prostu ciekawy. – Ahmed
Jedyna potencjalnie czasochłonna część formuły to Math.cos(). Możesz użyć funkcji android.util.FloatMath.cos(), aby przyspieszyć działanie lub nawet zachować tabelę wstępnie obliczonych czynników, np. za każdy pełny stopień. Następnie możesz po prostu powiedzieć return (int) (map.getProjection(). MetersToEquatorPixels (metry) * współczynnik [(int) szerokość geograficzna). – Ridcully
projection.toPixels(GeoP, pt);
float radius = projection.metersToEquatorPixels(50);
Spróbuj i zobacz ... Używałem go na moim MapRadius i wydaje się działać
Jeśli zobaczysz moją odpowiedź, zobaczysz dokładnie, dlaczego to nie zadziała we wszystkich przypadkach –
mMap.addCircle(
new CircleOptions().center(
new LatLng(
bounds.getCenter().latitude,
bounds.getCenter().longitude
)
)
.radius(50000)
.strokeWidth(0f)
.fillColor(0x550000FF)
);
Odpowiedź wymaga sformatowania i dodaje trochę więcej kontekstu na temat działania twojego kodu i jak rozwiązuje problem OP! – abhiarora
Można to również prawdopodobnie stwierdzić jako: Mam współrzędne GPS i odległość, w jaki sposób mogę narysować okrąg, który obejmuje promień z punktu GPS? –
Nie jestem pewien, czy rozumiem problem - co masz na myśli mówiąc, że nie zapewnia wystarczająco dokładnego dystansu? To, co miałeś na myśli to powiedzieć 100m, ale pokazuje tylko krąg na 50m czy coś w tym stylu? –
Tak. Jest znacznie za dużo. –