标签: geometry

通过 MySQL 在半径中获取 zip 的问题

我有一张邮政编码表,其中包括每个邮政编码的中心纬度和 lng。我使用它从任意点获取给定英里半径内的邮政编码列表。

我突然想到,仅仅因为 zip 的中心点不在给定的半径内,并不意味着 zip 本身不在半径内。

我用我超高级的艺术技巧在这里说明了这一点:

在此处输入图片说明

  • 绿色条纹斑点代表邮政编码 A、B 和 C。

  • 红色污点是每个邮政编码的地理中心

  • 紫红色圆点是目标位置,并且..

  • 块状蓝色圆圈距离目标位置 1 英里

如果我对粉红色污迹 1 英里半径内的所有邮政编码运行查询,则仅返回邮政编码 B 和 C,因为 zip A 的中心点不在 1 英里半径内,即使粉红色污迹本身显然在邮政编码 A 中。

SELECT *,
        p.distance_unit
                 * DEGREES(ACOS(COS(RADIANS(p.latpoint))
                 * COS(RADIANS(z.y))
                 * COS(RADIANS(p.longpoint) - RADIANS(z.x))
                 + SIN(RADIANS(p.latpoint))
                 * SIN(RADIANS(z.y)))) AS dist
  FROM standard_zip AS z
  JOIN (   /* these are the query parameters */
        SELECT  $lat  AS latpoint,  $lng AS longpoint,
                $miles AS radius,      69 AS distance_unit
    ) AS p ON 1=1
  WHERE z.y …
Run Code Online (Sandbox Code Playgroud)

mysql spatial geometry

9
推荐指数
2
解决办法
761
查看次数

在数字表上交叉连接以获取线顶点,有没有更好的方法?

问题:

我有一个空间表(道路线),使用 ESRI 的SDE.ST_GEOMETRY用户定义数据类型存储在 Oracle 12c地理数据库中。我想列出线顶点,以便我最终可以访问和更新它们的坐标。如果我使用的是 SDO_GEOMETRY/Oracle Locator,那么我会使用该 SDO_UTIL.GETVERTICES函数。但是我没有使用 SDO_GEOMETRY/Oracle Locator,并且SDE.ST_GEOMETRY. 唯一的SDE.ST_GEOMETRY 功能,我可以找到属于顶点ST_PointNST_NumPoints

我想出了一个成功完成所有这些的查询 - 将线顶点作为行(受此页面启发):

1    SELECT   a.ROAD_ID
2             ,b.NUMBERS VERTEX_INDEX
3             ,a.SDE.ST_X(SDE.ST_PointN(a.SHAPE, b.NUMBERS)) AS X
4             ,a.SDE.ST_Y(SDE.ST_PointN(a.SHAPE, b.NUMBERS)) AS Y
5    FROM     ENG.ROADS a
6             CROSS JOIN ENG.NUMBERS b
7    WHERE    b.NUMBERS <= SDE.ST_NumPoints(a.SHAPE)
8    --removed to do explain plan: ORDER BY ROAD_ID, b.NUMBERS

----------------------------------------------------------------------------------------------------
| Id  | Operation           | Name …
Run Code Online (Sandbox Code Playgroud)

oracle spatial geometry number-table

8
推荐指数
1
解决办法
683
查看次数

如何使用 SQL Server 空间数据类型设置多维距离搜索的解决方案

我有一个性能不佳的现有数据库解决方案。我正在使用浮点数等使用传统表结构搜索多维数据。数据库包含约 1-2M 行。

经过一番搜索,我发现了 SQL Server 空间数据类型,您可以在其中定义基于 Point 或 MultiPoint 的几何图形,您可以在其中进行距离搜索。我认为这可能是一个解决方案,但我需要一些帮助才能朝着正确的方向开始。

我当前的表结构如下,其中每行包含 2 个(最终更多)XYZ 值:

    | ID | X1  | Y1  | Z1  | X2  | Y2  | Z2  |
    | 1  | 1.1 | 2.2 | 5.1 | 1.2 | 2.1 | 4.1 |
    | 2  | 3.2 | 5.1 | 4.1 | 3.2 | 3.1 | 3.1 |
    | 3  | 4.1 | 2.3 | 6.3 | 4.2 | 4.1 | 2.1 |
    | 4  | 2.4 | …
Run Code Online (Sandbox Code Playgroud)

sql-server spatial nearest-neighbor geometry

7
推荐指数
1
解决办法
327
查看次数

Mysql 8 ST_GeomFromText 在函数 st_geomfromtext 中给出错误纬度超出范围。它必须在 [-90.000000, 90.000000] 内

我正在 mysql 8 上尝试以下插入查询。

Insert Into fence Set       
            fenceName='aa',
            radius=2,                   
            fenceGeometry=ST_GeomFromText('POINT(102.1893310546875 3.880696482497261)', 4326)
Run Code Online (Sandbox Code Playgroud)

它在 mysql 5.7 上完美运行,但在 mysql 8 中我得到了这个 error Latitude 102.189331 is out of range in function st_geomfromtext. It must be within [-90.000000, 90.000000].

根据一些建议,我也这样做了。

ALTER TABLE fence MODIFY fenceGeometry geometry NOT NULL SRID 4326;
Run Code Online (Sandbox Code Playgroud)

但是它给了我相同的结果。

spatial geometry mysql-8.0

5
推荐指数
1
解决办法
1518
查看次数