【发布时间】:2013-06-13 19:15:59
【问题描述】:
第一次发帖。
我想实现一些基本的空间表,不使用内置类型(如几何、点、线串)
我必须这样做才能为我的大学实施一项练习。
建议的分析是:
点(Point_ID、X、Y)
Segment(Segment_ID、From_Point、To_Point)
多段线(Polyline_ID、Segment_ID、Line_Seq_No)
区域(Region_ID、Polyline_ID、Region_Seq_No)
使用上面的方法,我制作了以下表格(在 mysql 中)
CREATE TABLE IF NOT EXISTS `points` (
`point_id` int(11) NOT NULL AUTO_INCREMENT,
`x` int(11) NOT NULL,
`y` int(11) NOT NULL,
PRIMARY KEY (`point_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `polylines` (
`polyline_id` int(11) NOT NULL AUTO_INCREMENT,
`segment_id` int(11) NOT NULL,
`line_seq_no` int(11) NOT NULL,
PRIMARY KEY (`polyline_id`),
KEY `segment_id` (`segment_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `regions` (
`region_id` int(11) NOT NULL AUTO_INCREMENT,
`polyline_id` int(11) NOT NULL,
`region_seq_no` int(11) NOT NULL,
PRIMARY KEY (`region_id`),
KEY `polyline_id` (`polyline_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
CREATE TABLE IF NOT EXISTS `segments` (
`segment_id` int(11) NOT NULL AUTO_INCREMENT,
`from_point` int(11) NOT NULL,
`to_point` int(11) NOT NULL,
PRIMARY KEY (`segment_id`),
KEY `from_point` (`from_point`),
KEY `to_point` (`to_point`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
ALTER TABLE `polylines`
ADD CONSTRAINT `polylines_ibfk_1` FOREIGN KEY (`segment_id`) REFERENCES `segments` (`segment_id`);
ALTER TABLE `regions`
ADD CONSTRAINT `regions_ibfk_1` FOREIGN KEY (`polyline_id`) REFERENCES `polylines` (`polyline_id`);
ALTER TABLE `segments`
ADD CONSTRAINT `segments_ibfk_2` FOREIGN KEY (`to_point`) REFERENCES `points` (`point_id`),
ADD CONSTRAINT `segments_ibfk_1` FOREIGN KEY (`from_point`) REFERENCES `points` (`point_id`);
我不知道上面的实现方法是否正确..
我了解如何将数据存储到 points 和 segments 表中..
但我不知道如何存储折线或区域。 例如,进入 line_seq_no 我必须存储什么? seq=>sequence,但是如果我存储一个段序列,如何通过查询检索这些段?
提前谢谢
【问题讨论】:
-
这取决于您要对数据执行什么操作...有效地搜索空间数据需要适合该目的的结构,例如 R-Trees; MySQL 提供基于此类数据结构的索引,但前提是使用其空间扩展(您显然已排除)。
-
@eggyal 我不在乎效率。我将运行一些困难的查询,例如
find the Euclidean distance between a point and a polyline我不是在寻找最佳解决方案,我只是在寻找一个简单的解决方案