2016-03-31 4 views
0

Mein Name ist Cyrille und ich arbeite an einer Karten-App auf Codename eins. Ziel ist es, eine App zu erstellen, die den Benutzer nach Unternehmen durchsuchen kann (mit einer Suchleiste) und gewünschte Firmen zu einer Liste hinzufügen kann. Dann erscheint die Liste im Hauptfenster und wenn Sie darauf klicken, wird sie auf der Karte angezeigt.Quelle event merkwürdig Breiten- und Längengrad

Ich habe ein Problem mit dem Ereignis Teil auf Codename eins. Hier ist ein Teil meines Code:

PointLayer point = new PointLayer(new Coord(lat.doubleValue(), lng.doubleValue()), 
          companyName, null); 
        pl.addPoint(point); 
        pl.addActionListener(new ActionListener() { 
         public void actionPerformed(ActionEvent evt) { 
          PointLayer p = (PointLayer) evt.getSource(); 
          System.out.println("pressed " + p); 
          Dialog.show("Details", "" + p.getName() + "\nLatitude: " + p.getLatitude() + "\nLongitude: " + p.getLongitude(), "Ok", null); 
         } 
        }); 

Ja Ich habe die Grundkartenvorlage ^^‘ Mein Problem ist: Wenn ich für das coordonates von Punkt frage ich:

{‚Länge‘ : 2.3485853 'Breite': 48.8769309}

aber wenn ich für das coordonates von evt.getSource frage ich erhalten:

{ ‚Länge‘: 261.443,31964417442, ‚Breite‘: 6254004,882818963}

welche Art von störender ist ...

Ich schaute über das Internet seit gestern, aber ich fand keine Sache, ich vielleicht Ich suche nicht am richtigen Ort. Irgendwelche Hinweise darauf, was passiert?

EDIT: Dank der Antworten habe ich das Problem gefunden. Die Koordinaten wurden in einem anderen System mit Codenamen 1 angegeben: Popular Visualization CRS Mercator. Um es zu verwenden, müssen Sie es konvertieren mit: com.codename1.maps.Mercator.inverseMercator (Breite, Länge); Oder können Sie Google Marker anstelle von Codename jemandes [Das ist, was ich tat]

Antwort

1


Ich kann nicht finden, warum es diesen Wert zurückgibt, aber vielleicht können Sie dieses Problem umgehen, indem ein coord Objekt zu bauen. Beispiel:

Coord coord = new Coord(lat.doubleValue(), lng.doubleValue()); 
PointLayer point = new PointLayer(coord, companyName, null); 
        pl.addPoint(point); 
        pl.addActionListener(new ActionListener() { 
         public void actionPerformed(ActionEvent evt) { 
          PointLayer p = (PointLayer) evt.getSource(); 
          System.out.println("pressed " + p); 
          Dialog.show("Details", "" + p.getName() + "\nLatitude: " + coord.getLatitude() + "\nLongitude: " + coord.getLongitude(), "Ok", null); 
         } 
        }); 

EDITED hatte ich das gleiche Problem Monat 1 vor. Ich habe es mit dem MapContainer gelöst und verwende addMarker(); von der Karte. Auf diese Weise kann ich es wie folgt verwenden:

MapContainer map = new MapContainer(); // This used gMaps 
for(Coord points : coords){ 
    map.addMarker((EncodedImage) myIcon, coord,"","", new ActionListener(){ 
     Dialog.show("Details", "" + p.getName() + "\nLatitude: " + points.getLatitude() + "\nLongitude: " + points.getLongitude(), "Ok", null); 
    }) 
} 
+0

Danke für die Antwort! Eigentlich funktioniert es für einen einzigen Punkt wie mein Beispiel. Leider habe ich das gleiche Problem mit einer Karte, wo es eine Liste von Punkten auf der Karte gibt. Die App sollte wissen, auf welchen Punkt geklickt wurde, damit sie die Koordinaten übernehmen kann. Da wir keinen actionListener auf pointLayer hinzufügen können, sondern nur auf pointLayers, kann das Coords-Objekt dieses Problem nicht umgehen. –

+0

Ich werde es versuchen und Sie wissen lassen! –

2

denke ich, die Koordinaten, die Sie für den Fall erhalten, sind in dem Volk Visualisierung CRS Mercator (EPSG: 900913 oder EPSG: 3785) Koordinatensystem, das ist, was die Karte Kontrolle verwendet. Die Punkte, die Sie in lat/lon hinzufügen, werden beim Hinzufügen zur Karte automatisch in dieses System umgewandelt. "Breite" und "Länge" sind leicht irreführend; "x" und "y" sind die Standardbegriffe für projizierte Koordinaten.

+0

O_o ​​danke ich wusste das nicht. Ist es also möglich, die App dazu zu zwingen, nicht projizierte Koordinaten zu erhalten, oder müssen wir sie konvertieren? (Ich sah einige Artikel mit vielen verschiedenen Formeln hängt von der Version der Projektion ab) –

+0

Sie müssen sie wahrscheinlich selbst zurück verwandeln. Versuchen Sie 'com.codename1.maps.Mercator.inverseMercator (Breite, Länge); '. Da 'Mercator' die einzige Implementierung von' Projection' ist, denke ich, dass es die ist, die verwendet wird. –

+0

Danke, ich habe es repariert! –