Sto usando MKMapView
e invio il mio programma php alla regione visibile (centro lat, centro lon, span lat, span lon). Devo determinare se una coordinata si trova all'interno di quella regione usando php. Spero che ci sia una formula standard da qualche parte, ma non l'ho trovata. Continuerò a cercare di trovare una formula, ma è sorprendentemente complicata (spero non tanto quanto la haversine, che non credo di aver capito da solo).Determina se la coordinata è all'interno della regione (MKMapView, risolvi in PHP)
risposta
mia soluzione
$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)
{
}
Questo sembra funzionare con MKMapView
dal momento che le latitudini regione sia sempre compresa tra -90 e 90.
Questa logica dovrebbe funzionare:
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 ...";
}
Vorrei che fosse così semplice. Avrei dovuto chiarire, le coordinate di latitudine 'mapView.region' sono da -90 a 90 e la longitudine da -180 a 180. Questa è la parte difficile. Se la longitudine puntuale era -179 e la regione centerLongitude = 179 con 20 span, la terza condizione precedente sarebbe falsa, ma il punto potrebbe ancora essere all'interno. –
Proviamo questa logica
$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
se avete
$centerLongitude = 179;
$spanLongitude = 20;
$pointLongitude = -179;
risultati
$topRightLongitude = -171;
$bottomLeftLongitude = 169;
in modo che il punto è se si prova in questo modo:
if($pointLongitude < $topRightLongitude &&
$pointLongitude > $bottomLeftLongitude &&
$pointLatitude < $topRightLatitude &&
$pointLatitude > $bottomLeftLatitude){
echo 'in';
}else{
echo 'out';
}
avevo lavorato una soluzione per il mio problema prima, ma per i valori decimali di coordinate e funziona. Può essere se puoi convertire deg in decimale potrebbe funzionare.
Ho rinominato la variabile in base al problema.
Ecco la logica.
if
(
(
($lat - $spanLat) < $centerLat &&
$centerLat < ($lat+ $spanLat)
) &&
(
($long - $spanLong) < $centerLong &&
$centerLong < ($long + $spanLong)
)
)
- 1. MKMapView Zoom e regione
- 2. Come sapere se MKMapView visibleMapRect contiene una coordinata?
- 3. MKMapView erroneamente visualizzata salvato regione
- 4. C++ determina se la classe è paragonabile
- 5. Determina se WindowServer è disponibile?
- 6. Determina se la pagina è valida in JavaScript - ASP.NET
- 7. Determina se LTE è attivato?
- 8. Determina se il modulo Magento è abilitato
- 9. Determina se l'oggetto è intero
- 10. MKMapView NSInvalidArgumentException non valido Regione accelerato di iOS6
- 11. Impostazione MKMapView Livello di zoom iniziale
- 12. Determina se il negozio è aperto?
- 13. Determina se la pagina web ha lo stato attivo della finestra in primo piano/è attiva?
- 14. Determina se un websocket send() è finito
- 15. Clojure: Determina se una variabile è dichiarata
- 16. Determina se un'immagine è in scala di grigi in Matlab
- 17. python: determina se una classe è nidificata
- 18. Applicazione Windows determina se TextBlock è tagliato
- 19. Determina se la stringa è tutte maiuscole con espressione regolare
- 20. Determina se un file è aperto
- 21. Determina se la pagina corrente richiede l'autorizzazione?
- 22. Determina la versione PHP richiesta obbligatoria
- 23. Come posso sapere quando l'evento regionChange su MKMapView è programmato o trascinato dall'utente di MKMapView?
- 24. Risolvi la struttura dell'unione in Rust FFI
- 25. coordinata shader libGDX e posizione della telecamera
- 26. In che modo esattamente Android determina se è online?
- 27. Risolvi IP su Nome host usando PHP
- 28. MKMapView set region
- 29. Prevenire la modifica della selezione di MKMapView (in modo pulito)
- 30. Determina se un file è realmente un'immagine in express/node.js
ho guardato il tuo codice e qualcosa mi sembrava sbagliato, ho fatto un test con il centro (179,89) e l'intervallo (20,20) e il punto (-179, -89) e sono uscito fuori ma il punto è all'interno perché 179 + 10 = 189 risultante -171 e 89 + 10 = 99 risultante -81 quindi il punto è tra il centro e l'angolo in alto a destra. – Macerier
mapView scorre solo da sinistra a destra in modo da non avere mai un centro lat di 89 e uno span di più di 2. In pratica ho appena creato due regioni e le ho provate entrambe se la regione ha superato 180 o -180. inoltre, la tua risposta è utile, ma il punto di esempio sembra essere fuori da quella logica, quando è effettivamente dentro. ('$ pointLongitude> $ bottomLeftLongitude') –