【问题标题】:How do you convert normal geographic json coming from server into geoJson?你如何将来自服务器的普通地理 json 转换为 geoJson?
【发布时间】:2019-04-03 13:55:55
【问题描述】:

我有一个服务器,其中包含普通 json 格式的地理数据,我需要将其更改为 geojson 格式,以便 Mapbox 可以读取它。你是怎么做到的?

例如,如何转换:

[
  {
    "id": 0,
    "name": "Hotel",
    "icon": "Sleep",
    "address": "SampleStreet 34",
    "latitude": 12,
    "longitude": 55
  }
]

进入这个:

{
"type": "FeatureCollection",
  "features": [
    {
    "id": 0,
    "type": "Feature",
    "properties": {
      "placeID": 0,
      "name": "Hotel",
      "icon": "sleep",
      "addressFormatted": "SampleStreet 34"
    },
    "geometry": {
      "type": "Point",
      "coordinates": [
        12,
        55
      ]
    }
}

【问题讨论】:

  • 您能提供一些您尝试过的示例吗?
  • 我假设你必须编写一个脚本,但我不知道它会是什么样子 - 请参阅上面的 json 和 geojson 示例

标签: javascript react-native mapbox geojson react-native-mapbox-gl


【解决方案1】:

如果您使用 ES6,那么这样的东西可能对您有用,如果您可以直接使用生成的对象,则可能不需要 JSON.stringify

const data = [
  {
    id: "0",
    name: "Hotel",
    icon: "Sleep",
    address: "SampleStreet 34",
    latitude: "12",
    longitude: "55"
  },
  {
    id: "1",
    name: "Landmark",
    icon: "Star",
    address: "SampleStreet 1234",
    latitude: "99",
    longitude: "100"
  }
];

const geojson = {
  type: "FeatureCollection",
  features: data.map(item => {
    return {
      id: item.id,
      type: "Feature",
      properties: {
        placeID: item.id,
        name: item.name,
        icon: item.icon,
        addressFormatted: item.address
      },
      geometry: {
        type: "Point",
        coordinates: [item.latitude, item.longitude]
      }
    };
  })
};

console.log(geojson);
console.log(JSON.stringify(geojson));

【讨论】:

    【解决方案2】:

    @turf 库可以帮助解决这个问题,因此您可以执行以下操作:

    import { lineString as makeLineString } from '@turf/helpers';
    

    然后像这样使用它(注意经度在前)

    var coords = [];
    var dataarray = JSON.parse(thejson);
    for (var i=0; i < dataarray.length; i++){
        obj = dataarray[i];
        coords.push([obj.long, obj.latitude]);    
    }
    
    let mapboxpoints = makeLineString(coords)
    

    您应该在此处查看 mapbox 示例:https://github.com/nitaliano/react-native-mapbox-gl/tree/master/example/src

    【讨论】:

    • 我对所有的 mapbox 示例都非常熟悉 - 但是,没有一个示例可以从其他地方获取非 geojson 格式的 json 数据。因此我需要编写一个脚本,例如一个 GeojsonTranslator.js 文件,它获取我的原始 json 数据,并将其转换为 geojson,以便 mapbox 可以读取它。
    • @kingloui - 您应该能够使用JSON.parse 将您的 json 文件转换为一个对象,然后通过数组循环。我不认为它需要比这更复杂。我已经更新了我的答案。
    • 好的,我不完全确定该怎么做 - 你能不能再解释一下?或者你有在哪里完成的例子吗?
    • 你能看看我的回答吗?
    【解决方案3】:

    我使用 GeoJson (https://www.npmjs.com/package/geojson) 来解析我的数据,它看起来像下面这样运行良好:

    import GeoJSON from 'geojson';
    import jsonData from './jsonData.json';
    
    const json = jsonData;
    
    const data = GeoJSON.parse(json, {
      Point: ['latitude', 'longitude'],
      include: ['name', 'icon', 'addressFormatted']
    });
    
    export default data;
    

    然而,我现在缺少的是我的 feature.id。有谁知道如何将其纳入?我不希望我的 id 在属性下。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-02
      • 1970-01-01
      • 1970-01-01
      • 2017-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多