Circa una settimana fa, ho riscontrato un problema: su una mappa personalizzata basata su google, i poligoni non venivano visualizzati, mentre i marker per le stesse coordinate sono completamente ok. Nonostante i miei sforzi con l'API di Google Maps, sembra che non riesca a trovarne il motivo.Come si può usare LatLng per posizionare i marcatori su una mappa di Google, ma non per disegnare un poligono?
Here is a link to a screenshot of the map. frecce viola ed i numeri sono il mio Inoltre, essi mostrano:
- Il
google.maps.Marker
ho potuto mettere ai bordi della mia "regione". - L'artefatto generato dal codice
google.maps.Polygon
. È rosso come previsto, ma completamente fuori posto e stranamente piatto.
Qui è la parte del codice in cui vengono generati Marcatori e poligoni:
var regionData = tecMap.regions[r];
var regionMapMarkers = new google.maps.MVCArray();
for (c in regionData.coords) {
var point = projection.worldToMap(regionData.coords[c]);
debugRegionPoints.push(point);
var thisLatLng = projection.fromPointToLatLng(point);
debugRegionLatLngs.push(thisLatLng);
regionMapMarkers.push(thisLatLng);
}
regionMapMarkers.forEach(function(latLng, m){
var marker = new google.maps.Marker({
position: latLng,
map: map,
title: '',
optimized: false
});
regionCorners.push(marker);
});
var paths = new google.maps.MVCArray();
paths.push(regionMapMarkers);
var region = new google.maps.Polygon({
fillColor: "#FF0000",
fillOpacity: 0.35,
map: map,
paths: paths,
strokeColor: "#FF0000",
strokeOpacity: 0.8,
strokeWeight: 2
});
regionPolys.push(region);
Se vi state chiedendo circa l'array di array, è tutto alla pari con il Google Maps Javascript API.
Se si desidera visualizzare la mappa e gli script correlati, è possibile find it here. Il frammento di codice è in Scripts/tectonicus.js
, a partire linea 659.
[Edit] Alcune informazioni di debug:
sembra essere un problema di rendering, non un "calcolo" uno. Da console Firebug, nella mappa ho collegato, sia
regionPolys[0].getPath().getArray();
e
for (i in regionCorners) {console.log(regionCorners[i].getPosition())};
tornerà
P { Na=0.2, Oa=-22.5249097921875}
P { Na=-0.21702715474330336, Oa=-32.7277467}
P { Na=0.19466306397879407, Oa=-37.51230686484375}
P { Na=0.12889785332031245, Oa=-49.04594858671875}
Se ho ragione, significa che hanno le stesse coordinate, che è alla pari con il codice.
[Modifica2] Nuove anticipazioni!
Sembra che i vettori abbiano problemi di rendering quando si tratta di una proiezione personalizzata, come quella utilizzata per visualizzare questa mappa isometrica di Minecraft. (Generato con Tectonicus)
Dopo gli ultimi commenti, sto aggiungendo al codice vivo linkato sopra due nuovi array di debug, debugRegionLatLngs
e debugRegionPoints
. Sopra il codice viene aggiornato in modo da poter vedere cosa contengono.
[Edit3] Proiezione e coordina la ricerca di
Crossing BicycleDude con mio, è ormai quasi certo che è la proiezione personalizzata che distrugge poligoni. Infatti, c'è a possibly related bug in Google Maps' API.
Questa proiezione viene utilizzata perché le mappe Minecraft possono essere virtualmente infinite e devono tuttavia utilizzare una gmap, che si avvolge dopo 360 ° di longitudine.È anche collegato il fatto che le coordinate di ingame sono rese in modo isometrico, mentre gmaps si aspetta qualcosa di più simile alla proiezione di Mercatore.
Ho provato a modificare leggermente la proiezione, ma finora non ho avuto risultati interessanti.
Credo che si sta utilizzando 'path' nelle proprietà poligono, quando in realtà dovrebbe essere' paths' Altrimenti, sarebbe utile vedere il codice live da qualche parte. Cheers, Andres – andresf
Ho trovato spazio per caricare una copia della mappa e il relativo codice. Il link è nella domanda. Se c'è qualche prova che vorresti che io corra, per favore chiedi. :) –
Puoi pubblicare un campione leggermente più piccolo che riproduce questo, o almeno indicarci il codice di Google Maps nel tuo campione? Mi sto perdendo in tutti i file JavaScript ... – bamnet