Forum Discussion

aghonaim's avatar
aghonaim
Most Valuable Professional
10 years ago
Solved

Wards Map

Is there anyone can help me shape map data based on the wards within the city ?

  •  

    Here's the process I followed for Toronto:

     

    Download the WGS84 version of Toronto's wards from the city's Open Data site. This is a shapefile with a zip extension. Go to mapshaper and import the shapefile and export it to TopoJSON. You can then load the resulting JSON file into Power BI by clicking Add Map under the Shape Map's "Shape" options. Any data that you want to connect should join by keys (click View Map Keys). It looks like you might be able to join based on NAME, LCODE_NAME, or SCODE_NAME.

     


    I've posted a sample PBIX with a Shape Map showing Toronto's wards as well as the TopoJSON file that you can re-use in your own PBIX files here.

  • You can do some additional renaming and column removal, but here are the basic steps in a video.

13 Replies

  • deldersveld's avatar
    deldersveld
    Resident Rockstar

     

    Here's the process I followed for Toronto:

     

    Download the WGS84 version of Toronto's wards from the city's Open Data site. This is a shapefile with a zip extension. Go to mapshaper and import the shapefile and export it to TopoJSON. You can then load the resulting JSON file into Power BI by clicking Add Map under the Shape Map's "Shape" options. Any data that you want to connect should join by keys (click View Map Keys). It looks like you might be able to join based on NAME, LCODE_NAME, or SCODE_NAME.

     


    I've posted a sample PBIX with a Shape Map showing Toronto's wards as well as the TopoJSON file that you can re-use in your own PBIX files here.

    • aghonaim's avatar
      aghonaim
      Most Valuable Professional

      Thank you deldersveld so much! Your PBIX works perfectly the way I wanted! :)

      I did all the steps as you descibed exactly but for unknown reason I wasn't able to get the "map keys" when I clicked on "view map keys" after I added the icitw_wgs84.json to PowerBI. There was no table associated that has: LCODE NAME, Object ID, SCODE NAME, Ward Name as you have them in your PBIX file. Any clue ?

      • deldersveld's avatar
        deldersveld
        Resident Rockstar

        For the dataset, I simply used Get Data / Power Query and pointed it to the icitw_wgs84.json file as a source. You could use that as a starting point and join your own data to it, or you could import your own dataset that contains ward data and use Power Query to create a column that matches the ward name + number from the JSON file.

         

        For the first route where JSON is used as the source, here's a sample query:

         

        let
            Source = Json.Document(File.Contents("C:\[...]\icitw_wgs84.json")),
            objects = Source[objects],
            icitw_wgs1 = objects[icitw_wgs84],
            geometries = icitw_wgs1[geometries],
            #"Converted to Table" = Table.FromList(geometries, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
            #"Expanded Column1" = Table.ExpandRecordColumn(#"Converted to Table", "Column1", {"arcs", "type", "properties"}, {"Column1.arcs", "Column1.type", "Column1.properties"}),
            #"Expanded Column1.properties" = Table.ExpandRecordColumn(#"Expanded Column1", "Column1.properties", {"GEO_ID", "CREATE_ID", "NAME", "SCODE_NAME", "LCODE_NAME", "TYPE_DESC", "TYPE_CODE", "OBJECTID", "SHAPE_AREA", "SHAPE_LEN"}, {"Column1.properties.GEO_ID", "Column1.properties.CREATE_ID", "Column1.properties.NAME", "Column1.properties.SCODE_NAME", "Column1.properties.LCODE_NAME", "Column1.properties.TYPE_DESC", "Column1.properties.TYPE_CODE", "Column1.properties.OBJECTID", "Column1.properties.SHAPE_AREA", "Column1.properties.SHAPE_LEN"}),
            #"Removed Columns" = Table.RemoveColumns(#"Expanded Column1.properties",{"Column1.arcs", "Column1.type", "Column1.properties.GEO_ID", "Column1.properties.CREATE_ID"}),
            #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Column1.properties.NAME", "Ward Name"}, {"Column1.properties.SCODE_NAME", "SCODE NAME"}, {"Column1.properties.LCODE_NAME", "LCODE NAME"}, {"Column1.properties.TYPE_DESC", "TYPE CODE"}}),
            #"Removed Columns1" = Table.RemoveColumns(#"Renamed Columns",{"TYPE CODE", "Column1.properties.TYPE_CODE", "Column1.properties.SHAPE_AREA", "Column1.properties.SHAPE_LEN"}),
            #"Renamed Columns1" = Table.RenameColumns(#"Removed Columns1",{{"Column1.properties.OBJECTID", "Object ID"}})
        in
            #"Renamed Columns1"
  • v-sihou-msft's avatar
    v-sihou-msft
    Microsoft Employee

    aghonaim

     

    Even the Bing map tile in map visual can show districts of a city automatically, but it can only display the geo data field and associated anlytical data field from your dataset. So you must have distrit field (geo data) in your dataset, otherwise you can't group/shape your data on district level.

     

    Regards,