C# Control zur Kartendarstellung

Hi,
längere Zeit habe ich GMap.NET in mehreren meiner Programme eingesetzt und Tiles per smb wie auch mod_tile angezeigt. Leider habe ich keine Möglichkeit gefunden, tiles von zwei oder mehr Quellen übereinander zu legen. Darum suche ich gerade eine Alternative.

Ich brauche die Möglichkeit, dynamisch Marker zu erzeugen und die Position der Karte an die Form zu übergeben. Clicks sollen ebenso möglich sein.

Habe mir jetzt mal SharpMap angeschaut und bin etwas unentschlossen. Es ist halt ein bisschen Overkill und ich bekomme zwar verschiedene Overlays übereinander gelegt, aber ich bekomme die Karte nicht aktualisiert um die Layer zu zeigen. Stattdessen muss ich erst mit der Maus auf der Karte rumfahren, während ich die linke Maustaste gedrückt halte Oo… Außerdem muss ich wohl jede Koordinate und den Zoom umrechnen… Bisher blicke ich das nur absolut nicht. Kann mir da jemand helfen? Gibt es eine einfachere Alternative?

Ich weiss nicht, ob du “nur sehen” meinst oder das beim Editieren brauchst.

Sehen: Openlayers kann mehrere Layer anzeigen und jedes kann eine eigene Transparenz haben. Man kann da auch Slider (Schieberegler) programmieren.

Editieren: Auf die Gefahr hin, das es jetzt “nicht schon wieder” heisst: Josm kann das! Josm hat am unteren Rand des Ebenen-Menüs einen senkrechten Schieberegler für die Transparenz.

Gruss
walter

Aber es wird wohl eher eine Bibliothek gesucht, die in C# eingesetzt werden kann.

schade, dan hab ich das wohl überlesen.

Was spricht denn gegen eine Website die mit Openlayers arbeitet und welche über C# eingebunden wird?

wenig.

Leaflet sollte sowas auch können, bin mir aber net sicher (steige erst gerade um, denn OL3 tu ich mir nicht an).

Hi,
danke für die Antworten! Habe zuerst auch an OL/Leaflet gedacht. Allerdings weiss ich nicht, ob und wie ich dann auf Clicks in der Karte sowie das Erstellen von Markern etc im Programm reagieren muss, damit das auch auf der Webseite geht… Und ja, das Programm wird noch mehr machen, als nur die Karte anzeigen, und daher müssen GUI und Karte miteinander Daten und Events austauschen können.

@Wambacher. Ich mag JOSM, aber ich brauche etwas, das mit die Kartendaten anzeigen kann und direkt aus dem GUI gesteuert werden kann bzw Daten an das GUI weitergeben kann.

Nach der Beschreibung könnte evtl. das für dich in Frage kommen.

leider ActiveX…
Bin schon kurz davor C# in die Tonne zu treten und stattdessen Java zu verwenden… Aber da ist GUI-basteln dann wieder eine Strafe :X

osmsharp geht wegen der Lizenz wieder nicht…

Noch ein Angebot (ohne eigene Erfahrungen damit).

P.S. Könntest Du mich als Laien aufklären, warum ActiveX für dich nicht in Frage kommmt?

Kannst du nicht J# und C# mischen?

jo, hatte ich mit verguckt - und auch ein wenig gewundert, dass du das Feature nicht kennen solltest :wink:

Gruss
walter

Hi,

wenn Du C# in die Tonne treten willst, dann kann ich Dir das WebView-Control von Java (genauer JavaFX) empfehlen.

http://docs.oracle.com/javase/8/javafx/api/javafx/scene/web/WebView.html

ein Beispiel:
http://captaincasa.blogspot.co.nz/2014/01/javafx-and-osm-openstreetmap.html?m=1

Du kannst dann sowohl mit JavaScript und Java programmieren, auf Ereignisse auf der Webseite reagieren usw.

Der große Vorteil ist, dass Du einfach fertige JavaScript-Sachen weiterverwenden kannst.

Grüße

Hehe, na ob das den Nachteil mit den drecks GUI-basteleien und den Portierungen einiger Klassen von C# ausgleichen kann… :smiley:

Argh… ich hasse es… :frowning:

ach, seitdem es den Scene Builder http://gluonhq.com/products/scene-builder/ gibt, geht das doch, das ist nicht mehr wie bei Swing :sunglasses:

hmm, Ich habe jetzt mal weiter mit C# und SharpMap gespielt und es ging eigentlich alles, was ich wollte, programm läuft… ABER wenn ich den Mittelpunkt bei “48.55783 / 8.98079” haben will, muss ich als center “1000000.0 / 6200000.0” angeben Oo
Auch alle Trasformationen mit .ImageToWorld() und so weiter bringen mich absolut nicht weiter… Es kommt auch nicht mal im Ansatz etwas dabei raus, was auch nur im entferntesten mit einer mir bekannten Koordinate zu tun hat… http://tools.retorte.ch/map/?wgs84=48.55783,8.98079&zoom=15

ka, was das fürn schwachsinn ist, aber entweder wird sharpmap eh fast nicht verwendet und niemand braucht wgs84 oder bei mir läuft was total schief… Aber so ne Map zu erstellen, n Layer einzufügen und einen Mittelpunkt setzen ist jetzt eigentlich eher nich so anspruchsvoll :roll_eyes:

So,
und für alle, die auch Probleme damit haben, hier die Lösung:

var ctFac = new ProjNet.CoordinateSystems.Transformations.CoordinateTransformationFactory();
var csSrc = ProjNet.CoordinateSystems.GeographicCoordinateSystem.WGS84;
var csTgt = ProjNet.CoordinateSystems.ProjectedCoordinateSystem.WebMercator;
var ct = ctFac.Create(csSrc, csTgt);
var ptWebMercator = ct.MathTransform.Transform(new double[] { 8.98079, 48.55783 });

für die letzte Zeile kann man auch schreiben:

var ptWebMercator = ct.MathTransform.Transform(new GeoAPI.Geometries.Coordinate(8.9831, 48.5568));

So wandelt man dann GPS-Coordinaten um in eine Projektion, die SharpMap versteht