SQL表如何存储地图图例?

问题描述:

我不是要求选择哪个Map图例分类。但假设我选择了一个,我将如何将它正确存储在SQL表中?提问的原因是,最后,我需要储存比预期更多的信息.​​.....希望有人能够验证。SQL表如何存储地图图例?

考虑下面三种情况:

  1. 数值,范围

enter image description here

  1. 数值,单值

  2. enter image description here

    1. 字母表,单值
    2. enter image description here

      为了能够存储它正确,使我能够做逻辑分类实时(着色),这意味着,我还需要存储操作符(小于[lt],大于[gt],等于[eq]等)

      结束了,说我有2个表:

      LegendSetup

      柱:

      1. LegendKey (int) 
      2. Type (varchar) 
      3. Min (decimal) 
      4. Max (decimal) 
      

      LegendValueSetup

      柱:

      1. ValueKey (int) //AutoIncrement PK 
      2. LegendKey (int) //FK 
      3. RangeNumeric (decimal) //numeric 
      4. RangeAlpha (varchar) //alphabet 
      5. RangeOperator (varchar) //eq, lt, gt 
      6. RangeShow (varchar) //for display purpose 
      7. HexColor (varchar) 
      

      这是它通常如何工作?

    开始=>
开始=>
+0

你是什么意思的“着色”?给定地图上的x,y坐标(或者其值),根据LegendValueSetup为其分配HexColor? – contradictioned

+0

该地图加载geojson。在geojson中,它定义了具有属性的多边形(例如:多边形1有一个总体= 150)。因此,在进行逻辑比较之后,根据LegendValueSetup,多边形将被填充HexColor。 – zeroflaw

+0

'只有一列的LegendSetup'表?这可能是一个错误或者我不能正确理解的例子。 –

当你只需要范围和平等,我建议你不要用明确的运营商,但范围是这样的:

CREATE TABLE LegendValueSetup (
    ValueAlpha varchar, 
    ValueNumeric decimal, 
    LowerNumeric decimal, 
    UpperNumeric decimal, 
    ... -- other columns 
) 

对于你的例子2和3,你只想明确的值存储在ValueAlphaValueNumeric列。 例如1,如果LowerNumeric是一个包含数字,并且UpperNumeric是一个独占界限,反之亦然,您将不得不考虑。然后,你可以存储这样的传说:

LowerNumeric | UpperNumeric | Color 
NULL   | 100  | Black 
100   | 200  | Red 
200   | 400  | Orange 
400   | 600  | Yellow 
600   | NULL  | Green 

如果你现在的值,并希望得到的颜色,你只需要查询

SELECT color FROM LegendValueSetup WHERE LowerNumeric <= $value AND UpperNumeric > $value 

当然,你可以走得更远,分裂表分成三个不同的,每个传说类型一个。

+0

听起来不错。验证后会再次回来。谢谢 – zeroflaw

+2

我会用'LegendValueType'添加一个属性,这样它就清楚了,数据库记录中存储了什么类型的对象。 –

+0

@VojtěchDohnal我看到你的观点。我也会补充一点。你有我的感谢。 – zeroflaw