Ich frage Sie, weil ich seit ein paar Tagen kämpfte; Ich habe das Internet und stackoverflow durchsucht und nichts gefunden.Problem mit lat und lange Genauigkeit, abhängig von den Orten
Ich muss Marker/Kreise/was auch immer ziemlich genau auf einer Karte platzieren. Es scheint jedoch, dass ich sie nur auf einem Gitter zeichnen kann, dessen Genauigkeitsgrad von der Stelle abhängt, an der ich mich befinde. Daher ist ihre Position nicht genau genug.
Ich verwende Wt (C++), aber es scheint nicht Teil des Problems zu sein. Ich schrieb Code, der ein 20 * 20 Array von Kreisen zeichnet, deren Koordinaten gleichmäßig verteilt sind. Ich bekomme nicht die gleichen Ergebnisse, egal ob ich in Paris oder in New York bin.
In Paris: (kann keine Bilder veröffentlichen, weil es meine erste Frage ist) http://img818.imageshack.us/img818/7841/parism.png
In New York: http://img193.imageshack.us/img193/9822/newyorkq.png
In Paris, ich Genauigkeit in der Länge, aber nicht in Breite. In New-York kann ich weder in der Breite noch in der Länge Genauigkeit erhalten. Hier
ist der Code, den ich verwendet:
/*Choose between both*/
double centerLat = 40.714468; double centerLng = -74.005966;//New-York
//double centerLat = 48.854607; double centerLng = 2.347126;//Paris
/*Other parameters*/
double lngMargin = 0.000400;
double latMargin = 0.000400;
int granularity = 20;
int i,j;
WVBoxLayout* layout = new WVBoxLayout();
WColor::WColor myBlue = WColor::WColor(0,0,255,255);
WColor::WColor myRed = WColor::WColor(255,0,0,255);
WColor::WColor myTransparent = WColor::WColor(0,0,0,0);
WGoogleMap::Coordinate coordArray[granularity][granularity];
/* Creating and configuring the map */
WGoogleMap *map = new WGoogleMap(WGoogleMap::Version3);
WGoogleMap::Coordinate centerCoord = WGoogleMap::Coordinate(centerLat,centerLng);
setLayout(layout);
resize(height,width);
map->setCenter(centerCoord,19);
map->setMapTypeControl(WGoogleMap::DefaultControl);
map->enableScrollWheelZoom();
map->addCircle(centerCoord,2,myBlue,2,myTransparent);
/* Here is the loop that draws the circles */
for(i=0 ; i<=granularity-1 ; i++){
for(j=0 ; j<=granularity-1 ; j++){
coordArray[i][j] = WGoogleMap::Coordinate(centerLat + beforeOrAfterTheCenter_Lat * (latMargin/granularity) * i,
centerLng + beforeOrAfterTheCenter_Lng * (lngMargin/granularity) * j);
map->addCircle(coordArray[i][j],1,myRed,2,myTransparent);
}
}
Der Code soll in Ordnung arbeiten. Hast du eine Ahnung, was ich tun könnte, um mehr Genauigkeit zu erreichen? Ist es ein bekanntes Problem?
Ihnen für jede Hilfe Vielen Dank,
Meine Vermutung ist, dass die Projektion gleiche Unterschiede in lat, lon Grad ungleich in Pixeln macht. Versuchen Sie, Ihr Gitter zu zeichnen (Lat, lon) und dann (-Lat, lon), um zu sehen, ob die Form ähnlich oder umgekehrt ist.Vielleicht funktioniert es am Äquator? –
Heitor, du hast Recht. Vielen Dank. In der Nähe von (0,0) habe ich ein perfektes Gitter, aber je weiter ich von diesem Punkt aus gehe, desto schlimmer wird es. Ich werde versuchen, eine Lösung mit dem mapCanvasProjectionObject herauszufinden, und wird Sie auf dem Laufenden halten. Denkst du, es könnte funktionieren? Würdest du etwas anderes versuchen? – Luke
Ich glaube es gibt Projektionen wo gleich lat und lang sind. Entfernungen erscheinen gleich weit entfernt. Ich denke jedoch, dass es schwierig werden wird, die LatLngs unter der Projektion von Google Maps in neue LatLngs in der äquidistanten Projektion zu konvertieren. Es könnte Formeln geben. Ich kenne keine Möglichkeit, die Projektion in Google Maps zu ändern. –