【问题标题】:Converting GeoJSON to MySQL将 GeoJSON 转换为 MySQL
【发布时间】:2022-05-07 05:22:44
【问题描述】:

我没有太多使用 MySQL 的经验,更不用说扩展它了。我想将 SimpleGeo 数据导入 MySQL 数据库。这是一个条目的示例:

{ "geometry" : { "coordinates" : [ -87.547968999999995,
          33.151769000000002
        ],
      "type" : "Point"
    },
  "id" : "SG_1uDW3Q0HX5ZQPMw1q3XcGF_33.151769_-87.547969@1293731398",
  "properties" : { "address" : "6000 Old Greensboro Rd",
      "city" : "Tuscaloosa",
      "classifiers" : [ { "category" : "Restaurant",
            "subcategory" : "",
            "type" : "Food & Drink"
          } ],
      "country" : "US",
      "href" : "http://api.simplegeo.com/1.0/features/SG_1uDW3Q0HX5ZQPMw1q3XcGF_33.151769_-87.547969@1293731398.json",
      "name" : "Godfather's Pizza",
      "owner" : "simplegeo",
      "phone" : "+1 205 464 0000",
      "postcode" : "35405",
      "province" : "AL",
      "website" : "www.dinerrestaurants.com"
    },
  "type" : "Feature"
}

我想将其放入 MySQL 数据库中,并能够在其上运行地理空间查询。我知道 MySQL 有空间扩展,但我完全不知道从哪里开始。 MySQL 文档听起来好像它已经是 MySQL 的一部分,但真的是这样吗?我怎样才能运行整个(8 GB)文件并将其放入地理空间数据库?我可以使用 PHP 吗? (我对 PHP 很满意。)

我知道我在这里要求很多,但任何帮助都会很棒。

【问题讨论】:

  • mysql版本是多少?
  • 你有准备好使用或需要开发的mysql表吗?
  • 你显示的这个数据,来自POST、GET、浏览器、jquery等?输出这种数据的技术是什么?
  • Ver 14.14 Distrib 5.5.32, for debian-linux-gnu (x86_64) using readline 6.2 是版本。我还没有为此制作表格,但我假设 JSON 将被展平,并且坐标将被包裹在某种几何数据类型中(point 似乎是从 MySql 文档开始的方式。)我不确定这些数据的输出是什么……它来自 SimpleGeo 转储。一个文件中至少还有一百万个类似的条目。正如我所说...它的大小为 8GB。

标签: mysql geojson


【解决方案1】:

您可以在 MySql 请求中使用 ST_GeomFromGeoJSON(GeoJson 格式的字符串) 函数。

【讨论】:

  • 这种回答应该是解释不好的评论,,,
【解决方案2】:

我想通了! json 文件由新行分隔,所以我可以逐行解析 json 并将其提交给我的 MySQL!问题解决了。

【讨论】:

    【解决方案3】:

    3 天,但找到了一个我想分享的简单解决方案。适用于 MySQL 版本 8 和 PHP 版本 8。我没有尝试任何其他版本。

    $str = '{"type":"GeometryCollection","geometries":[{"type":"MultiPolygon","coordinates":[[[[0,0],[1,0],[1,1],[0,1],[0,0]]]]}]}';  
    

    ---或从文件中获取---

    $str = file_get_contents("1234.json");
    

    我遇到的问题是 GeoJson 数据和 MySql 语句都有单引号和双引号。 “

    $sql = <<<EOD
        UPDATE table SET column =  ST_SRID(ST_GeomFromGeoJson('
        EOD.$str.<<<EOD
        '),3857) WHERE column = anything 
        EOD;
    

    注意:使用 后必须开始换行

    要测试代码,请指向多边形内

    $sql = "SELECT * from column WHERE ST_Contains
    (column, ST_GeomFromText('POINT(.5 .5)',3857))";
    
    $result = $link->query($sql);  
    foreach($result as $row) {
        echo $row['column'];
    } 
    

    并指向多边形之外

     $sql = "SELECT * from column WHERE ST_Contains
    (column, ST_GeomFromText('POINT(2 2)',3857))"; 
    

    【讨论】:

      猜你喜欢
      • 2015-05-10
      • 2011-08-02
      • 2013-04-09
      • 1970-01-01
      • 2022-10-14
      • 2013-02-04
      • 2020-09-06
      • 2021-08-22
      • 2015-12-23
      相关资源
      最近更新 更多