2017-03-06 1 views
2

isoline에 대한 HERE Map API에서 JSON 응답의 형식을 지정하는 중에 문제가 발생했습니다. 여기에있는 API JSON 응답 전체가 아래와 같이 표시되며 아래에 표시된 것처럼 선의 위/아래 좌표가 포함되어 있습니다.형식 여기 API API JSON 응답

{ 
    "response": { 
     "metaInfo": { 
      "timestamp": "2017-03-03T23:40:34Z", 
      "mapVersion": "8.30.68.151", 
      "moduleVersion": "7.2.201709-111134", 
      "interfaceVersion": "2.6.29" 
     }, 
     "center": { 
      "latitude": 34.603565, 
      "longitude": -98.3959 
     }, 
     "isoline": [ 
      { 
       "range": 300, 
       "component": [ 
        { 
         "id": 0, 
         "shape": [ 
          "34.6096802,-98.4147549", 
          "34.6096802,-98.4141541", 
          "34.6098518,-98.4136391", 
          "34.6101952,-98.4132957", 
          "34.6103668,-98.4127808", 
          "34.6101952,-98.4122658", 
          "34.6098518,-98.4119225", 
          "34.6098518,-98.4115791", 
          "34.6101952,-98.4112358", 
          "34.5998955,-98.4115791", 
          "34.6002388,-98.4126091", 
          "34.6005821,-98.4129524", 
          "34.6009254,-98.4139824", 
          "34.6019554,-98.4143257", 
          "34.6022987,-98.4153557", 
.... 
          "34.6081352,-98.4129524", 
          "34.6083069,-98.4134674", 
          "34.6083069,-98.4148407", 
          "34.6084785,-98.4153557", 
          "34.6089935,-98.4155273", 
          "34.6095085,-98.4154415", 
          "34.6096802,-98.415184", 
          "34.6096802,-98.4147549" 
         ] 
        } 
       ] 
      } 
     ], 
     "start": { 
      "linkId": "+888249498", 
      "mappedPosition": { 
       "latitude": 34.6034836, 
       "longitude": -98.3959009 
      }, 
      "originalPosition": { 
       "latitude": 34.603565, 
       "longitude": -98.3959 
      } 
     } 
    } 
} 

나는 다각형으로 리플릿의 isoline 데이터를 매핑하고있다. 나는 이것을 수동으로 할 수 있고 모든 것이 잘 작동한다.

var polygon = L.polygon([ 
[34.6343994, -98.7664032], 
[34.6357727, -98.76297], 
[34.6385193, -98.7602234], 
[34.6398926, -98.7561035], 
[34.6385193, -98.7519836], 
[34.6357727, -98.7492371], 
[34.6357727, -98.7464905], 
..... 
[34.6302795, -98.7712097], 
[34.6330261, -98.7718964], 
[34.6343994, -98.7698364], 
[34.6343994, -98.7664032] 

] 
      ).addTo(map); 

이제 자동 화하려고 시도하지만 json 출력을 전단 용 호환 형식으로 가져올 수 없습니다. 내가 API 호출을 JSON 응답을 캡처, 다음 코드를 사용하여 위도/경도 좌표의 배열을 추출 할 수 있습니다 :

function getJson(url) { 
     return JSON.parse($.ajax({ 
      type: 'GET', 
      data: '', 
      url: url, 
      dataType: 'json', 
      global: false, 
      async: false, 
      success: function (data) { 
       return data; 
      } 
     }).responseText); 
    } 

    var myJsonObj = getJson('https://isoline.route.cit.api.here.com/routing/7.2/calculateisoline.json?mode=fastest;car;traffic:disabled&jsonAttributes=1&rangetype=time&start=34.603565,-98.3959&app_id=id&app_code=codeg&range=1800'); 

var isoline = myJsonObj.response.isoline[0].component[0].shape; 

변수 isoline은 (북의 배열/긴 좌표 쌍)이 모양을하지만, 전단지에 필요한 배열 배열로 가져올 수 없습니다.

