2016-04-27 9 views
2

Я пытаюсь построить GeoJSON LineString на Картах Google с помощью API Карт Google.Google Maps неправильный рендеринг GeoJSON

Я получаю объект GeoJSON как ответ AJAX и использую функцию map.data.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

Звуки/выглядит как у вас есть координаты в обратном направлении. GeoJSON - это '[долгота, широта]', а не '[широта, долгота''. – geocodezip

+0

@geocodezip Я установил маркеры для всех точек в GeoJSON, и все они были правильно построены в Германии. Как!? –

+0

Как вы создали эти маркеры? – geocodezip

ответ

5

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

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

«Положение представлено массивом чисел Там должно быть по крайней мере два элемента, и может быть более Порядок элементов должен следовать 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>

+0

чувак вам большое спасибо! Не могли бы вы указать мне место, где упоминается, что GeoJSON использует Long и Lat в ссылке GeoJSON? –

+1

См. [Позиции] (http://geojson.org/geojson-spec.html#positions) в документации: «Позиция представлена ​​массивом чисел. Должно быть не менее двух элементов и может быть больше. Порядок элементов должен следовать за порядком x, y, z (восток, север, высота для координат в проекционной системе координат или ** долгота, широта, высота для координат в географической системе координат) **. – geocodezip

+0

большое спасибо .... не знаю, как я пропустил это –

Смежные вопросы