Dividi la mappa del mondo in blocchi di dimensioni fisse

3

Sto sviluppando un'applicazione in cui ho bisogno di dividere l'intera mappa del mondo in blocchi quadrati di dimensioni fisse. Per semplicità, pensalo come un problema di divisione delle mappe di google in un blocco di dimensioni fisse. Posso scegliere qualsiasi punto arbitrario nella mappa e la mia app deve creare un blocco di dimensioni fisse attorno a quel punto.

La preoccupazione principale qui è quando scelgo un punto e definisco un blocco attorno ad esso, non ci dovrebbe mai essere una sovrapposizione tra questo blocco e qualsiasi altro blocco che è stato definito in precedenza. In altre parole, qualsiasi punto può appartenere a uno e solo un blocco.

Qual è il miglior algoritmo che posso usare per fare questo? Sto indovinando che questo è un problema che è stato risolto prima e non richiede di reinventare la ruota.

In questo momento, tutto quello che sto facendo è quando l'utente seleziona un punto, ottengo la latitudine e la longitudine del punto e definisco un blocco quadrato attorno ad esso. Mentre sto facendo, sto facendo un controllo per vedere se il nuovo blocco si sovrapporrà o meno ad altri blocchi intorno ad esso.

Qualsiasi aiuto sarebbe molto apprezzato.

    
posta CuriousCoder 22.01.2016 - 17:14
fonte

1 risposta

2

Non puoi mappare la superficie di una sfera su una griglia quadrata piana, mentre allo stesso tempo preservare distanza, area e angoli - ci deve essere una sorta di compromesso. Vedi qui per ulteriori dettagli.

Se vuoi veramente "elementi di uguale dimensione", una soluzione migliore potrebbe essere quella di utilizzare un sistema di coordinate sferiche - latitudine e longitudine con elementi di lunghezza d'arco uguale. In questo modo, qualsiasi punto sulla superficie può essere assegnato a un singolo elemento. Tuttavia questo significa che gli elementi non sono perfettamente quadrati, quindi se li trattate come tali, vi sarà una leggera distorsione. Inoltre, tutti gli elementi avranno la stessa altezza, ma diventeranno progressivamente più stretti man mano che ci si allontana dall'equatore.

Supponendo che la Terra sia una sfera perfetta di raggio 6371 Km, e usando una granularità di 1 grado, ogni elemento sarà 111,19 km da nord a sud. Quelli lungo l'equatore saranno 111,19 Km lungo il margine meridionale ma 111,17 Km lungo il margine settentrionale. Avresti difficoltà a notare questa differenza dello 0.02% anche se lo hai trattato come un quadrato.

Mentre ti sposti più a nord, la differenza tra i bordi nord e sud della lunghezza diventa più pronunciata.

per esempio: -

Città del Guatemala (15 gradi a nord) 107,89 - 107,41 Km (0,45%)

San Antonio (30 gradi nord) 97,25 - 96,26 Km (0,98%)

Lione (45 gradi nord) 78,62 - 77,24 Km (1,76%)

Oslo (60 ° nord) 57,27 - 55,60 km (2,92%)

Quindi puoi disegnare una griglia alta di 5 elementi centrata su una qualsiasi di queste città con una distorsione limitata, solo con gli elementi che diventano più rettangolari mentre ti sposti verso nord, quindi hai bisogno di più elementi per la stessa distanza orizzontale. È solo quando arrivi ai poli che inizi a ottenere grossi problemi, con l'elemento finale che è effettivamente un triangolo, arrivando a un punto al polo.

Se dovessi eseguire lo zoom utilizzando una granularità più piccola, ad esempio 0,1 gradi di arco, la "quadratura" degli elementi migliora. Dovresti andare a 80.2 gradi nord prima di ottenere anche una differenza dell'1% tra le lunghezze dei bordi nord e sud, anche se questi elementi avranno un allungamento di 5.8: 1 - 11.1 x 1.89 km. Questo è quasi sufficiente per coprire il luogo abitativo permanente più a nord del mondo - Albert, Canada è 82,5 gradi a nord.

    
risposta data 22.01.2016 - 23:32
fonte

Leggi altre domande sui tag