OpenLayer - Polygon - geoJson - coordinates max 90 degrees?

Hallo,
habe gerade ein Problem mit dem openlayern eines Polygons mittels OpenLayer und geoJson sowie ein coordinates-Javascript.

Also, die coordinates für das geoJson werden von einem Javascript geliefert. Die Variable packe ich in geoJson bei coordinates in das OpenLayer-Script.

Simples Beispiel ohne Befüllung mit Variable funktioniert:

var geojsonObject = {
  'type': 'FeatureCollection',
  'crs': {
    'type': 'name',
    'properties': {
      'name': 'EPSG:4326'
    }
  },
  'features': [{
    'type': 'Feature',
    'geometry': {
      'type': 'Polygon',
      'coordinates': [[[90, 360.00000],[0, -80.00000],[15.00000, -80.00000],[15.00000, 80.00000],[90, 360.00000]]]
    }
  }]
};

Mit Befüllung per Variable funktioniert es nicht.

<script>
...
var daynightcoords = _compute();

var geojsonObject = {
  'type': 'FeatureCollection',
  'crs': {
    'type': 'name',
    'properties': {
      'name': 'EPSG:4326'
    }
  },
  'features': [{
    'type': 'Feature',
    'geometry': {
      'type': 'Polygon',
      'coordinates': [[daynightcoords]]
    }
  }]
};
...
</script>

Die Variable “daynightcoords” gibt dies aus (getestet):

<div class="latalotadivbox" id="latalotadivbox"></div>
<script>
var daynightcoords = _compute();
document.getElementById("latalotadivbox").innerHTML = daynightcoords;
</script> 

//Ausgabe: [90, -360],[87.01943164067522, -360],[87.01884377928964, -359],[87.01734860220394, -358],[87.01494383637005, -357],[87.01162582021618, -356],[87.00738949003994, -355],[87.00222836112842, -354],[86.99613450347368, -353],[86.98909851191414, -352],[86.98110947049153, -351],[86.97215491077074, -350],[86.96222076382345, -349],[86.95129130552789, -348],[86.93934909478364, -347] …

Aber, das manuelle Befüllen mit den Werten der Variable funktioniert auch nicht, bzw. nur begrenzt:

<script>
var geojsonObject = {
  'type': 'FeatureCollection',
  'crs': {
    'type': 'name',
    'properties': {
      'name': 'EPSG:4326'
    }
  },
  'features': [{
    'type': 'Feature',
    'geometry': {
      'type': 'Polygon',
      'coordinates': [[[-50.99759410853572, 270],[-41.97588008988466, 271], ... [87.0174264018178, 360],[90, 360]]]
    }
  }]
};
...
</script>

Nun habe ich die Anzahl der Koordinaten gezählt, aber daran liegt es nicht.
Dann habe ich die Koordinaten in ihrer Anzahl gekürzt, von vorne nach hinten und bin bei Longitude 271 angelangt, bei der es noch funktioniert.
Also,
von 271 bis 360 funktioniert (89°).
Von 270 bis 360 funktioniert nicht (90°).
Von 270.5 bis 360 funktioniert (89.5°).

Funktioniert noch:

<script>
var geojsonObject = {
  'type': 'FeatureCollection',
  'crs': {
    'type': 'name',
    'properties': {
      'name': 'EPSG:4326'
    }
  },
  'features': [{
    'type': 'Feature',
    'geometry': {
      'type': 'Polygon',
      'coordinates': [[[-50.99759410853572, 270.5],[-41.97588008988466, 271], ... [87.0174264018178, 360],[90, 360]]]
    }
  }]
};
...
</script>

Was mache ich da jetzt?
Ich brauche das Polygon von … bis:
[90, -360],[87.01943164067522, -360],[87.01884377928964, -359],[87.01734860220394, -358],[87.01494383637005, -357], [86.99128766305708, -8],[86.99804270624375, -7],[87.00385856551425, -6],[87.00874420435376, -5],[87.01270712055748, -4],[87.01575337441328, -3],[87.01788761136476, -2],[87.0191130793127, -1],[87.01943164067522, 0],[87.01884377928964, 1],[87.01734860220394, 2],[87.01494383637005, 3],[87.01162582021618, 4],[87.00738949003994, 5],[87.00222836112842, 6],[86.99613450347368, 7],[86.98909851191414, 8], [87.00874420435376, 355],[87.01270712055748, 356],[87.0157533744133, 357],[87.01788761136476, 358],[87.0191130793127, 359],[87.01943164067522, 360],[90, 360]
Also 360°.

Gibt es einen Grund, warum du mit ±360° Länge rechnest? der “360. Längengrad” ist ja auch der Nullmeridian und “+270°” ist auch “-90°” oder “90° West”. Mit ±180° würdest du vielleicht deine OL-Binbliotheken weniger überfordern. Schlimstenfalls musst du deine Polygone am 180. Längengrad teilen.

Ob man 90° Nord/Süd in Mercator vernünfig umrechnen kann, weiss ich auch nicht. Da liegen ja die Pole “unendlich weit” unter und über dem Kartenrand und die Umrechnung sollte kein gültiges Ergebnis liefern.

Da bin ich völlig überfragt.
Was über den Kartenrand hinaus geht wird einfach nur nicht angezeigt.
Ich habe das Script für die Koordinaten aus einem Leaflet-Script und da funktioniert das. Da wird glaube ich mit Polygon gearbeitet und nicht mit Vector. ???

Grundwissen aneignen, sonst wird das nix: https://de.wikipedia.org/wiki/Geographische_Koordinaten

