Custom Map

自定义地图(2)使用GeoJSON并创建地图

获取GeoJSON文件

接下来,我们需要一个GeoJSON文件,其邮政编码与CSV文件中的邮政编码匹配(或至少重叠)。有一个准备好了,你可以在这里下载。

重新格式化GeoJSON

GeoJSON以标准格式提供给我们:

{
    "type": "FeatureCollection",
    "features": [{
        "type": "Feature",
        "properties": {
            "kind": "ZIP Code Tabulation Area (2012)",
            "external_id": "90001",
            "name": "90001",
            "slug": "90001-zip-code-tabulation-area-2012",
            "set": "/1.0/boundary-set/zip-code-tabulation-areas-2012/",
            "metadata": {
                "AWATER10": 0,
                "CLASSFP10": "B5",
                "ALAND10": 9071359,
                "INTPTLAT10": "+33.9740268",
                "FUNCSTAT10": "S",
                "ZCTA5CE10": "90001",
                "MTFCC10": "G6350",
                "GEOID10": "90001",
                "INTPTLON10": "-118.2495088"
            },
            "resource_uri": "/1.0/boundary/90001-zip-code-tabulation-area-2012/"
        },
        "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
                [
                    [
                        [-118.265151, 33.970249],
                        [-118.265166, 33.974735],
                        [-118.262969, 33.974746],
                        [-118.262981, 33.981836],
                        [-118.265174, 33.981828],
                        [-118.265185, 33.989227],
                        [-118.256436, 33.989317],
                        [-118.256436, 33.989498],
                        [-118.241159, 33.989422],
                        [-118.241126, 33.988174],
                        [-118.240505, 33.988158],
                        [-118.240502, 33.98867],
                        [-118.23899, 33.988664],
                        [-118.239021, 33.989403],
                        [-118.237918, 33.989393],
                        [-118.235685, 33.979486],
                        [-118.235352, 33.979534],
                        [-118.235105, 33.978705],
                        [-118.234324, 33.974732],
                        [-118.234685, 33.974731],
                        [-118.234432, 33.972967],
                        [-118.233915, 33.970674],
                        [-118.233561, 33.970731],
                        [-118.232835, 33.967469],
                        [-118.232995, 33.967467],
                        [-118.232405, 33.965314],
                        [-118.231371, 33.963268],
                        [-118.230013, 33.961768],
                        [-118.231885, 33.961565],
                        [-118.231599, 33.960146],
                        [-118.237366, 33.960152],
                        [-118.23737, 33.958521],
                        [-118.237943, 33.958518],
                        [-118.237949, 33.96015],
                        [-118.24499, 33.960148],
                        [-118.244994, 33.959648],
                        [-118.246648, 33.959637],
                        [-118.246653, 33.959177],
                        [-118.247237, 33.959175],
                        [-118.247225, 33.9597],
                        [-118.253962, 33.959701],
                        [-118.253959, 33.960162],
                        [-118.258573, 33.96016],
                        [-118.258575, 33.959577],
                        [-118.260754, 33.959772],
                        [-118.260753, 33.960149],
                        [-118.265118, 33.96013],
                        [-118.265139, 33.966482],
                        [-118.264629, 33.966483],
                        [-118.264607, 33.967438],
                        [-118.265142, 33.967395],
                        [-118.265151, 33.970249]
                    ]
                ]
            ]
        }
    }, ...]
}

复制

标准GeoJSON在大多数应用程序中运行良好,但对于Analytics中的自定义地图存在问题。问题不在于显示地图; 当您尝试使用地图图表显示数据时会发生这种情况。这是因为Analytics要查找与此相同级别的ID“type”:“功能”与数据中的ID匹配的节点。这就是它如何知道将CSV文件中的行与地图上的特定邮政编码区域相匹配。实际上,必须命名该ID属性“ID”!

在此示例中,要使用的明显ID是邮政编码值本身。解决方法是将键移动一级,或者通过移动所有内容来“展平”GeoJSON“属性”上一级。让我们使用我们的编码技巧来看看我们如何实现这一目标!

  1. 对于洛杉矶邮政编码,创建一个脚本或使用花哨的正则表达式公式来移动 “EXTERNAL_ID” 上升一级,所以它是一个孩子 “特征”。
  2. 请务必重命名新的键值节点 “ID”。每个人的价值 “ID” 将是一个邮政编码,以匹配数据集的Zipcode列中的邮政编码。
  3. 如果脚本输出具有新名称的文件,请记下该文件的名称及其位置。将GeoJSON上传到Analytics时需要它们。

例如,这是一个快速而肮脏的Python脚本,可以创建 “ID” 与…相同级别的节点 “类型”。

                #!/usr/bin/python
                
                import json
                 
                f = open('Downloads/test_la_zip_code_areas_2012.json', 'r')
                 
                json_contents = json.loads(f.read())
                
                features = json_contents["features"]
                
                for i in features:
                    i["id"] = i["properties"]["external_id"]
                 
                # If shrinking the size of the file is important, 
                # the properties node could be deleted afterwards:
                # del i["properties"]
                 
                out_file = open("out_la_zip_code_areas_2012.json", "w")
                out_file.write(json.dumps(features))
                 
                # out_file will not be sorted, which shouldn't affect anything,
                # but to have it be sorted, use sort_keys=True in json.dumps
                
                out_file.close()

