Google Maps неверный рендеринг GeoJSON


Я пытаюсь построить линию GeoJSON на Google Maps, используя Google Maps API.

Я получаю объект GeoJSON в качестве ответа AJAX и использую " map.данные.addGeoJson(функции, данные)", чтобы загрузить ответ GeoJSON на карте.

Широта GPS и длинные точки все были вырваны из .gpx файлы с сайта Open Street Maps, а затем положить в базу данных. Затем они компилируются в формате GeoJSON и отправляются на веб-сайт.

Отдельные точки - это все в Германии, но траектория изображена вблизи Сомали.

Кто-нибудь может мне помочь, пожалуйста?

Функция initMap, содержащая запрос AJAX, выглядит следующим образом:

       function initMap() {

    var map = new google.maps.Map(document.getElementById('map'), {
      zoom: 12,
      center: {lat: 53.44620230866472, lng: 9.666813185187198},
      mapTypeId: google.maps.MapTypeId.TERRAIN,
    });


    $.ajax({
    url: 'http://ADDRESS TO SERVER/api/geodata/getLineString',
    data: {"usrid":3,"startd":"2016-04-17","endd":"2016-04-18"},
    type: 'POST',
    success: function (response) {
    map.data.addGeoJson(response);
        },
    error: function () {
        alert("error");
    },
});
  }

Весь ответ GeoJSON выглядит следующим образом:

      {
  "type": "Feature",
  "geometry": {
    "type": "LineString",
    "coordinates": [
      [
        51.731921404763426,
        14.342405595236764
      ],
      [
        51.731914999999994,
        14.342412
      ],
      [
        51.73192399392278,
        14.342408729482642
      ],
      [
        51.73193,
        14.342416000000004
      ],
      [
        51.731934,
        14.342417000000001
      ],
      [
        51.73193,
        14.342411999999998
      ],
      [
        51.731926,
        14.342408
      ],
      [
        51.73192399392278,
        14.342408729482642
      ],
      [
        51.731921404763426,
        14.342405595236764
      ],
      [
        51.73199100000001,
        14.34214
      ],
      [
        51.73198299999999,
        14.342144
      ],
      [
        51.731987,
        14.342298000000001
      ],
      [
        51.731983,
        14.342302000000002
      ],
      [
        51.731983,
        14.342303999999999
      ],
      [
        51.73199100000001,
        14.342310000000001
      ],
      [
        51.731995000000005,
        14.342308
      ],
      [
        51.731998,
        14.342317
      ],
      [
        51.731999943503226,
        14.34232428813586
      ],
      [
        51.732002,
        14.342319000000002
      ],
      [
        51.732006000000005,
        14.342308000000003
      ],
      [
        51.732009999999995,
        14.342290999999996
      ],
      [
        51.73201799999999,
        14.342276
      ],
      [
        51.732025,
        14.342262999999999
      ],
      [
        51.732025,
        14.342252999999998
      ],
      [
        51.732032999999994,
        14.342243
      ],
      [
        51.732032999999994,
        14.342237000000003
      ],
      [
        51.73202500000001,
        14.342224000000002
      ],
      [
        51.73201799999999,
        14.342204999999996
      ],
      [
        51.73201,
        14.342184999999999
      ],
      [
        51.732002,
        14.342166
      ],
      [
        51.731995000000005,
        14.342153
      ],
      [
        51.731995000000005,
        14.342149000000001
      ],
      [
        51.73199100000001,
        14.34214
      ],
      [
        51.731976333334124,
        14.340528000002589
      ],
      [
        51.73196,
        14.340535
      ],
      [
        51.731934,
        14.340549
      ],
      [
        51.73190300000001,
        14.340559
      ],
      [
        51.731873,
        14.340569
      ],
      [
        51.731846000000004,
        14.340582
      ],
      [
        51.731815,
        14.340595
      ],
      [
        51.731789,
        14.340612000000002
      ],
      [
        51.731762,
        14.340625999999999
      ],
      [
        51.73173100000001,
        14.340643
      ],
      [
        51.731705,
        14.340658
      ],
      [
        51.731674,
        14.340673
      ],
      [
        51.731651,
        14.340681999999997
      ],
      [
        51.731621,
        14.340693
      ],
      [
        51.73160200000001,
        14.340705999999997
      ],
      [
        51.731586,
        14.340723
      ],
      [
        51.731567,
        14.340734000000003
      ],
      [
        51.731548,
        14.340740000000002
      ],
      [
        51.73153299999999,
        14.340748999999999
      ],
      [
        51.731514,
        14.340759
      ],
      [
        51.731495,
        14.340764000000002
      ],
      [
        51.731476,
        14.340768
      ],
      [
        51.731472,
        14.340768
      ],
      [
        51.731472,
        14.340765999999997
      ],
      [
        51.731468,
        14.340762
      ],
      [
        51.73146799999999,
        14.340772999999999
      ],
      [
        51.731468,
        14.340788
      ],
      [
        51.731472,
        14.340809
      ]
      ]
      },
  "properties": {
    "trajectoryid": "05BC2B9E-7350-4D55-B4BB-026EC0B2E65B",
    "color": "blue"
  }
  }
1 2

1 ответ:

У вас есть координаты в обратном порядке. GeoJSON - это [longitude, latitude], а не [latitude, longitude].

См. позиции в документации:

