首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP pack()将WKT转换为WKB

使用PHP pack()将WKT转换为WKB
EN

Stack Overflow用户
提问于 2011-10-02 09:16:09
回答 2查看 1.5K关注 0票数 0

我使用预准备语句将数据插入到数据库中,问题是我不能使用

插入到表(多边形)值(GeomFromText(POLYGON((?,?)

为什么?嗯,似乎GeomFromText本身被解释为文本:/所以我想我可以尝试将纯WKB字符串推送到数据库中,问题是我真的不知道如何将WKT打包到WKB中。

有没有人可以用这个格式来帮助我:http://php.net/manual/en/function.pack.php上的http://dev.mysql.com/doc/refman/5.0/en/gis-wkb-format.html和pack()的文档

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-02 16:11:16

这很简单。抓取一个specification,使用"C“表示字节,"V”表示uint32,"d“表示pack格式字符串中的双精度。然而,我的建议是不要这样做。首先,重写内置函数是浪费时间。其次,使用sql传输二进制数据容易出错(例如,考虑编码问题)。第三,根据http://dev.mysql.com/doc/refman/5.0/en/creating-spatial-values.html的说法,您甚至不需要GeomFromText,因为mysql已经将未加引号的wkt视为二进制。

票数 0
EN

Stack Overflow用户

发布于 2012-04-03 07:54:50

我看到了两个问题。首先,GeomFromText函数接受一个字符串,因此它看起来应该类似于GeomFromText('POLYGON((0, 1, 2))') (注意引号)。其次,因为POLYGON...文本是字符串文字,所以应该用通配符替换它,而不是单独的片段。您的查询应如下所示:

代码语言:javascript
复制
INSERT INTO areas (name, polygon)
VALUES (?, GeomFromText(?))

然后,您将在应用程序中构建POLYGON((?, ?, ?, ?, ?, ?))字符串,而不是在语句中。因为PHP有安全的字符串处理,所以我推荐使用sprintf('POLYGON((%d, %d, %d, %d, %d, %d))', $var1, $var2, $var3, $var4, $var5, $var6) (在C中sprintf是危险的)。

或者,您可以使用MySQL的空间函数来生成点。我认为这就是您想要做的,但是您没有通过GeomFromText传递它们。要使用MySQL的空间函数构建多边形,文档建议您执行以下操作:

代码语言:javascript
复制
INSERT INTO areas (name, polygon)
VALUES (?, Polygon(LineString(Point(?, ?), Point(?, ?), Point(?, ?))))

在MySQL 5.1.35之前,您需要执行以下操作:

代码语言:javascript
复制
INSERT INTO areas (name, polygon)
VALUES (?, GeomFromWKB(Polygon(LineString(Point(?, ?), Point(?, ?), Point(?, ?)))))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7624014

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档