如何将 JSON 转换为 GeoJSON

2024-03-02

我对 javascript 的学习还很陌生,我的基础知识已经碰壁了。我已经设置了一个传单地图,我希望从 JSON 中的绳索上绘制基于 divIcon 的标记。通过我无数次的研究,试图让它发挥作用。我了解到为什么我的 JSON 文件无法工作,即使我在控制台中确认它正在被读取。我了解到 Leaflet 更喜欢使用 GeoJSON 格式。所以我又花了几个小时研究如何转换它。我的大部分发现都已经过时,不再有效或不适用于我。这是我通过严格的研究所做的尝试。

首先,我为测试 JSON 文件的路径设置了一个变量,如下定义。

var jsonData = "./data/tracking.json";

在我尝试将 JSON 转换为 GeoJSON 时,我尝试了这个。

var outGeoJson = {}
outGeoJson['properties'] = jsonData
outGeoJson['type']= "Feature"
outGeoJson['geometry']= {"type": "Point", "coordinates":
    [jsonData['lat'], jsonData['lon']]}

console.log(outGeoJson)

检查控制台,发现 JSON 文件中的数组中的坐标未定义。

我对未定义的原因的搜索失败了。我的理论可能是因为 JSON 在数组之前有一个位置键,并且事实上它是一个数组。我继续寻找可能解决此问题的有效解决方案。接下来我尝试了这个解决方案。

var geojson = {
  type: "FeatureCollection",
  features: [],
};

for (i = 0; i < jsonData.positions.length; i++) {
  if (window.CP.shouldStopExecution(1)) {
    break;
  }
  geojson.features.push({
    "type": "Feature",
    "geometry": {
      "type": "Point",
      "coordinates": [jsonData.positions[i].longitude, jsonData.positions[i].latitude]
    },
    "properties": {
      "report_at": jsonData.positions[i].report_at,
      "lat": jsonData.positions[i].lat,
      "lon": jsonData.positions[i].lon,
      "dir": jsonData.positions[i].dir,
      "first": jsonData.positions[i].first,
      "last": jsonData.positions[i].last
    }
  });
}

window.CP.exitedLoop(1);

console.log(geojson)

这个解决方案给了我一个错误的控制台Uncaught TypeError: Cannot read property 'length' of undefined.

尝试再花几个小时对该解决方案进行故障排除,但也未能成功。以下是我正在使用的测试 JSON 文件的示例。

{
  "positions": [
    {
      "report_at": "2015-01-21 21:00:08",
      "lat": "38.9080658",
      "lon": "-77.0030365",
      "elev": "0",
      "dir": "0",
      "gps": "0",
      "callsign": "WX2DX",
      "email": "",
      "phone": "",
      "ham": "WX2DX",
      "ham_show": "0",
      "freq": "",
      "note": "",
      "im": "",
      "twitter": null,
      "web": "",
      "unix": "1421874008",
      "first": "William",
      "last": "Smith",
      "marker": "36181"
    }
  ]
}

我真正需要的是report_at、lat、lon、dir、first、last。其余的我可以不用。我尝试过的上述示例是否是一种好的或正确的转换方法?如果没有,那么有没有人有比我一直在尝试的更好的建议,我可能会错过或忽略由于对这种语言非常陌生而这是一个很好的可能性?提前致谢!

EDIT:由于它引起了我的注意,我没有加载 JSON 文件,这就是我加载它的方法,因为这些建议不起作用,因为它们适用于 node.js 而不是本机 javascript 的一部分。

    $.getJSON("./data/tracking.json", function(jsonData) {
  var outGeoJson = {}
  outGeoJson['properties'] = jsonData
  outGeoJson['type']= "Feature"
  outGeoJson['geometry']= {"type": "Point", "coordinates":
      [jsonData['lat'], jsonData['lon']]}

  console.log(outGeoJson)
});

这会加载在控制台中显示的文件(转换为 GeoJSON)。除非有更好的解决方案,否则我将暂时保留此内容。


如果您的项目中确实添加了 jQuery,那么您就差不多完成了:

