folleto geojson problema de coordenadas

13

Empecé a jugar un poco con leflet / geojson. Pero mis coordenadas no se representan correctamente y no tengo idea de lo que está pasando.

Mis coordenadas son: 52.23943, 4.97599 . Funcionan correctamente con la función setView .

var map = L.map('leaflet_map').setView([52.23943, 4.97599], 15);

Pero al usar una característica geojason son, hmmm, 'proyectados', en algún lugar al este de Somalia.

var geojsonFeature = {
            "type": "Feature",
            "properties": {
            "name": "Coors Field",
            "amenity": "Baseball Stadium",
            "popupContent": "This is where the Rockies play!"
            },
            "geometry": {
                "type": "Point",
                "coordinates": [52.23943, 4.97599]
            }
        };
        var myLayer = L.geoJson().addTo(map);
        myLayer.addData(geojsonFeature).bindPopup("I am a gjson point.");

¿Alguien que sabe lo que está pasando aquí?

EDIT

Por pura curiosidad cambié las coordenadas alrededor de [4.976143930893815,52.23925499011473] y el punto aparece en su ubicación correcta. ¿Un error conocido ??

    
pregunta LarsVegas 11.03.2013 - 10:44

2 respuestas

23

No lo llamaría error, solo es una cuestión de normas confusas y contradictorias.

Cuando hablamos de ubicaciones geográficas, usualmente usamos Lat-long. Esto se ha codificado en la norma ISO 6709 .

Al tratar con la geometría de coordenadas cartesianas, generalmente usamos X-Y. Muchos sistemas GIS funcionan con una ubicación geográfica como un caso especial de un punto de coordenadas 2 D, donde X representa la longitud e Y representa la latitud. Este orden de coordenadas es exactamente opuesto al de la noción regular de latitud larga.

Llegando a tu problema:

El map.setView toma una l.LatLong como entrada, donde la primera coordenada es una Latitude, y segundo es la longitud.

Por lo tanto, cuando quieres 52.23N, 4.97E , pasas en [52.23943, 4.97599]

El estándar de GeoJSON dice que para cualquier punto, el primer parámetro es la coordenada X (es decir, la longitud) y el segundo parámetro es la coordenada Y (es decir, la latitud);

Por lo tanto, cuando desee 52.23N, 4.97E en GeoJSON, debe pasar [4.97599, 52.23943]

Para obtener más información, consulte este Q & A

    
respondido por el Devdatta Tengshe 11.03.2013 - 11:04
1

Me he topado con este problema. Para cualquier persona que experimente este problema y tenga un número considerable de pares de datos largos y latentes, puede usar los siguientes js:

var a = "[LatLng(37.43943, 25.30563)],[LatLng(37.4367, 25.30495)],[LatLng(37.43071, 25.29945)],[LatLng(37.42362, 25.30426)],[LatLng(37.42089, 25.31113)],[LatLng(37.41489, 25.31113)],[LatLng(37.41053, 25.30769)],[LatLng(37.40235, 25.30563)],[LatLng(37.40562, 25.31525)],[LatLng(37.41816, 25.31937)],[LatLng(37.42307, 25.3228)],[LatLng(37.40889, 25.33104)],[LatLng(37.4078, 25.33722)],[LatLng(37.41598, 25.33791)],[LatLng(37.40344, 25.35027)],[LatLng(37.40726, 25.3688)],[LatLng(37.42253, 25.39009)],[LatLng(37.4138, 25.39902)],[LatLng(37.42907, 25.4052)],[LatLng(37.42961, 25.41962)],[LatLng(37.44215, 25.42442)],[LatLng(37.44543, 25.45807)],[LatLng(37.46287, 25.4615)],[LatLng(37.47595, 25.46013)],[LatLng(37.47104, 25.42786)],[LatLng(37.48249, 25.42923)],[LatLng(37.48358, 25.41)],[LatLng(37.49502, 25.40588)],[LatLng(37.49447, 25.38597)],[LatLng(37.49066, 25.3791)],[LatLng(37.46941, 25.38254)],[LatLng(37.46178, 25.37773)],[LatLng(37.4754, 25.35988)],[LatLng(37.4972, 25.35782)],[LatLng(37.50047, 25.34203)],[LatLng(37.49774, 25.32761)],[LatLng(37.49229, 25.3228)],[LatLng(37.4912, 25.3125)],[LatLng(37.4814, 25.30907)],[LatLng(37.47268, 25.31113)],[LatLng(37.46341, 25.32692)],[LatLng(37.44597, 25.32692)],[LatLng(37.42798, 25.3228)],[LatLng(37.43943, 25.30563)]".split("],[");
var b = a.map(function(x) { 
    var couple= (/\d+.\d+, \d+.\d+/g).exec(x).toString();
    var splitted = couple.split(", ");
    return "["+splitted[1]+","+splitted[0]+"]";
                            } );
b.join(); 

Editar: de acuerdo con esto SO answer , al parecer, también existe este método:

L.GeoJSON.coordsToLatLng() .

No lo he usado pero parece prometedor.

    
respondido por el alexandros84 02.07.2017 - 03:07

Lea otras preguntas en las etiquetas