我正在尝试定义一个数据库模式来存储"对象"在桌子上。
主要问题是我需要在表格中列出几何形状和其他类型的标记,以便将它们绘制到谷歌地图上。
例如,圆圈只有x,y和半径。折线会有一组点,一个正方形会有......等等......
我的第一个想法是创建两个相关的表,如:
对象
object_details
但这是一个非常丑陋且无用的实现,因为我可能需要更多不同的属性数据类型 - 比如文本或时间或其他任何东西,这会使架构复杂化,在object_details表中创建大多数空行。
我想问你对这个问题的看法。
对于这个问题,什么是好的/干净的解决方案?
此致
答案 0 :(得分:2)
我建议您查看spatial extensions for MySQL和。{ postgresql的POSTGIS扩展,它支持在空间列中存储多种类型的几何体。
答案 1 :(得分:2)
您必须以某种格式打包数据,存储它,然后将其解压缩以供使用。例如,JSON,PHP和JS都支持。例如在PHP中:
$shape = array("kind"=>"circle", "cx"=>45,"cy"=>90,"r"=>20);
$json = json_encode($shape, JSON_NUMERIC_CHECK); // NUMERIC_CHECK doesn't treat numbers as strings
SQL:
$query = "INSERT into SHAPES set `shape`=>'$json'";
您可以使用“json_decode();”返回PHP数组
$shape = json_decode($json);
此外,这种格式使其易于与ajax和jquery一起使用,因为您的服务器可以直接提供JSON内容:
$.getJSON("server.php",function(response) {
console.log("Kind is " + response.kind + ", radius is " + response.r);
});
答案 2 :(得分:1)
如果要避免使用空间扩展,可以考虑使用文本列并使用GEOJSON对象填充它。它看起来像Google maps can consume GeoJSON,因此可能适合您。