复制

注意

注意

上面显示的快速和脏脚本剥离了要素对象周围的包装,因此如果您使用它,请恢复以下内容:

{    
    "type": "FeatureCollection",
    "features": {[
        "comment" : "stuff that was output by the script goes here"
    ]}
}

复制

现在GeoJSON看起来像这样:

{
    "type": "FeatureCollection",
    "features": [{
        "type": "Feature",
        "properties": {
            "kind": "ZIP Code Tabulation Area (2012)",
            "external_id": "90001",
            ...
            },
            "resource_uri": "/1.0/boundary/90001-zip-code-tabulation-area-2012/"
        },
        "id": "90001",
        "geometry": {
            "type": "MultiPolygon",
            "coordinates": [
                [
                    
                        [-118.265151, 33.970249],
                        ...
                    ]
                ]
            ]
        }
    }, ...]
}

复制

每个id都具有其所属的要素对象中的实际邮政编码的值。不要试图使用这个GeoJSON片段 – 它只是你得到的输出的一小部分!

在自定义地图中显示数据

创建洛杉矶邮政编码数据集时,将Zipcode列的数据类型设置为维度。此操作可以在您浏览数据时按邮政编码进行分组。按邮政编码对数据进行分组后,您可以在显示LA邮政编码的自定义地图中将其可视化。您必须基于geoJSON文件创建自定义地图。

让我们探索镜头中的邮政编码数据,并在自定义地图上查看。

  • 在Analytics主页中,单击 Datasets选项卡。
  • 找到您创建的la_zip_codes数据集,然后单击它以在镜头中探索它。
洛杉矶邮政编码税数据的初始镜头视图
  • 在镜头中,单击Count of Rows度量,然后 单击Sum,然后 单击TotalWages将度量更改为TotalWages的总和。确保在“条形长度”字段中单击要更改的度量名称“行数”。
  • 单击Bars字段中的加号按钮,然后选择 Zipcode以按邮政编码分组。
洛杉矶邮政编码税数据按邮政编码分组的工资总额
  • 要将图表类型更改为地图,请单击右侧并选择“映射”图表类型()。默认地图不显示LA邮政编码,因此不适合此数据。实际上,预构建的地图类型都不能显示按邮政编码分组的数据。让我们创建一个可以的自定义地图。
  • 要创建自定义地图类型,请单击,展开“地图”部分,然后单击“地图类型”属性旁边的。
自定义地图的“添加”按钮。
  • 如果您没有重新格式化自己的GeoJSON文件,我们会为您重新格式化一个。右键单击此链接,将重新格式化的GeoJSON文件保存到本地计算机。
  • 在New Map页面的左侧窗格中,单击Upload GeoJSON并上载您下载的GeoJSON定义(custom_map_project_geojson.json)。
选择新地图的geoJSON文件,边界,标签和投影类型。
  • 注意如果您上传的GeoJSON文件有问题,则会显示一条错误消息(类似“无效的GeoJSON”)。通常这意味着重新格式化出了问题。
  • 在“地图标签”字段中,输入L.A. Zipcodes。
  • 在“投影类型”字段中,选择“ Equirectangular”作为此地图的默认投影类型。您可以在使用此自定义地图的每个图表窗口小部件的窗口小部件属性中覆盖此设置。Equirectangular适用于简单的几何形状,例如平面图,城市街区或邮政编码区域。墨卡托最适合传统的地理地图。使用AlbersUSA获取美国地图,其中包括美国其他地区附近的夏威夷和阿拉斯加州。
LA地图使用equirectangular投影出现。
  • 注意在中心窗格中,您可以拖动地图的手柄以更改边界,并放大特定区域。边界将显示在右侧窗格中。但是,我们不会改变边界。我们稍后会详细介绍它们。
  • 单击“完成”。恭喜!您已经创建了第一张自定义地图。这不是一个美女!您现在可以在其他图表中使用此自定义地图类型,包括地图,地理地图和气泡地图。
  • 要将此镜头剪辑到设计器中的仪表板,请单击。
  • 在步骤命名对话框中,输入Total Wages by Zip Code“显示标签”字段,然后单击“ 剪辑到设计器”
  • 在仪表板设计器中,将新步骤拖到画布上。根据需要调整窗口小部件的大小,以便能够查看显示的条形图。一张不起眼的地图出现了几个彩色的邮政编码区域,其中发现了洛杉矶(那些飞行大约在可见海岸的中心部分)。
小部件出现。
  • 选择地图以显示窗口小部件属性。
  • 在窗口小部件属性中,展开“ 地图” 部分,注意在“地图类型”菜单中选择了新的LA Zipcodes自定义地图。
洛杉矶邮政编码地图与税务数据
  • 保存仪表板,按邮政编码命名为洛杉矶税务数据。

这张地图的问题在于它包含了整个南加州的邮政编码区域,这意味着洛杉矶地区太小而无法使用。我们可以通过创建一个边界框来解决这个问题。我们接下来就这样做。

你可能也会喜欢...