234 messaggi dal 08 marzo 2012
Ciao,

su una web application Asp.NET MVC devo visualizzare una piccola porzione di mappa che mostra gli spostamenti effettuati.
La mappa deve poter essere visualizzata su schermi di qualsiasi dimensione (da smartphone a schermi giganti).

Sapreste indicarmi una buona soluzione? Ovviamente potrei usare Google Maps ma non saprei se è la cosa più adeguata.

Mi domandavo, se dovessi fare io una semplice immagine che in proporzione la rispetta, come potrei dalle coordinate GPS (Altitudine e Latitudine) trovare le rispettive coordinate sull'immagine per posizione un "pin"?
L'idea di farmi un'immagine nasce dal fatto che potrei personalizzarla molto più di quanto mi permetterebbe di fare una mappa Google o simili (sbaglio)?

Grazie
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao,


Ovviamente potrei usare Google Maps ma non saprei se è la cosa più adeguata.

Sì, a meno che tu non abbia esigenze particolari, è la scelta più facile. Lo stesso dicasi per Bing Maps e OpenStreetMap.

A me una volta è capitato di non poter usare Google Maps perché avevo necessità che le mappe fossero consultate offline da escursionisti. Inoltre, dovevano essere personalizzate per assomigliare a carte topografiche. In quella situazione ho generato i tile della mappa grazie a ArcGIS server usando dei layer base di OpenStreetMap e altri livelli personalizzati che mi hanno fornito dei geologi.
Qui trovi i layer base disponibili in OpenStreetMap.

In pratica, mi sono scritto un'applicazione console che mi invocava il webservice di ArcGIS server per salvare, uno per uno, tutti i tile che mi servivano per coprire quella determinata area geografica.
Puoi scoprire quali tile ti servono da questo servizio:
http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/

Se tu non hai layer personalizzati, puoi fare a meno di ArcGIS server e crearti comunque i tile seguendo queste indicazioni:
https://wiki.openstreetmap.org/wiki/Creating_your_own_tiles

Poi, ottenuti i tile, li dai in pasto a una libreria javascript come questa, che offrirà un'esperienza d'uso simile a Google Maps.
http://leafletjs.com/

Per esempio, ecco come posizionare un marker.
http://leafletjs.com/reference-1.3.0.html#marker

ciao,
Moreno

Enjoy learning and just keep making
234 messaggi dal 08 marzo 2012
Grazie, come sempre gentilissimo!
Non so esattamente cosa sia un "tile" ad ogni modo seguendo il tuo consiglio sono andato sul sito di OpenStreetMap ed ho provato a scaricare una porzione di cartina che mi interessa.
Mi ha quindi generato un file OSM che non è altro che un un XML che descrive la porzione di mappa che ho scaricato.

Mi domando posso riuscire a visualizzarla su una pagina Asp.Net MVC e tramite un javascript, in modo dinamico, posizionarci su dei tag? Magari in modo dinamico usando anche angularjs/angular5?
11.886 messaggi dal 09 febbraio 2002
Contributi
Ciao, prego!
Un "tile" è un'immagine grande solitamente 256x256 pixel su cui è disegnato un pezzo di mappa ad un certo livello di zoom. Quando l'utente sposta la mappa, vengono caricati dal server altri tile per coprire le zone che sono rimaste scoperte.
I quadrati che vedi qui sono appunto i tile. Nota come vengono caricati dinamicamente quando fai lo zoom o quando sposti la mappa.
http://www.maptiler.org/google-maps-coordinates-tile-bounds-projection/

Man mano che l'utente aumenta lo zoom, ogni tile rappresenta una porzione sempre più piccola di territorio ma i nomi delle città sono sempre ben leggibili.
Per questo non puoi semplicemente scaricare un'immagine di 10000 x 10000 pixel e usare solo quella: se l'utente riduce troppo lo zoom, i nomi delle città risulteranno piccolissimi, mentre se l'aumenta, cominceranno a diventare giganti.


Mi domando posso riuscire a visualizzarla su una pagina Asp.Net MVC e tramite un javascript, in modo dinamico, posizionarci su dei tag? Magari in modo dinamico usando anche angularjs/angular5?

Ripeto, io lo farei salvandomi i tile per vari livelli di zoom e dandoli in pasto a leafletJS, che puoi tranquillamente usare in un'applicazione client, che sia Angular o altro.
Qualcuno ha creato la direttiva per angular.
https://github.com/tombatossals/angular-leaflet-directive/blob/master/doc/leaflet-directive.md

ciao,
Moreno
Modificato da BrightSoul il 17 marzo 2018 17.22 -

Enjoy learning and just keep making
234 messaggi dal 08 marzo 2012
Ok, ora mi è chiaro.
Diciamo comunque che io non sono ranto interessato ad una mappa geografica classica ma semplicemente a visualizzare dei tag in movimento.

Lo zoom potrebbe anche non essere necessario, ma mi chiedo se creassi un'immagine che rispetta le proporzioni...nel momento in cui ricevo le coordinate (latitudine e longitudine) potrei convertirle in X e Y al fine di determinarne la posizione sulla mia immagine?

Grazie!
11.886 messaggi dal 09 febbraio 2002
Contributi

nel momento in cui ricevo le coordinate (latitudine e longitudine) potrei convertirle in X e Y


Sì, se il territorio è molto piccolo puoi riuscire a posizionare il tag marker con sufficiente approssimazione anche usando un calcolo semplicistico. Esempio: date latitidune e longitudine degli angoli a nord-est e sud-ovest, e conoscendo larghezza e altezza in pixel dell'immagine puoi determinare deve cade la latitudine e la longitudine che devi rappresentare.

Basta fare una semplice proporzione. Per esempio, X può essere calcolato così (almeno nei paesi a ovest del meridiano di Greenwich come l'Italia)
X : (longitudine da rappresentare - longitudine ovest) = larghezzaImmagine : (longitudine est - longitudine ovest)


Questo però, ripeto, è un'approccio molto semplicistico. Guardati invece queste formule che tengono conto della curvatura della terra. Otterrai un risultato sicuramente più preciso.
https://www.codeproject.com/Questions/626899/Converting-Latitude-And-Longitude-to-an-X-Y-Coordi

ciao,
Moreno
Modificato da BrightSoul il 17 marzo 2018 20.41 -

Enjoy learning and just keep making
234 messaggi dal 08 marzo 2012
BrightSoul ha scritto:

X : (longitudine da rappresentare - longitudine ovest) = larghezzaImmagine : (longitudine est - longitudine ovest)


Sto provando nello stesso modo a calcolare Y

Y : (latitudine da rappresentare - latidudine est) = altezza immagine : (latitudine ovest - latitudine est)

ma il valore che ottengo non è corretto, dove sbaglio?
Modificato da evil80 il 22 marzo 2018 10.28 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.