为了熟悉数据类型“geometry”,我想在表中导入一个gpx文件并在osmMap上显示它。我正在使用mariadb/phpmyadmin,因为这是我的主人提供给我的。我之所以使用“geometry”类型是因为我喜欢stu函数(而不是将lat lon放在两列中,并开发/复制所需的算法)。
在google和youtube搜索了一段时间之后,我开始怀疑自己是做错了还是遇到了bug。因为我不知道该期待什么,我希望有人能让我走上正轨。
我从安装了xampp7.3.4(phpmyadmin4.8.5/mariadb 10.1.38)的本地pc开始。我从一个列数据类型point开始,很惊讶phpmyadmin可以选择在Map上显示记录的内容,很失望我只看到了蓝色的水。在编辑记录时,phpmyadmin显示了必须显示的Map和数据,这表明srid为“0”。无法获取“4326”上的srid,直到某处的某个文本提示met使用具有数据类型几何体的列。但只有一张世界Map出现了。
经过多次尝试,我决定使用托管环境(phpmyadmin 4.9.5/mariadb 10.3.22)。令我惊讶的是,Map上可以看到这一点。只是,在世界的另一个地方。我看了看纬度,发现它们互换了。把它们放在lon-lat序列中,这个点在我预期的地方是可见的。
因为hoster提供了更高的安装版本,所以我安装了更新的xampp7.4.6(phpmyadmin 5.0.2/mariadb 10.4.1)。令人惊讶的是,我的观点没有出现,只是世界Map又出现了。所以需要注意的是本地机器上osmMap的一些配置?纬度还是要互换的。
Map正常,lat-lon互换
Map错误,lat lon ok
巴黎步行Map。第一个是prune中gpx的Map,第二个是mariadb中跟踪点的导入。完全相同的Map,只需要交换纬度上的点。所以,我认为使用的srid和/或坐标没有问题,只是phpmysql取lat为y,lon为x,而不是预期的lat为x,lon为y,这使得行走在索马里人前面的海上某处:
以prune呈现的巴黎漫步Map
在phpmyadmin、lat-lon交换区绘制相同的gps点
除了数据的呈现,我在使用phpmyadmin的insert选项时遇到了困难。当使用sql时,我只在表中的一次传递中获取数据。insert选项生成sql,它给出错误。我必须编辑sql,有“'”和“\”我必须删除。比较使用过的版本,我发现要删除“'”和“\”的文件在数量和位置上存在差异。
我看了一下phpmyadmin的问题,似乎什么都没有。我可以找到一些封闭的人,他们指出了我正在经历的一些问题。关于geo的很多文档都是关于postgresql的,有些是关于mysql的,但是关于mariadb和phpmysql的很少,很难找到好的方向。
所以,我最大的三个问题是,它是否打算存储lon lat而不是lat lon(或者我必须使用另一个srid吗?)第二个问题是,我必须配置什么才能使Map在本地工作,就像它在我的宿主上工作一样(如果这是导致问题的原因)?第三个问题是人们是否可以使用phpmysql的insert选项而不编辑生成的sql?
提前谢谢。
1条答案
按热度按时间wj8zmpe11#
如果要使用大的圆距离,请确保有一个版本的mysql/maraidb,其中包括
st_distance_sphere
. (我认为这将限制您使用mysql 8.0。)如果你有代码去“寻找最近的”,你会发现这很有挑战性。下面是我对这些技巧的讨论。http://mysql.rjweb.org/doc.php/find_nearest_in_mysql (还包括一个用于进行大圆计算的存储函数)
SPATIAL
以及其他技术。你的问题的一部分是从y和x到你Map上的世界投影的Map。球面长lat认为“球面”不是“投影”。
phpmyadmin只是一个ui工具。处理一些空间问题可能不够聪明。建议您切换到mysql命令行工具和/或您的应用程序代码。顺便问一下,你将用什么语言写作?
backtic用于表名和列名。在字符串周围使用引号('或')。在某些情况下,反斜杠(
\
)可能需要翻倍甚至翻两番。POINT
是25字节的二进制格式。最好是动态地构造值,而不是拼出值,这可以用十进制数字来表示INT
以及FLOAT
.是的,经度是第一位的
POINT()
以及其他SPATIAL
东西。