【问题标题】:Saving and querying areas in mysql在mysql中保存和查询区域
【发布时间】:2012-01-10 12:09:07
【问题描述】:

我在 MySQL 数据库中保存了一系列区域(城市、地区等)。目前,这些仅包含人类可读的名称。

如何选择包含特定纬度/经度点的所有记录?如何保存区域信息?是否可以与 Google Maps API 搭配使用?

(是的,不幸的是,我一直使用 MySQL。)

【问题讨论】:

标签: php mysql google-maps geocoding


【解决方案1】:

这在普通 MySQL 中并不容易。大多数时候,人们通过将 GIS 扩展用于他们的数据库引擎来解决这个问题,让您存储您正在寻找的“区域”信息的类型。 MySQL 有 Spatial Extensions 应该可以解决问题,您可能正在寻找的确切功能,如 ST_Contains 已列出 here

注意:您需要 MySQL >= 5.6.1 才能从 contains 函数中获得预期的行为,否则它们只是基于哑矩形的操作。

【讨论】:

    【解决方案2】:

    您最好做一些事情,例如使用 Google API 收集给定邮政编码的纬度和经度(假设您有邮政编码)并构建所有纬度/经度/邮政编码的对象,然后编写 PHP 脚本/函数只需循环通过带有新纬度和经度的邮政编码更新您的数据库记录的数组

    例如:

    $data = array ( array ( 'e11', '0.01111', '5.313133' ), array ( 'e11', '0.01111', '5.313133' ) );
    
    foreach ( $data as $p )
    {
       query ( 'UPDATE table SET lat = "' . $p['lat'] . '", lng = "' . $p['long'] . '" WHERE postcode = "' . $p['postcode'] . '" );
    }
    

    然后将所有这些长背心都收集起来并放入一个真正循环的格式。

    【讨论】:

    • 这不是找到纬度/经度的问题,而是节省一个区域。邮政编码也有同样的问题:它们由多边形而不是点表示。
    • 我真的不明白你的意思
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    • 1970-01-01
    • 1970-01-01
    • 2020-07-22
    • 2012-11-06
    相关资源
    最近更新 更多