Ach, wie ich solche Antworten liebe.
Der Layer funktioniert mit Leaflet, ich brauche ihn aber in OpenLayer.
Jetzt habe ich das Script dafür zerlegt und neu aufgebaut, aber es hakt.
Sicher habe ich irgendetwas falsch gemacht, aber keine Ahnung was.

Hier das Original in Leaflet:
http://joergdietrich.github.io/Leaflet.Terminator/

Hier mein Versuch in OpenLayer:
https://jsfiddle.net/d0hasygs/1/

Na, dann wird dich diese Antwort auch erfreuen: http://spatialreference.org/ref/epsg/wgs-84/

Und dann schaust halt nochmal in deinen Code rein:

var geojsonObject = {
  'type': 'FeatureCollection',
  'crs': {
    'type': 'name',
    'properties': {
      'name': 'EPSG:4326'
    }
  },

Eventuell fällt dir dann was auf. Aber ich bin dann raus - ist ja auch kein OSM-Thema.

OK, also mit geoJSON wird das nichts mit den originalen Koordinaten.

Habe die Koordinaten nun gekürzt auf den EPSG:4326 Range.
In dem Array war auch [lat, lng] angegeben. Für geoJSON/EPSG:4326 brauchts [lng, lat].
Also danke für die Hinweise, auch wenn ich sie nicht gleich erkannt habe.

sieht schon besser aus, aber noch nicht korrekt.
Das Polygon ist versetzt, wohl um 180° nach West.
https://jsfiddle.net/d0hasygs/2/

Nein, das passt so. Du startest bei -90 Longitude und -180 Latitude. https://www.openstreetmap.org/search?query=-45%20-180#map=2/-45.1/179.8 (zur Verdeutlichung statt -90° -45°, ist leicht östlich von Neuseeland, damit du dich besser orientieren kannst). Denk dir ne senkrechte Linie von dort zum Kontinent Antarktika und du kommst deinem Startpunkt -90, -180 ziemlich nahe.

Wenn dir das Ergebnis nicht gefällt bzw du das um 180° Longitude verschieben willst, darfst du nicht bei -180° Longitude starten, sondern bei 0°.

Das hat übrigens nichts mit GeoJSON oder nicht zu tun. Bei GeoJSON werden halt die Koordinaten grundsätzlich in Longitude, Latitude angegeben, Kartenlibs wollen es manchmal halt andersrum.

Das Problem mit der Verschiebung habe ich soeben behoben, und ein weiteres bisher unentdecktes Problem.
Jetzt besteht nur noch das Problem mit der Variable, dass die ihre Werte nicht an das geoJSON-Object übergibt.
Das neueste JSFiddle dazu:
https://jsfiddle.net/d0hasygs/3/

https://jsfiddle.net/qywzx7zr/

? Was ist da anders?

Zeile 109, Zeile 126. Du wolltest die Koordinaten von “außerhalb” setzen, oder nicht? Ich hab die Koordinaten einfach in eine Array namens “coordinates” ausgelagert, um dir zu zeigen wie das geht.

“Jetzt besteht nur noch das Problem mit der Variable, dass die ihre Werte nicht an das geoJSON-Object übergibt.”

umpf… na das kann ich auch.
Es geht darum, dass die Variable “var daynightcoordsc” die Koordinaten nicht an das geoJSON-Object übergibt.
Siehe hier:
https://jsfiddle.net/d0hasygs/7/

Hast du dir mal angeschaut, was in daynightcoords drinsteht? Also nicht der Dump in das DOM-Element (.innerHTML), sondern per Browser-Console? Und weisst du, was in dem Koordinaten-Array für das Polygon tatsächlch drinstehen muß?

In _compute() werden (bzw. wurden, hast ja schon angefangen, das umzubauen lt. deinem letzten Fiddle?) Array-Elemente als Strings zusammengebastelt. Dass das nicht richtig sein kann, ist dir schon kĺar, oder?

Ich hab dir das jetzt mal auf die Schnelle funktionsfähig umgebaut: https://jsfiddle.net/sym0xw21/

Hey dooley, total vielen Dank dafür!
So einfach?
Ich kapier das gerade nicht mit dem Array, String und was die eckigen Klammern bewirken, zumal die coordinates im geoJSON-Object selbst auch eckige Klammern benötigen, das ist mir gerade echt zu hoch.
Dann wird also ein Array übergeben? Aber wie/wo werden die einzelnen Werte im Array zu einem String-Wert im Array, und wieso frißt das geoJSON-Object das so als Array, aber als umgebastelter String nicht?

Hier (https://jsfiddle.net/d0hasygs/2/ Zeile 80)

latLng[i+1] = ["[" + lng + ", " + lat + "]"];

wird ein Arrayelement (die äußeren Klammern) erzeugt, der Inhalt des Elementes wird jedoch als String zusammengesetzt. Da kannst du auch “wie doof ist das denn” reinschreiben, bewirkt das gleiche :wink:

Da http://geojson.io/#map=2/20.0/0.0 kannst du mal rumspielen und schauen, was für die verschiedenen Typen (point, polyline, polygon) rauskommt.

Es gibt natürlich weitere Probleme.
Ich habe zwischenzeitlich noch andere Probleme gelöst und einige Sachen im Script besser gestaltet.
Aktuell ist der Layer mit OpenLayer gegenüber dem Original mit Leaflet etwas nach Osten versetzt.
Ich habe nicht herausgefunden wie das Original den Layer layert und ob geoJSON die richtige Wahl war.
Wie kann man denn in OpenLayer so etwas noch layern? (außer GPX).

Das Original:
http://joergdietrich.github.io/Leaflet.Terminator/

Neues JSFiddle mit einigen Korrekturen:
https://jsfiddle.net/ejts8foc/2/