我在一个旅游网站工作,我需要存放游客前往的旅游景点。我需要斑点在位置表中是唯一的,以便我可以知道特定地点的受欢迎程度等。 我还需要与我一起存储的所有国家,州,城市因为我不能依赖用户输入。 数据库是MySQL。 看到可用于这些地点的数据集,我发现存在一个问题,即各国的城市可能会使用省,州,县等。
所以,我的问题是如何设计架构以便我可以存储所有位置。 我在考虑为国家,州,城市和景点设置桌子。 斑点表将包含spot_name,cityId,stateId,countryId以及一些具有经度和纬度范围的字段。 通过这种方式,我可以通过其地理位置识别相同的点。
但是,由于州/省/县等问题,这个解决方案不会起作用。 您能否建议如何构建模式,并使用正确的数据进行播种,以便最大限度地减少对用户输入的依赖。
答案 0 :(得分:1)
您应该使用地理空间数据库,因为您可以将国家/地区等位置存储为空间实体,因此可以正确确定嵌套。
如果你不能使用它,你可以通过将世界划分为网格,然后递归地细分网格的每个方格,使用普通表中的字符串来模拟地理空间位置。
例如,将世界划分为9个正方形,从左上角到右下角编号为1-9。这些大正方形中的任何东西都只有一个数字参考。然后将每个方格划分为9,并且此级别的任何内容都有2位数的引用。所以11是左上方,99是右下方。
重复此过程,直到获得所需的精度。单个功能可能有一个10位数长的参考5624357899,但你会知道这将在任何较大的功能内,这是较少的数字,以相同的字符串开头,如5624357.所以你的国家会有更少的数字,因为它们更大,但你的个别地点会有更多,因为它们更小,位置更准确。
这只会给你一个近似的位置(对于长薄的功能会很糟糕),但可能足够合适
第一个网格将如下所示:
______________________________
| | | |
| 1 | 2 | 3 |
| | | |
|_________|_________|_________|
| | | |
| 4 | 5 | 6 |
| | | |
|_________|_________|_________|
| | | |
| 7 | 8 | 9 |
| | | |
|_________|_________|_________|
第二轮看起来像这样(为简单起见,只完成了第一个方格):
______________________________
|11|12 |13| | |
|---------| 2 | 3 |
|14|15 |16| | |
|---------| | |
|17|18 |19| | |
|_________|_________|_________|
| | | |
| 4 | 5 | 6 |
| | | |
|_________|_________|_________|
| | | |
| 7 | 8 | 9 |
| | | |
|_________|_________|_________|
你重复这个过程,直到你有足够的近似值为你的目的。
答案 1 :(得分:0)
我认为问题的架构部分非常简单。但真正的问题是如何让用户选择数据 - 你想象的(几乎)不可能!我不认为存在任何将坐标转换为地名的数据库。即便谷歌也无法为你做到这一点 - 例如,搜索" Lat Long Taj Mahal"提供27.1750,78.0419(谷歌使用他们自己和其他人的经验告诉你);但搜索" 27.1750,78.0419"只是在地图上产生一个图钉,然后我们的人眼就可以看到图钉非常接近了。到一个名为" Taj Mahal" (或印地语的ताजमहल,或古吉拉特语的તાજ))......
想象一下 - 如何填充您的架构?如果你想要体面的准确度(需要至少6位小数),请考虑你需要多少坐标?谁将成为地名的权威?
所以我认为你最好的方法可能是:
然后您可以存储您的应用收集的精确坐标,以及用户指定的地名;并以数百万美元的价格出售数据! (我怀疑谷歌已经这样做了;)