"позиция представлена массивом чисел. Должно быть по крайней мере два элемента, а может быть и больше. Порядок элементов должен соответствовать порядку x, y, z (ориентация на восток, север, высота для координат в системе координат проекции или долгота, широта, высота для координат в географической системе координат система )."

Если я изменю координаты, полилиния появится в Германии.

Фрагмент кода:

var map;
var bounds = new google.maps.LatLngBounds();

function initMap() {

  map = new google.maps.Map(document.getElementById('map'), {
    zoom: 12,
    center: {
      lat: 53.44620230866472,
      lng: 9.666813185187198
    },
    mapTypeId: google.maps.MapTypeId.TERRAIN,
  });
  // map.data.addGeoJson(geoJson);
  map.data.addGeoJson(reverseData(geoJson));
}
google.maps.event.addDomListener(window, "load", initMap);

function reverseData(data) {
  for (var i = 0; i < data.geometry.coordinates.length; i++) {
    data.geometry.coordinates[i] = [data.geometry.coordinates[i][1], data.geometry.coordinates[i][0]];
    var mrk = new google.maps.Marker({
      position: {
        lat: data.geometry.coordinates[i][1],
        lng: data.geometry.coordinates[i][0]
      },
      // map: map
    });
    bounds.extend(mrk.getPosition());
  }
  map.fitBounds(bounds);
  return data;
}
var geoJson = {
  "type": "Feature",
  "geometry": {
    "type": "LineString",
    "coordinates": [
      [
        51.731921404763426,
        14.342405595236764
      ],
      [
        51.731914999999994,
        14.342412
      ],
      [
        51.73192399392278,
        14.342408729482642
      ],
      [
        51.73193,
        14.342416000000004
      ],
      [
        51.731934,
        14.342417000000001
      ],
      [
        51.73193,
        14.342411999999998
      ],
      [
        51.731926,
        14.342408
      ],
      [
        51.73192399392278,
        14.342408729482642
      ],
      [
        51.731921404763426,
        14.342405595236764
      ],
      [
        51.73199100000001,
        14.34214
      ],
      [
        51.73198299999999,
        14.342144
      ],
      [
        51.731987,
        14.342298000000001
      ],
      [
        51.731983,
        14.342302000000002
      ],
      [
        51.731983,
        14.342303999999999
      ],
      [
        51.73199100000001,
        14.342310000000001
      ],
      [
        51.731995000000005,
        14.342308
      ],
      [
        51.731998,
        14.342317
      ],
      [
        51.731999943503226,
        14.34232428813586
      ],
      [
        51.732002,
        14.342319000000002
      ],
      [
        51.732006000000005,
        14.342308000000003
      ],
      [
        51.732009999999995,
        14.342290999999996
      ],
      [
        51.73201799999999,
        14.342276
      ],
      [
        51.732025,
        14.342262999999999
      ],
      [
        51.732025,
        14.342252999999998
      ],
      [
        51.732032999999994,
        14.342243
      ],
      [
        51.732032999999994,
        14.342237000000003
      ],
      [
        51.73202500000001,
        14.342224000000002
      ],
      [
        51.73201799999999,
        14.342204999999996
      ],
      [
        51.73201,
        14.342184999999999
      ],
      [
        51.732002,
        14.342166
      ],
      [
        51.731995000000005,
        14.342153
      ],
      [
        51.731995000000005,
        14.342149000000001
      ],
      [
        51.73199100000001,
        14.34214
      ],
      [
        51.731976333334124,
        14.340528000002589
      ],
      [
        51.73196,
        14.340535
      ],
      [
        51.731934,
        14.340549
      ],
      [
        51.73190300000001,
        14.340559
      ],
      [
        51.731873,
        14.340569
      ],
      [
        51.731846000000004,
        14.340582
      ],
      [
        51.731815,
        14.340595
      ],
      [
        51.731789,
        14.340612000000002
      ],
      [
        51.731762,
        14.340625999999999
      ],
      [
        51.73173100000001,
        14.340643
      ],
      [
        51.731705,
        14.340658
      ],
      [
        51.731674,
        14.340673
      ],
      [
        51.731651,
        14.340681999999997
      ],
      [
        51.731621,
        14.340693
      ],
      [
        51.73160200000001,
        14.340705999999997
      ],
      [
        51.731586,
        14.340723
      ],
      [
        51.731567,
        14.340734000000003
      ],
      [
        51.731548,
        14.340740000000002
      ],
      [
        51.73153299999999,
        14.340748999999999
      ],
      [
        51.731514,
        14.340759
      ],
      [
        51.731495,
        14.340764000000002
      ],
      [
        51.731476,
        14.340768
      ],
      [
        51.731472,
        14.340768
      ],
      [
        51.731472,
        14.340765999999997
      ],
      [
        51.731468,
        14.340762
      ],
      [
        51.73146799999999,
        14.340772999999999
      ],
      [
        51.731468,
        14.340788
      ],
      [
        51.731472,
        14.340809
      ]
    ]
  },
  "properties": {
    "trajectoryid": "05BC2B9E-7350-4D55-B4BB-026EC0B2E65B",
    "color": "blue"
  }
}
html,
body,
#map {
  height: 100%;
  width: 100%;
  margin: 0px;
  padding: 0px
}
<script src="https://maps.googleapis.com/maps/api/js"></script>
<div id="map"></div>