$.getJSON("./data/tracking.json", function(jsonData) {
    /* 
    Here the anonymous function is called when the file has been downloaded.
    Only then you can be sure that the JSON data is present and you can work with it's data.
    You have to keep in mind if you are getting the file synchronously or asynchronously (default).
   */
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 JSON 转换为 GeoJSON 的相关文章

随机推荐

  • 在 jQuery 中动态添加点击处理程序

    我有一个 MVC 应用程序 其中顶部菜单是动态构建的 如下所示 each data function index dataMenu if i 0 stringBuilder push li class home a href dataMen
  • PHP 在肥皂调用中重复元素

    我尝试从 PHP 进行肥皂调用时遇到问题 首先是一些背景信息 呼叫将转到一个在大型 CRM 系统上进行人员搜索的系统 它需要姓名 城市 出生日期等信息 成功时 应返回一个或多个 id 肥皂接口是系统的标准部分 因此我无法影响调用的布局 我首
  • Axon 框架:删除聚合根

    老实说 我不知道从哪里开始 存储库方面相对简单 但我似乎找不到任何有关如何通过 CommandGateway 删除聚合根的信息 任何有关如何实现这一目标的指示和 或文档将不胜感激 将其放在这里 以供其他可能像我最初一样迷失的人将来参考 使用
  • 如何通过对象内对象的改造来解析json数据?

    我在网上看到了很多用于改造的 JSON 示例 但无法找到我拥有的 json 结构类型 我无法解决它 我有以下 json 数据 我试图用 java 在我的 android 应用程序中显示它们 main data Date 2020 06 15
  • FFmpeg - 请求的输出格式“mpeg”不是合适的输出格式

    我正在尝试使用 FFmpeg 将视频从 mp4 格式转换为 mpeg 以便我可以合并多个视频 我有一个 FFmpeg 的自定义构建 我可以在其中控制配置选项 ffmpeg y i VID 20150514 171122 12085 mp4
  • Apache重写日志

    我收到 网页有重定向循环 错误 这很可能是由于我的 Apache 重写配置造成的 我以前遇到过这些问题 并且发现它们很难调试 是否有某种日志可以让我查看请求被重定向到的内容 如果没有 如何有效地调试 Apache 重写 如果您使用的是较新的
  • 如何为具有类型参数约束的泛型类型编写扩展方法?

    我正在使用特定于任务的 NET 平台 该平台是预编译的 而不是开源的 对于某些任务 我需要扩展此类 但不是通过继承它 我只是想添加一个方法 首先 我想向您展示一个虚拟代码现有类 public class Matrix
  • Android图像视图重力

    如何动态设置重力 Bitmap bmp im new ImageView this bmp getbmp img im setImageBitmap bmp 现在我想把图像放在顶部 我可以在没有的情况下做到这一点吗android gravi
  • 使用 AWS API Gateway 进行 API 版本控制

    我在使用 API Gateway Lambda 实现可行的版本控制方案时遇到问题 我的要求是在 API 级别进行主要版本控制 然后在服务级别进行次要版本控制 我的环境也分布在多个帐户中 因此暂存不是环境传播的选项 有人使用 AWS API
  • 如何构建 libjpeg 供 ndk 使用

    我下载了 libjpeg 8d 源代码 我想将其编译为 libjpeg so 可以在 android ndk 中使用 因为ndk使用arm架构 但我的PC的gcc是x86架构 所以当我使用gcc编译出libjpeg so并将其放入jni文件
  • 如何从终端重新加载 Google Chrome 标签?

    有没有办法仅使用终端在 Ubuntu 中重新加载 Google Chrome 选项卡 我不想只是打开一个新窗口 而是要实际刷新一个选项卡 额外问题 这在其他浏览器 例如 Opera Safari Firefox 中也可能吗 一个衬垫将聚焦
  • 如何将 django 调试工具栏设置为仅适用于某些用户?

    马上 是的 我知道 INTERNAL IPS 我即将在工作集成和测试中打开我的 Django 应用程序 我知道将会进行调试并进行大量修改和 或优化 所以我很乐意Django 调试工具栏 https github com django deb
  • 使用 URL 加载底部导航栏项目图标内的图像

    我正在尝试使用底部导航栏的项目图标内的 firebase 存储 url 加载个人资料图像 这是我的代码 Glide with getApplicationContext asBitmap load profilePicUrl into ne
  • AttributeError:尝试在 Discord.py 中创建按钮时,模块“discord”没有属性“ui”

    我想知道如何使用discord py 制作按钮 这将是我想要的一个例子 My Code import discord from discord ext import commands client commands Bot command
  • 如何知道按下的是什么字符键?

    我想知道在纯 Javascript 中以跨浏览器兼容的方式按下了什么字符键 清除 JavaScript function myKeyPress e var keynum if window event IE keynum e keyCode
  • 节省内存和编译时间

    有什么方法可以使用模块在 perl 中节省内存和编译时间吗 例如 不加载所有不必要的 未使用的子程序 或者 如果我将我的潜艇分成许多不同的 这是一个好方法pm文件 然后我只加载必要的模块 例如 usr bin perl w sub mysu
  • mkdir() 不工作

    My code mkdir some absolute path 0777 and mkdir relative path 0777 不起作用 安全模式已关闭 我什至尝试将所有父文件夹设置为 777 有任何想法吗 编辑 我确实打开了错误报告
  • 如何从memfd_create获取内存地址?

    在我的应用程序中我需要共享内存 父母和孩子之间 使用fork execl 我用memfd create分配内存 因为它提供了 文件描述符 可以方便地在子进程中使用 进程 描述符通过dup2 before execl 附加到分配的内存 我不使
  • 扁平列表和免费 monad

    我试图说服自己 List monad 具有平面列表 列表串联和按元素映射的列表 不是一个自由 monad 准确地说 是与某个函子 T 关联的自由 monad 据我了解 我应该能够通过以下方式实现这一目标 首先在 monad 列表中找到常用运
  • 如何将 JSON 转换为 GeoJSON

    我对 javascript 的学习还很陌生 我的基础知识已经碰壁了 我已经设置了一个传单地图 我希望从 JSON 中的绳索上绘制基于 divIcon 的标记 通过我无数次的研究 试图让它发挥作用 我了解到为什么我的 JSON 文件无法工作