[ 
           "34.6096802,-98.4147549", 
           "34.6096802,-98.4141541", 
           "34.6098518,-98.4136391", 
           "34.6101952,-98.4132957", 
           "34.6103668,-98.4127808", 
           "34.6101952,-98.4122658", 
           "34.6098518,-98.4119225", 
           "34.6098518,-98.4115791", 
           "34.6101952,-98.4112358", 
           "34.5998955,-98.4115791", 
           "34.6002388,-98.4126091", 
           "34.6005821,-98.4129524", 
           "34.6009254,-98.4139824", 
           "34.6019554,-98.4143257", 
           "34.6022987,-98.4153557", 
    .... 
           "34.6081352,-98.4129524", 
           "34.6083069,-98.4134674", 
           "34.6083069,-98.4148407", 
           "34.6084785,-98.4153557", 
           "34.6089935,-98.4155273", 
           "34.6095085,-98.4154415", 
           "34.6096802,-98.415184", 
           "34.6096802,-98.4147549" 
          ] 

는 같이 할 좌표를 포맷에 어떤 도움을 주셔서 감사합니다겠습니까이

[ 
    [34.6343994, -98.7664032], 
    [34.6357727, -98.76297], 
    [34.6385193, -98.7602234], 
    [34.6398926, -98.7561035], 
    [34.6385193, -98.7519836], 
    [34.6357727, -98.7492371], 
    [34.6357727, -98.7464905], 
    ..... 
    [34.6302795, -98.7712097], 
    [34.6330261, -98.7718964], 
    [34.6343994, -98.7698364], 
    [34.6343994, -98.7664032] 

    ] 

거기뿐만 아니라 리플릿의 데이터를 넣어 더 좋은 방법이지만, 다각형 및 폴리 라인이 있다고 할 수있다 내가 찾을 수있는 유일한 메소드이고 배열의 배열에 좌표가 필요합니다.

답변

2

에 의해 허용됩니다. 이처럼

(ES6 방법)

const newArray = array.map(a => a.split(',').map(Number)); 

또는 (비 ES6 방법)

var newArray = []; 
array.forEach(function (a){ newArray.push(a.split(',').map(Number)); }); 

그래서 최종 코드는 다음과 같이한다

function getJson(url) { 
    return JSON.parse($.ajax({ 
    type: 'GET', 
    data: '', 
    url: url, 
    dataType: 'json', 
    global: false, 
    async: false, 
    success: function (data) { 
     return data; 
    } 
    }).responseText); 
} 

function parseJSONForPolygon(rawJsonArray) { 
    var newArray = []; 
    rawJsonArray.forEach(function (a) { newArray.push(a.split(',').map(Number)); }); 
    return newArray; 
}; 

var myJsonObj = getJson('https://isoline.route.cit.api.here.com/routing/7.2/calculateisoline.json?mode=fastest;car;traffic:disabled&jsonAttributes=1&rangetype=time&start=34.603565,-98.3959&app_id=id&app_code=codeg&range=1800'); 

var isoline = parseJSONForPolygon(myJsonObj.response.isoline[0].component[0].shape); 

크레딧은으로 이동합니다.https://stackoverflow.com/a/15677905/923426

+0

+1 감사합니다! 위도/경도 좌표에서도 큰 따옴표를 제거해야한다는 것을 발견했습니다. Leaflet에 추가하기 전에 isoline = JSON.stringify (isoline) .replace (/ [ ' "] +/g,' ') 및 JSON.parse를 사용하는 데 문제가 있습니까? – mcsnead

+0

@mcsnead updated answer! –

2
let polygonArray = []; 

data.response.isoline.component.shape.forEach((elm) => { 
    polygonArray.push(elm.split(',')); 
}) 

지금 polygonArray 전단지

당신은이 요소 및 통해 배열을 형성을 분할 반복 할 필요가