【问题标题】:Parsing lat and long from JSON从 JSON 解析 lat 和 long
【发布时间】:2020-05-30 19:16:42
【问题描述】:

我有一个 lat 和 long 格式不正确的 JSON 文件来调用地图标记的位置 {lat, lng}。

我正在尝试做一个 getJSON 并且对于每个不正确的纬度和经度,将其发送到一个函数,该函数将其解析为正确的格式并在我的地图中添加一个标记。

虽然我没有运气。它像 "latLang": "27.8247427:-82.75040159999999"

这是 JSON 的链接以供参考。 JSON

这是我的代码。

$(document).ready(function() {
    $.getJSON("http://cs1.utm.edu/~bbradley/map1/customers1.json", function(data) {
      const markers = data.map(({
        latLang
      }) => new google.maps.Marker({
        map: myMap,
        position: new google.maps.LatLng(parseGeo(latLang))
      }));
    });
  });

  const parseGeo = str => { // this is to parse it into the right format
    const [lat, lng] = str.split(':').map(value => parseFloat(value, 10));
    return {
      lat,
      lng
    };
  }

从 JSON 中提取

[{
        "name": "Carole McKenzie",
        "address": "5720 80TH ST NORTH UNIT 310",
        "cityStateZip": "ST PETERSBURG, Florida 33709",
        "latLang": "27.8247427:-82.75040159999999",
        "image": "./people/MTI4MTYuanBn.jpg"
    },
    {
        "name": "Matt Russell",
        "address": "1211 Miller Place Dr",
        "cityStateZip": "Bryant, Arkansas 72022-2389",
        "latLang": "34.606806:-92.5042948",
        "image": "./people/MTQ3OTUuanBn.jpg"
    },
    {
        "name": "George Thrapp",
        "address": "2906 Haddington Court",
        "cityStateZip": "North Chesterfield, Virginia 23224-5716",
        "latLang": "37.466937:-77.5075449",
        "image": "./people/MTk3NTkuanBn.jpg"
    },

【问题讨论】:

  • 能否请您展示一个有效的sn-p,以便我们获得更好的图片
  • 我们无法真正获得有效的 sn-p,因为 URL 拒绝提供 SSL。
  • 绕过请求并粘贴示例 JSON 响应。然后从那里去
  • 我发布了一个 json 的 sn-p。我希望这就是你们的意思。我愿意发布我必须发布的任何内容。

标签: javascript json geocoding


【解决方案1】:

乍一看,我认为您遇到的问题可能是您传递了两个字符串,而不是具有数字 latlng 属性的对象。

我认为你可以简化它。以下是我可能会做的事情:

const data = [{
    "name": "Carole McKenzie",
    "address": "5720 80TH ST NORTH UNIT 310",
    "cityStateZip": "ST PETERSBURG, Florida 33709",
    "latLang": "27.8247427:-82.75040159999999",
    "image": "./people/MTI4MTYuanBn.jpg"
  },
  {
    "name": "Matt Russell",
    "address": "1211 Miller Place Dr",
    "cityStateZip": "Bryant, Arkansas 72022-2389",
    "latLang": "34.606806:-92.5042948",
    "image": "./people/MTQ3OTUuanBn.jpg"
  },
  {
    "name": "George Thrapp",
    "address": "2906 Haddington Court",
    "cityStateZip": "North Chesterfield, Virginia 23224-5716",
    "latLang": "37.466937:-77.5075449",
    "image": "./people/MTk3NTkuanBn.jpg"
  },
  {
    "name": "Trina Anderson",
    "address": "112 South Niles Avenue",
    "cityStateZip": "South Bend, Indiana 46617",
    "latLang": "41.6759656:-86.24418419999999",
    "image": "./people/NDExMTAuanBn.jpg"
  }
];

// utility function for turning the latLang string into an object with lat and lng properties, e.g.
// "41.6759656:-86.24418419999999" => {lat: 41.6759656, lng: -86.24418419999999}
const parseGeo = str => {
  const [lat, lng] = str.split(':').map(value => parseFloat(value, 10));
  return {
    lat,
    lng
  };
}

// convert all of the input items to lat/lng numeric props instead of latLang string
const parsed = data.map(({latLang, ...other}) => ({
  ...other,
  ...parseGeo(latLang)
}));

console.log(parsed);

您可以从那里迭代解析的值并构造标记:

const markers = parsed.map(({lat, lng}) => (
  new google.maps.Marker({
    map: myMap,
    position: new google.maps.LatLng({lat, lng})
  })
);

或者您可以跳过预解析并在创建标记时进行 parseGeo 内联转换:

const parseGeo = str => {
  const [lat, lng] = str.split(':').map(value => parseFloat(value, 10));
  return {
    lat,
    lng
  };
}

const markers = data.map(({latLang}) => (
  new google.maps.Marker({
    map: myMap,
    position: new google.maps.LatLng(parseGeo(latLang))
  })
);

【讨论】:

  • 我知道这是一个愚蠢的问题,但这是我第一次使用 javascript。您将 const data = .... 我如何将 json 放入这样的数组中?还是在我调用 get 函数时自动发生的?
  • 我只是声明了数据内联,所以我不必为了演示接下来的内容而请求外部数据。这只是来自您的 ajax 请求的数据。 (getJSON 回调接收的 data 参数。)
  • 如何调用 json 数据的函数?我有点困惑。
  • 在 getJSON 回调的主体中执行此操作。 “data”参数是解析后的 json 对象。 $.getJSON( url, function(data) { ... })
  • 直接加代码还是需要传参数?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-18
  • 2017-12-03
  • 1970-01-01
  • 2016-10-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多