Używam MKMapView
i wysyłam program php w widoczny region (środek lat, centrum lon, span lat, span lon). Muszę ustalić, czy współrzędne znajdują się w tym regionie za pomocą php. Mam nadzieję, że gdzieś istnieje standardowa formuła, ale ja jej nie znalazłem. Będę starał się wymyślić formułę, ale jest to zaskakująco skomplikowane (mam nadzieję, że nie tak bardzo jak haversine, o którym nie wierzę, że mogłem sam się zorientować).Ustal, czy współrzędne znajdują się w regionie (MKMapView, rozwiąż w PHP)
Odpowiedz
moje rozwiązanie
$top = $c_lat + ($d_lat/2.0);
$bottom = $c_lat - ($d_lat/2.0);
$left = $c_lon - ($d_lon/2.0);
$right = $c_lon + ($d_lon/2.0);
if($left < -180)
{
$second_left = $left + 360.0;
$second_right = 180.0;
$left = -180;
}
elseif($right > 180)
{
$second_right = $right - 360.0;
$second_left = -180.0;
$right = 180.0;
}
$inside = false;
if($t_lat > $bottom && $t_lat < $top && $t_lon > $left && $t_lon < $right)
$inside = true;
else if($second_right && $second_left)
{
if($t_lat > $bottom && $t_lat < $top && $t_lon > $second_left && $t_lon < $second_right)
$inside = true;
}
if($inside)
{
}
To wydaje się działać z MKMapView
od szerokości geograficznej regionu są zawsze pomiędzy -90 i 90.
Ta logika powinno działać:
if (($X > $center_lat - $span_lat/2) &&
($X < $center_lat + $span_lat/2) &&
($Y > $center_lon - $span_lon/2) &&
($Y < $center_lon + $span_lon/2)) {
echo "It's inside!";
} else {
echo "It's outside ...";
}
Życzę było to proste. Powinienem był wyjaśnić, współrzędne szerokości "mapView.region" wynoszą -90 do 90, a długość geograficzna -180 do 180. To trudna część. Jeśli długość punktu wynosiła -179, a centrum regionu Długość = 179 z 20 rozpiętościami, trzeci warunek powyżej byłby fałszywy, ale punkt mógł nadal być w środku. –
spróbujmy Ta logika
$topRightLongitude = $centerLongitude + $spanLongitude/2;
if($topRightLongitude > 180 and ($pointLongitude < 0))
$topRightLongitude = $topRightLongitude - 360; // (180*2) - positive becomes negative
$bottomLeftLongitude = $centerLongitude - $spanLongitude/2;
if($bottomLeftLongitude< -180 and ($pointLongitude > 0))
$bottomLeftLongitude= 360 + $bottomLeftLongitude; // now is negative and will become positive
$topRightLatitude = $centerLatitude + $spanLatitude/2;
if($topRightLatitude > 90 and ($pointLatitude < 0))
$topRightLatitude = $topRightLatitude - 180; // (90*2) - positive becomes negative
$bottomLeftLatitude = $centerLatitude - $spanLatitude/2;
if($bottomLeftLatitude< -90 and ($pointLatitude > 0))
$bottomLeftLatitude= 180 + $bottomLeftLongitude; // now is negative and will become positive
jeśli masz
$centerLongitude = 179;
$spanLongitude = 20;
$pointLongitude = -179;
wyniki
$topRightLongitude = -171;
$bottomLeftLongitude = 169;
więc chodzi o to, jeśli testować tak:
if($pointLongitude < $topRightLongitude &&
$pointLongitude > $bottomLeftLongitude &&
$pointLatitude < $topRightLatitude &&
$pointLatitude > $bottomLeftLatitude){
echo 'in';
}else{
echo 'out';
}
Pracowałem rozwiązanie dla własnego problemu wcześniej, ale dla wartości dziesiętnych współrzędnych i to działa. Może być, jeśli możesz przekonwertować deg na dziesiętny, może to zadziałać.
Zmieniono nazwę zmiennej zgodnie z Twoim problemem.
Oto logika.
if
(
(
($lat - $spanLat) < $centerLat &&
$centerLat < ($lat+ $spanLat)
) &&
(
($long - $spanLong) < $centerLong &&
$centerLong < ($long + $spanLong)
)
)
- 1. MKMapView współrzędne geograficzne
- 2. Skąd możemy wiedzieć, że Współrzędne mapy są w bieżącym regionie lub nie w bieżącym regionie?
- 3. Uzyskaj współrzędne punktu od mkmapview na iphone
- 4. Focus MKMapView na NSString Współrzędne z MKCoordinateRegion
- 5. php - ustal, czy DateTime przypada na DateInterval
- 6. Sprawdź, czy znaczniki mapy znajdują się w wybranych granicach
- 7. Gdzie znajdują się logi?
- 8. Ustal, czy punkt znajduje się w ramce ograniczającej
- 9. Ustal, czy lokalizacja pamięci znajduje się w pamięci podręcznej CPU
- 10. Ustal, czy liczba mieści się w określonym zbiorze przedziałów
- 11. Rozwiąż DisconnectedContext w Visual Studio
- 12. Możliwy błąd w MKMapView
- 13. Gdzie znajdują się pliki opencv2?
- 14. Ustal, czy podgląd jest widoczny w UIScrollView
- 15. Jakie są sekundy w regionie?
- 16. Ustal, czy pliki PHP działają jako część `phar` archiwum
- 17. Jak mogę sprawdzić, czy zdarzenie regionChange w MKMapView jest programowane czy przeciągane przez użytkownika MKMapView?
- 18. Przenoszenie MKCircle w MKMapView
- 19. Ustal, czy nastąpiła zmiana dzienna
- 20. Ustal, czy widok jest na ekranie - Android
- 21. Jak sprawdzić, czy wszystkie poniższe pozycje znajdują się na liście?
- 22. ustal, czy ciąg wartości kolumny zaczyna się od numeru
- 23. Ustal, czy typ jest statyczny.
- 24. Clojure: ustal, czy istnieje funkcja
- 25. Sprawdź, czy podciągi znajdują się na liście ciągów znaków?
- 26. Jakie stacje benzynowe, restauracje itp. Znajdują się w danym mieście?
- 27. Ustal, czy ciąg rozpoczyna się literami od A do I
- 28. Dlaczego metody Meteorytów znajdują się w pliku models.js?
- 29. AngularJs $ scope undefined, gdy kontrolery znajdują się w module
- 30. Sekcja łącznika gnu w nieciągłym regionie pamięci
Spojrzałem na ciebie i coś mi się nie podobało, zrobiłem test z centrum (179,89) i rozpiętością (20,20) i punktem (-179, -89) i wyszedłem na zewnątrz, ale punkt jest w środku, ponieważ 179 + 10 = 189 w wyniku -171 i 89 + 10 = 99 w wyniku -81, więc punkt znajduje się pomiędzy środkowym i prawym górnym rogiem. – Macerier
mapView tylko przewija się od lewej do prawej, więc nigdy nie możesz mieć centa lat 89 i rozpiętości większej niż 2. Zasadniczo stworzyłem dwa regiony i przetestowałem je, jeśli region przekroczył 180 lub -180. również twój anwswer jest użyteczny, ale przykładowy punkt wygląda tak, jakby był na zewnątrz przez tę logikę, kiedy jest w środku. ('$ pointLongitude> $ bottomLeftLongitude') –