From 72e2f9a5127a3e4046bf412ac027517c943b5a3d Mon Sep 17 00:00:00 2001 From: mike Date: Sat, 16 Mar 2024 16:43:05 +1000 Subject: [PATCH] re-introduce GeoJSON support --- DESCRIPTION | 2 +- NAMESPACE | 6 + NEWS.md | 3 + R/geojson.R | 131 ++ man/opts_read_geojson.Rd | 31 + man/opts_write_geojson.Rd | 14 + man/read_geojson_str.Rd | 27 + man/write_geojson_str.Rd | 32 + src/geojson-parse.c | 1631 +++++++++++++++++ src/geojson-serialize.c | 352 ++++ src/init.c | 16 + .../geojson/coord-class-linestring-xyz.json | 1 + .../geojson/coord-class-linestring-xyzm.json | 1 + .../coord-class-multilinestring-xyz.json | 1 + .../coord-class-multilinestring-xyzm.json | 1 + .../geojson/coord-class-multipoint-xy.json | 1 + .../geojson/coord-class-multipoint-xyz.json | 1 + .../geojson/coord-class-multipoint-xyzm.json | 2 + .../geojson/coord-class-multipolygon-xyz.json | 1 + .../coord-class-multipolygon-xyzm.json | 1 + .../geojson/coord-class-point-xy.json | 1 + .../geojson/coord-class-point-xyz.json | 2 + .../geojson/coord-class-point-xyzm.json | 2 + .../geojson/coord-class-polygon-xyz.json | 1 + .../geojson/coord-class-polygon-xyzm.json | 1 + .../testthat/geojson/feature-collection.json | 158 ++ .../geojson/featurecollection-empty.json | 1 + tests/testthat/geojson/geo_melbourne.json | 1 + .../testthat/geojson/geometry-collection.json | 188 ++ .../holding/coord-class-multipoint-xyz1.json | 1 + .../holding/coord-class-multipoint-xyz2.json | 1 + .../holding/coord-class-multipoint-xyzm1.json | 1 + .../holding/property-empty-object.json | 1 + .../geojson/holding/property-mixed-type2.json | 2 + .../geojson/holding/property-mixed-type3.json | 2 + .../geojson/holding/property-mixed-type4.json | 2 + .../geojson/holding/property-mixed-type5.json | 1 + .../geojson/holding/property-mixed-type6.json | 2 + tests/testthat/geojson/linestring00.json | 13 + tests/testthat/geojson/multilinestring00.json | 92 + tests/testthat/geojson/multipoint00.json | 7 + tests/testthat/geojson/multipoint01.json | 13 + tests/testthat/geojson/multipolygon.json | 61 + tests/testthat/geojson/point00.json | 5 + tests/testthat/geojson/point01.json | 11 + tests/testthat/geojson/polygon.json | 16 + .../geojson/property-empty-object.json | 1 + tests/testthat/geojson/property-empty.json | 1 + tests/testthat/geojson/property-logical.json | 1 + .../testthat/geojson/property-mixed-type.json | 2 + .../geojson/property-mixed-type2.json | 2 + .../geojson/property-mixed-type3.json | 2 + .../geojson/property-mixed-type4.json | 2 + .../geojson/property-mixed-type5.json | 1 + .../geojson/property-mixed-type6.json | 2 + .../testthat/geojson/property-null-value.json | 1 + tests/testthat/geojson/property-null.json | 1 + tests/testthat/geojson/ref.rds | Bin 0 -> 46968 bytes tests/testthat/geojson/standard-example.json | 35 + .../testthat/test-geojson-promotion-compat.R | 50 + tests/testthat/test-geojson-read-write.R | 120 ++ .../testthat/test-issue19-ndjson-long-lines.R | 11 + 62 files changed, 3072 insertions(+), 1 deletion(-) create mode 100644 R/geojson.R create mode 100644 man/opts_read_geojson.Rd create mode 100644 man/opts_write_geojson.Rd create mode 100644 man/read_geojson_str.Rd create mode 100644 man/write_geojson_str.Rd create mode 100644 src/geojson-parse.c create mode 100644 src/geojson-serialize.c create mode 100644 tests/testthat/geojson/coord-class-linestring-xyz.json create mode 100644 tests/testthat/geojson/coord-class-linestring-xyzm.json create mode 100644 tests/testthat/geojson/coord-class-multilinestring-xyz.json create mode 100644 tests/testthat/geojson/coord-class-multilinestring-xyzm.json create mode 100644 tests/testthat/geojson/coord-class-multipoint-xy.json create mode 100644 tests/testthat/geojson/coord-class-multipoint-xyz.json create mode 100644 tests/testthat/geojson/coord-class-multipoint-xyzm.json create mode 100644 tests/testthat/geojson/coord-class-multipolygon-xyz.json create mode 100644 tests/testthat/geojson/coord-class-multipolygon-xyzm.json create mode 100644 tests/testthat/geojson/coord-class-point-xy.json create mode 100644 tests/testthat/geojson/coord-class-point-xyz.json create mode 100644 tests/testthat/geojson/coord-class-point-xyzm.json create mode 100644 tests/testthat/geojson/coord-class-polygon-xyz.json create mode 100644 tests/testthat/geojson/coord-class-polygon-xyzm.json create mode 100644 tests/testthat/geojson/feature-collection.json create mode 100644 tests/testthat/geojson/featurecollection-empty.json create mode 100644 tests/testthat/geojson/geo_melbourne.json create mode 100644 tests/testthat/geojson/geometry-collection.json create mode 100644 tests/testthat/geojson/holding/coord-class-multipoint-xyz1.json create mode 100644 tests/testthat/geojson/holding/coord-class-multipoint-xyz2.json create mode 100644 tests/testthat/geojson/holding/coord-class-multipoint-xyzm1.json create mode 100644 tests/testthat/geojson/holding/property-empty-object.json create mode 100644 tests/testthat/geojson/holding/property-mixed-type2.json create mode 100644 tests/testthat/geojson/holding/property-mixed-type3.json create mode 100644 tests/testthat/geojson/holding/property-mixed-type4.json create mode 100644 tests/testthat/geojson/holding/property-mixed-type5.json create mode 100644 tests/testthat/geojson/holding/property-mixed-type6.json create mode 100644 tests/testthat/geojson/linestring00.json create mode 100644 tests/testthat/geojson/multilinestring00.json create mode 100644 tests/testthat/geojson/multipoint00.json create mode 100644 tests/testthat/geojson/multipoint01.json create mode 100644 tests/testthat/geojson/multipolygon.json create mode 100644 tests/testthat/geojson/point00.json create mode 100644 tests/testthat/geojson/point01.json create mode 100644 tests/testthat/geojson/polygon.json create mode 100644 tests/testthat/geojson/property-empty-object.json create mode 100644 tests/testthat/geojson/property-empty.json create mode 100644 tests/testthat/geojson/property-logical.json create mode 100644 tests/testthat/geojson/property-mixed-type.json create mode 100644 tests/testthat/geojson/property-mixed-type2.json create mode 100644 tests/testthat/geojson/property-mixed-type3.json create mode 100644 tests/testthat/geojson/property-mixed-type4.json create mode 100644 tests/testthat/geojson/property-mixed-type5.json create mode 100644 tests/testthat/geojson/property-mixed-type6.json create mode 100644 tests/testthat/geojson/property-null-value.json create mode 100644 tests/testthat/geojson/property-null.json create mode 100644 tests/testthat/geojson/ref.rds create mode 100644 tests/testthat/geojson/standard-example.json create mode 100644 tests/testthat/test-geojson-promotion-compat.R create mode 100644 tests/testthat/test-geojson-read-write.R create mode 100644 tests/testthat/test-issue19-ndjson-long-lines.R diff --git a/DESCRIPTION b/DESCRIPTION index 2422866..e1256ca 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: yyjsonr Type: Package Title: Fast JSON Parser and Generator -Version: 0.1.18.9004 +Version: 0.1.18.9005 Authors@R: c( person("Mike", "Cheng", role = c("aut", "cre", 'cph'), email = "mikefc@coolbutuseless.com"), diff --git a/NAMESPACE b/NAMESPACE index ef2ea92..5ea6ab4 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,7 +1,11 @@ # Generated by roxygen2: do not edit by hand +export(opts_read_geojson) export(opts_read_json) +export(opts_write_geojson) export(opts_write_json) +export(read_geojson_file) +export(read_geojson_str) export(read_json_conn) export(read_json_file) export(read_json_raw) @@ -10,6 +14,8 @@ export(read_ndjson_file) export(read_ndjson_str) export(validate_json_file) export(validate_json_str) +export(write_geojson_file) +export(write_geojson_str) export(write_json_file) export(write_json_str) export(write_ndjson_file) diff --git a/NEWS.md b/NEWS.md index b36a90c..ff004dc 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,4 +1,7 @@ +# yyjsonr 0.1.18.9005 2024-03-16 + +* Re-introduce GeoJSON support # yyjsonr 0.1.18.9004 2024-03-15 diff --git a/R/geojson.R b/R/geojson.R new file mode 100644 index 0000000..cda0647 --- /dev/null +++ b/R/geojson.R @@ -0,0 +1,131 @@ + + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#' Options for reading in GeoJSON +#' +#' @param property_promotion What is the most general container type to use when +#' properties differ across a FEATURECOLLECTION? E.g. if the property +#' exists both as a numeric and a string, should all values be promoted +#' to a 'string', or contained as different types in a 'list'. +#' Default: 'string' will behave like 'geojsonsf' +#' @param type 'sf' or 'sfc' +#' @param property_promotion_lgl_as_int when promoting properties into a string, +#' should logical values become strings e.g. "TRUE" or integers +#' e.g. "1". Default: "integer" in order to match `geojsonsf` packages +#' +#' @return named list +#' @export +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +opts_read_geojson <- function(type = c('sf', 'sfc'), + property_promotion = c('string', 'list'), + property_promotion_lgl_as_int = c('integer', 'string')) { + structure( + list( + type = match.arg(type), + property_promotion = match.arg(property_promotion) + ), + class = "opts_read_geojson" + ) +} + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#' Options for writing from \code{sf} object to \code{GeoJSON} +#' +#' Currently no options available. +#' +#' @return named list of options +#' @export +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +opts_write_geojson <- function() { + structure( + list( + + ), + class = "opts_write_geojson" + ) +} + + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#' Load GeoJSON as \code{sf} object +#' +#' @param filename filename +#' @param str single character string containing GeoJSON +#' @param opts named list of options. Usually created with \code{opts_read_geojson()}. +#' Default: empty \code{list()} to use the default options. +#' @param ... any extra named options override those in \code{opts} +#' +#' @return \code{sf} object +#' @export +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +read_geojson_str <- function(str, opts = list(), ...) { + opts <- modify_list(opts, list(...)) + + .Call( + parse_geojson_str_, + str, + opts, # geojson parse opts + list(yyjson_read_flag = 0L) # general parse opts + ) +} + + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#' @rdname read_geojson_str +#' @export +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +read_geojson_file <- function(filename, opts = list(), ...) { + opts <- modify_list(opts, list(...)) + + .Call( + parse_geojson_file_, + filename, + opts, # geojson parse opts + list(yyjson_read_flag = 0L) # general parse opts + ) +} + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#' Write SF to GeoJSON string +#' +#' @param x \code{sf} object. Supports \code{sf} or \code{sfc} +#' @param filename filename +#' @param opts named list of options. Usually created with \code{opts_write_geojson()}. +#' Default: empty \code{list()} to use the default options. +#' @param ... any extra named options override those in \code{opts} +#' @param digits decimal places to keep for floating point numbers. Default: -1. +#' Positive values specify number of decimal places. Using zero will +#' write the numeric value as an integer. Values less than zero mean that +#' the floating point value should be written as-is (the default). +#' +#' @return character string containing json +#' @export +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +write_geojson_str <- function(x, opts = list(), ..., digits = -1) { + opts <- modify_list(opts, list(...)) + + .Call( + serialize_sf_to_str_, + x, + opts, # geojson serialize opts + list(yyjson_write_flag = 0L, digits = digits) # general serialize opts + ) +} + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#' @rdname write_geojson_str +#' @export +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +write_geojson_file <- function(x, filename, opts = list(), ..., digits = -1) { + opts <- modify_list(opts, list(...)) + + .Call( + serialize_sf_to_file_, + x, + filename, + opts, # geojson serialize opts + list(yyjson_write_flag = 0L, digits = digits) # general serialize opts + ) + + invisible() +} diff --git a/man/opts_read_geojson.Rd b/man/opts_read_geojson.Rd new file mode 100644 index 0000000..6fc476b --- /dev/null +++ b/man/opts_read_geojson.Rd @@ -0,0 +1,31 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/geojson.R +\name{opts_read_geojson} +\alias{opts_read_geojson} +\title{Options for reading in GeoJSON} +\usage{ +opts_read_geojson( + type = c("sf", "sfc"), + property_promotion = c("string", "list"), + property_promotion_lgl_as_int = c("integer", "string") +) +} +\arguments{ +\item{type}{'sf' or 'sfc'} + +\item{property_promotion}{What is the most general container type to use when +properties differ across a FEATURECOLLECTION? E.g. if the property +exists both as a numeric and a string, should all values be promoted +to a 'string', or contained as different types in a 'list'. +Default: 'string' will behave like 'geojsonsf'} + +\item{property_promotion_lgl_as_int}{when promoting properties into a string, +should logical values become strings e.g. "TRUE" or integers +e.g. "1". Default: "integer" in order to match \code{geojsonsf} packages} +} +\value{ +named list +} +\description{ +Options for reading in GeoJSON +} diff --git a/man/opts_write_geojson.Rd b/man/opts_write_geojson.Rd new file mode 100644 index 0000000..4185595 --- /dev/null +++ b/man/opts_write_geojson.Rd @@ -0,0 +1,14 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/geojson.R +\name{opts_write_geojson} +\alias{opts_write_geojson} +\title{Options for writing from \code{sf} object to \code{GeoJSON}} +\usage{ +opts_write_geojson() +} +\value{ +named list of options +} +\description{ +Currently no options available. +} diff --git a/man/read_geojson_str.Rd b/man/read_geojson_str.Rd new file mode 100644 index 0000000..748110b --- /dev/null +++ b/man/read_geojson_str.Rd @@ -0,0 +1,27 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/geojson.R +\name{read_geojson_str} +\alias{read_geojson_str} +\alias{read_geojson_file} +\title{Load GeoJSON as \code{sf} object} +\usage{ +read_geojson_str(str, opts = list(), ...) + +read_geojson_file(filename, opts = list(), ...) +} +\arguments{ +\item{str}{single character string containing GeoJSON} + +\item{opts}{named list of options. Usually created with \code{opts_read_geojson()}. +Default: empty \code{list()} to use the default options.} + +\item{...}{any extra named options override those in \code{opts}} + +\item{filename}{filename} +} +\value{ +\code{sf} object +} +\description{ +Load GeoJSON as \code{sf} object +} diff --git a/man/write_geojson_str.Rd b/man/write_geojson_str.Rd new file mode 100644 index 0000000..4475c07 --- /dev/null +++ b/man/write_geojson_str.Rd @@ -0,0 +1,32 @@ +% Generated by roxygen2: do not edit by hand +% Please edit documentation in R/geojson.R +\name{write_geojson_str} +\alias{write_geojson_str} +\alias{write_geojson_file} +\title{Write SF to GeoJSON string} +\usage{ +write_geojson_str(x, opts = list(), ..., digits = -1) + +write_geojson_file(x, filename, opts = list(), ..., digits = -1) +} +\arguments{ +\item{x}{\code{sf} object. Supports \code{sf} or \code{sfc}} + +\item{opts}{named list of options. Usually created with \code{opts_write_geojson()}. +Default: empty \code{list()} to use the default options.} + +\item{...}{any extra named options override those in \code{opts}} + +\item{digits}{decimal places to keep for floating point numbers. Default: -1. +Positive values specify number of decimal places. Using zero will +write the numeric value as an integer. Values less than zero mean that +the floating point value should be written as-is (the default).} + +\item{filename}{filename} +} +\value{ +character string containing json +} +\description{ +Write SF to GeoJSON string +} diff --git a/src/geojson-parse.c b/src/geojson-parse.c new file mode 100644 index 0000000..37413b1 --- /dev/null +++ b/src/geojson-parse.c @@ -0,0 +1,1631 @@ + + +#include +#include +#include +#include + +#include +#include +#include + +#include + +#include "yyjson.h" +#include "R-yyjson-parse.h" + +#define SF_POINT 1 << 1 +#define SF_MULTIPOINT 1 << 2 +#define SF_LINESTRING 1 << 3 +#define SF_MULTILINESTRING 1 << 4 +#define SF_POLYGON 1 << 5 +#define SF_MULTIPOLYGON 1 << 6 +#define SF_FEATURE_COLLECTION 1 << 7 +#define SF_GEOMETRY_COLLECTION 1 << 8 + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Make a CRS string to match what is done by: geojsonsf::geojson_sf() +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP make_crs(void) { + SEXP crs_ = PROTECT(allocVector(VECSXP, 2)); + SEXP nms_ = PROTECT(allocVector(STRSXP, 2)); + SET_STRING_ELT(nms_, 0, mkChar("input")); + SET_STRING_ELT(nms_, 1, mkChar("wkt")); + setAttrib(crs_, R_NamesSymbol, nms_); + setAttrib(crs_, R_ClassSymbol, mkString("crs")); + SET_VECTOR_ELT(crs_, 0, mkString("4326")); + SET_VECTOR_ELT(crs_, 1, mkString("GEOGCS[\"WGS 84\",\n DATUM[\"WGS_1984\",\n SPHEROID[\"WGS 84\",6378137,298.257223563,\n AUTHORITY[\"EPSG\",\"7030\"]],\n AUTHORITY[\"EPSG\",\"6326\"]],\n PRIMEM[\"Greenwich\",0,\n AUTHORITY[\"EPSG\",\"8901\"]],\n UNIT[\"degree\",0.0174532925199433,\n AUTHORITY[\"EPSG\",\"9122\"]],\n AXIS[\"Latitude\",NORTH],\n AXIS[\"Longitude\",EAST],\n AUTHORITY[\"EPSG\",\"4326\"]]")); + + UNPROTECT(2); + return crs_; +} + +#define SF_TYPE 1 // data.frame +#define SFC_TYPE 2 // list + +#define PROP_TYPE_LIST 0 +#define PROP_TYPE_STRING 1 + +#define PROP_LGL_AS_STR 0 +#define PROP_LGL_AS_INT 1 + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// GeoJSON Parse options +// - this also contains state information i.e. +// - current bounding box accumulations +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +typedef struct { + bool property_promotion; + bool property_promotion_lgl_as_int; // When promoting properties to string, should lgl be '1' or 'TRUE"? + unsigned int type; + unsigned int yyjson_read_flag; + parse_options *parse_opt; + double xmin; + double ymin; + double xmax; + double ymax; + double zmin; + double zmax; + double mmin; + double mmax; +} geo_parse_options; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Initialise geo_parse_opts from an R named list from the user +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +geo_parse_options create_geo_parse_options(SEXP geo_opts_) { + geo_parse_options opt = { + .property_promotion = PROP_TYPE_STRING, // emulate 'geojsonsf' behaviour + .property_promotion_lgl_as_int = PROP_LGL_AS_INT, // emulate 'geojsonsf' behaviour + .type = SF_TYPE, + .yyjson_read_flag = 0, + .xmin = INFINITY, + .ymin = INFINITY, + .xmax = -INFINITY, + .ymax = -INFINITY, + .zmin = INFINITY, + .zmax = -INFINITY, + .mmin = INFINITY, + .mmax = -INFINITY + }; + + if (isNull(geo_opts_) || length(geo_opts_) == 0) { + return opt; + } + + if (!isNewList(geo_opts_)) { + error("'geo_opts_' must be a list"); + } + + SEXP nms_ = getAttrib(geo_opts_, R_NamesSymbol); + if (isNull(nms_)) { + error("'geo_opts_' must be a named list"); + } + + for (int i = 0; i < length(geo_opts_); i++) { + const char *opt_name = CHAR(STRING_ELT(nms_, i)); + SEXP val_ = VECTOR_ELT(geo_opts_, i); + + if (strcmp(opt_name, "property_promotion") == 0) { + const char *val = CHAR(STRING_ELT(val_, 0)); + opt.property_promotion = strcmp(val, "string") == 0 ? PROP_TYPE_STRING : PROP_TYPE_LIST; + } else if (strcmp(opt_name, "property_promotion_lgl_as_int") == 0) { + const char *val = CHAR(STRING_ELT(val_, 0)); + opt.property_promotion_lgl_as_int = strcmp(val, "string") == 0 ? PROP_LGL_AS_STR : PROP_LGL_AS_INT; + } else if (strcmp(opt_name, "type") == 0) { + const char *val = CHAR(STRING_ELT(val_, 0)); + opt.type = strcmp(val, "sf") == 0 ? SF_TYPE : SFC_TYPE; + } else { + warning("geo_opt: Unknown option ignored: '%s'\n", opt_name); + } + } + + + return opt; +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// reset the bounding box in 'opt' +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +void reset_bbox(geo_parse_options *opt) { + opt->xmin = INFINITY; + opt->ymin = INFINITY; + opt->xmax = -INFINITY; + opt->ymax = -INFINITY; + opt->zmin = INFINITY; + opt->zmax = -INFINITY; + opt->mmin = INFINITY; + opt->mmax = -INFINITY; +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Make an R bbox object based upon the current bbox in 'opt' +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP make_bbox(geo_parse_options *opt) { + + int nprotect = 0; + + SEXP bbox_ = PROTECT(allocVector(REALSXP, 4)); nprotect++; + REAL(bbox_)[0] = R_FINITE(opt->xmin) ? opt->xmin : NA_REAL; + REAL(bbox_)[1] = R_FINITE(opt->ymin) ? opt->ymin : NA_REAL; + REAL(bbox_)[2] = R_FINITE(opt->xmax) ? opt->xmax : NA_REAL; + REAL(bbox_)[3] = R_FINITE(opt->ymax) ? opt->ymax : NA_REAL; + SEXP bbox_nms_ = PROTECT(allocVector(STRSXP, 4)); nprotect++; + SET_STRING_ELT(bbox_nms_, 0, mkChar("xmin")); + SET_STRING_ELT(bbox_nms_, 1, mkChar("ymin")); + SET_STRING_ELT(bbox_nms_, 2, mkChar("xmax")); + SET_STRING_ELT(bbox_nms_, 3, mkChar("ymax")); + setAttrib(bbox_, R_NamesSymbol, bbox_nms_); + setAttrib(bbox_, R_ClassSymbol, mkString("bbox")); + + UNPROTECT(nprotect); + return bbox_; +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Make a z-range object +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP make_z_range(geo_parse_options *opt) { + + int nprotect = 0; + + SEXP z_range_ = PROTECT(allocVector(REALSXP, 2)); nprotect++; + REAL(z_range_)[0] = R_FINITE(opt->zmin) ? opt->zmin : NA_REAL; + REAL(z_range_)[1] = R_FINITE(opt->zmax) ? opt->zmax : NA_REAL; + SEXP z_range_nms_ = PROTECT(allocVector(STRSXP, 2)); nprotect++; + SET_STRING_ELT(z_range_nms_, 0, mkChar("zmin")); + SET_STRING_ELT(z_range_nms_, 1, mkChar("zmax")); + setAttrib(z_range_, R_NamesSymbol, z_range_nms_); + setAttrib(z_range_, R_ClassSymbol, mkString("z_range")); + + UNPROTECT(nprotect); + return z_range_; +} + + +bool needs_z_range(geo_parse_options *opt) { + return R_FINITE(opt->zmin) && + R_FINITE(opt->zmax) && + opt->zmin != NA_REAL && + opt->zmax != NA_REAL + ; +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Make a z-range object +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP make_m_range(geo_parse_options *opt) { + + int nprotect = 0; + + SEXP m_range_ = PROTECT(allocVector(REALSXP, 2)); nprotect++; + REAL(m_range_)[0] = R_FINITE(opt->mmin) ? opt->mmin : NA_REAL; + REAL(m_range_)[1] = R_FINITE(opt->mmax) ? opt->mmax : NA_REAL; + SEXP m_range_nms_ = PROTECT(allocVector(STRSXP, 2)); nprotect++; + SET_STRING_ELT(m_range_nms_, 0, mkChar("mmin")); + SET_STRING_ELT(m_range_nms_, 1, mkChar("mmax")); + setAttrib(m_range_, R_NamesSymbol, m_range_nms_); + setAttrib(m_range_, R_ClassSymbol, mkString("m_range")); + + UNPROTECT(nprotect); + return m_range_; +} + + +bool needs_m_range(geo_parse_options *opt) { + return R_FINITE(opt->mmin); +} + + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Forward Declarations +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP geojson_as_sf(yyjson_val *val, geo_parse_options *opt, unsigned int depth); + +#define COORD_XY 2 +#define COORD_XYZ 3 +#define COORD_XYZM 4 + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Determine if the coords in this array of coordinate arrays is +// XY, XYZ or XYZM +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +unsigned int calc_matrix_coord_type(yyjson_val *arr, geo_parse_options *opt) { + unsigned int coord_bitset = 0; + unsigned int coord_type; + yyjson_arr_iter row_iter = yyjson_arr_iter_with(arr); + yyjson_val *row; + while ((row = yyjson_arr_iter_next(&row_iter))) { + size_t ncoords = yyjson_get_len(row); + coord_bitset |= (1 << ncoords); + } + + if (coord_bitset & (1 << 4)) { + coord_type = COORD_XYZM; + } else if (coord_bitset & (1 << 3)) { + coord_type = COORD_XYZ; + } else { + coord_type = COORD_XY; + } + + return coord_type; +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// ### # +// # # # +// # ### ### # ## ## # ### +// # # # # # ## # # ## # +// # # # # # # # # ### +// # # # # # # # # ## # +// ### ### ### # ## # #### +// +// Parse a JSON []-array of coordinates to a matrix. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP parse_coords_as_matrix(yyjson_val *arr, unsigned int coord_type, geo_parse_options *opt) { + + size_t nrows = yyjson_get_len(arr); + size_t ncols = coord_type; + size_t N = nrows * ncols; + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Allocate memory for the R-matrix + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP mat_ = PROTECT(allocVector(REALSXP, (R_xlen_t)N)); + double *ptr = REAL(mat_); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Iterate over nested JSON []-arrays to populate the R-matrix + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + yyjson_arr_iter row_iter = yyjson_arr_iter_with(arr); + yyjson_val *row; + unsigned int row_idx = 0; + while ((row = yyjson_arr_iter_next(&row_iter))) { + + yyjson_arr_iter col_iter = yyjson_arr_iter_with(row); + yyjson_val *val; + unsigned int col_idx = 0; + while((val = yyjson_arr_iter_next(&col_iter))) { + double tmp = yyjson_get_num(val); + ptr[row_idx + col_idx * nrows] = tmp; + + if (col_idx == 0) { + if (tmp > opt->xmax) opt->xmax = tmp; + if (tmp < opt->xmin) opt->xmin = tmp; + } else if (col_idx == 1) { + if (tmp > opt->ymax) opt->ymax = tmp; + if (tmp < opt->ymin) opt->ymin = tmp; + } else if (col_idx == 2) { + if (tmp > opt->zmax) opt->zmax = tmp; + if (tmp < opt->zmin) opt->zmin = tmp; + if (tmp == NA_REAL) { + opt->zmax = NA_REAL; + opt->zmin = NA_REAL; + } + } else if (col_idx == 3) { + if (tmp > opt->mmax) opt->mmax = tmp; + if (tmp < opt->mmin) opt->mmin = tmp; + } + + col_idx++; + } + + for (; col_idx < coord_type; col_idx++) { + ptr[row_idx + col_idx * nrows] = NA_REAL; + } + + row_idx++; + } + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Dims + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP dims_ = PROTECT(allocVector(INTSXP, 2)); + INTEGER(dims_)[0] = (int)nrows; + INTEGER(dims_)[1] = (int)ncols; + setAttrib(mat_, R_DimSymbol, dims_); + + UNPROTECT(2); + return mat_; +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Parse multiple matrices into a list +// Used for polygon and multipolygon +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP parse_coords_as_matrix_list(yyjson_val *arr, + unsigned int *accumulated_coord_type, + geo_parse_options *opt) { + size_t nrings = yyjson_get_len(arr); + + SEXP ll_ = PROTECT(allocVector(VECSXP, (R_xlen_t)nrings)); + + yyjson_arr_iter ring_iter = yyjson_arr_iter_with(arr); + yyjson_val *coords; + unsigned int ring_idx = 0; + unsigned int coord_type = COORD_XY; + while ((coords = yyjson_arr_iter_next(&ring_iter))) { + + coord_type = calc_matrix_coord_type(coords, opt); + SEXP mat_ = PROTECT(parse_coords_as_matrix(coords, coord_type, opt)); + SET_VECTOR_ELT(ll_, ring_idx, mat_); + + UNPROTECT(1); + ring_idx++; + } + + *accumulated_coord_type = coord_type; + + UNPROTECT(1); + return ll_; +} + +static char *COORD_SYSTEM[5] = {"NA", "NA", "XY", "XYZ", "XYZM"}; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// ### # +// # # # +// # ### ### ## # ### #### # ## # # +// # # # # # # # # # # # ## # # # +// # ## ##### # # # # # ##### # # # ## +// # # # # # # # # # # # # ## # +// ### ### ### # # ### ## # # +// # # +// ### +// +// Point +// MultiPoint +// LineString +// MultiLineString +// Polygon +// MultiPolygon +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP parse_point(yyjson_val *obj, geo_parse_options *opt) { + // Rprintf(">> Point\n"); + + yyjson_val *coords = yyjson_obj_get(obj, "coordinates"); + size_t N = yyjson_get_len(coords); + + SEXP vec_ = PROTECT(allocVector(REALSXP, (R_xlen_t)N)); + double *ptr = REAL(vec_); + + yyjson_arr_iter iter = yyjson_arr_iter_with(coords); + yyjson_val *val; + unsigned int idx = 0; + while ((val = yyjson_arr_iter_next(&iter))) { + ptr[idx] = yyjson_get_num(val); + + // XY bounding box + if (idx == 0) { + if (ptr[idx] > opt->xmax) opt->xmax = ptr[idx]; + if (ptr[idx] < opt->xmin) opt->xmin = ptr[idx]; + } else if (idx == 1) { + if (ptr[idx] > opt->ymax) opt->ymax = ptr[idx]; + if (ptr[idx] < opt->ymin) opt->ymin = ptr[idx]; + } else if (idx == 2) { + if (ptr[idx] > opt->zmax) opt->zmax = ptr[idx]; + if (ptr[idx] < opt->zmin) opt->zmin = ptr[idx]; + if (ptr[idx] == NA_REAL) { + opt->zmax = NA_REAL; + opt->zmin = NA_REAL; + } + } else if (idx == 3) { + if (ptr[idx] > opt->mmax) opt->mmax = ptr[idx]; + if (ptr[idx] < opt->mmin) opt->mmin = ptr[idx]; + } + + idx++; + } + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Class + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP nms_ = PROTECT(allocVector(STRSXP, 3)); + SET_STRING_ELT(nms_, 0, mkChar(COORD_SYSTEM[N])); + SET_STRING_ELT(nms_, 1, mkChar("POINT")); + SET_STRING_ELT(nms_, 2, mkChar("sfg")); + setAttrib(vec_, R_ClassSymbol, nms_); + + UNPROTECT(2); + return vec_; +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Multipoint +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP parse_multipoint(yyjson_val *obj, geo_parse_options *opt) { + // Rprintf(">> Point\n"); + + yyjson_val *coords = yyjson_obj_get(obj, "coordinates"); + + unsigned int coord_type = calc_matrix_coord_type(coords, opt); + // Rprintf("Multipoint %i\n", coord_type); + SEXP mat_ = PROTECT(parse_coords_as_matrix(coords, coord_type, opt)); + + SEXP nms_ = PROTECT(allocVector(STRSXP, 3)); + SET_STRING_ELT(nms_, 0, mkChar(COORD_SYSTEM[coord_type])); + SET_STRING_ELT(nms_, 1, mkChar("MULTIPOINT")); + SET_STRING_ELT(nms_, 2, mkChar("sfg")); + setAttrib(mat_, R_ClassSymbol, nms_); + + UNPROTECT(2); + return mat_; +} + + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// LINESTRING +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP parse_linestring(yyjson_val *obj, geo_parse_options *opt) { + + yyjson_val *coords = yyjson_obj_get(obj, "coordinates"); + + unsigned int coord_type = calc_matrix_coord_type(coords, opt); + SEXP mat_ = PROTECT(parse_coords_as_matrix(coords, coord_type, opt)); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Class + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP nms_ = PROTECT(allocVector(STRSXP, 3)); + SET_STRING_ELT(nms_, 0, mkChar(COORD_SYSTEM[coord_type])); + SET_STRING_ELT(nms_, 1, mkChar("LINESTRING")); + SET_STRING_ELT(nms_, 2, mkChar("sfg")); + setAttrib(mat_, R_ClassSymbol, nms_); + + UNPROTECT(2); + return mat_; +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// MULTILINESTRING +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP parse_multilinestring(yyjson_val *obj, geo_parse_options *opt) { + + yyjson_val *linestrings = yyjson_obj_get(obj, "coordinates"); + + size_t nlinestrings = yyjson_get_len(linestrings); + + SEXP ll_ = PROTECT(allocVector(VECSXP, (R_xlen_t)nlinestrings)); + + yyjson_arr_iter ring_iter = yyjson_arr_iter_with(linestrings); + yyjson_val *coords; + unsigned int ring_idx = 0; + unsigned int coord_type; + while ((coords = yyjson_arr_iter_next(&ring_iter))) { + + coord_type = calc_matrix_coord_type(coords, opt); + SEXP mat_ = PROTECT(parse_coords_as_matrix(coords, coord_type, opt)); + SET_VECTOR_ELT(ll_, ring_idx, mat_); + + UNPROTECT(1); + ring_idx++; + } + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Class + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP nms_ = PROTECT(allocVector(STRSXP, 3)); + SET_STRING_ELT(nms_, 0, mkChar(COORD_SYSTEM[coord_type])); + SET_STRING_ELT(nms_, 1, mkChar("MULTILINESTRING")); + SET_STRING_ELT(nms_, 2, mkChar("sfg")); + setAttrib(ll_, R_ClassSymbol, nms_); + + UNPROTECT(2); + return ll_; +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Polygon +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP parse_polygon(yyjson_val *obj, geo_parse_options *opt) { + + yyjson_val *coords = yyjson_obj_get(obj, "coordinates"); + + unsigned int coord_type = COORD_XY; + SEXP ll_ = PROTECT(parse_coords_as_matrix_list(coords, &coord_type, + opt)); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Class + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP nms_ = PROTECT(allocVector(STRSXP, 3)); + SET_STRING_ELT(nms_, 0, mkChar(COORD_SYSTEM[coord_type])); + SET_STRING_ELT(nms_, 1, mkChar("POLYGON")); + SET_STRING_ELT(nms_, 2, mkChar("sfg")); + setAttrib(ll_, R_ClassSymbol, nms_); + + UNPROTECT(2); + return ll_; +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// MultiPolygon +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP parse_multipolygon(yyjson_val *obj, geo_parse_options *opt) { + + yyjson_val *polygons = yyjson_obj_get(obj, "coordinates"); + + size_t npolygons = yyjson_get_len(polygons); + + SEXP ll_ = PROTECT(allocVector(VECSXP, (R_xlen_t)npolygons)); + + yyjson_arr_iter ring_iter = yyjson_arr_iter_with(polygons); + yyjson_val *coords; + unsigned int polygon_idx = 0; + unsigned int coord_type = COORD_XY; + while ((coords = yyjson_arr_iter_next(&ring_iter))) { + + SEXP inner_ = PROTECT(parse_coords_as_matrix_list(coords, &coord_type, + opt)); + SET_VECTOR_ELT(ll_, polygon_idx, inner_); + + UNPROTECT(1); + polygon_idx++; + } + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Class + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP nms_ = PROTECT(allocVector(STRSXP, 3)); + SET_STRING_ELT(nms_, 0, mkChar(COORD_SYSTEM[coord_type])); + SET_STRING_ELT(nms_, 1, mkChar("MULTIPOLYGON")); + SET_STRING_ELT(nms_, 2, mkChar("sfg")); + setAttrib(ll_, R_ClassSymbol, nms_); + + UNPROTECT(2); + return ll_; +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// #### # # +// # # # +// # # # ## ### # ## ### # ## #### ## ### ### +// #### ## # # # ## # # # ## # # # # # # +// # # # # ## # ##### # # # ##### ### +// # # # # # ## # # # # # # # +// # # ### # ### # ## ### ### #### +// # +// # +// +// Parse a scalar feature that is not part of a collection +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP prop_to_rchar(yyjson_val *prop_val, geo_parse_options *opt) { + if (prop_val == NULL) { + return NA_STRING; + } + + char buf[128] = ""; + static char *bool_str[2] = {"FALSE", "TRUE"}; + static char *bool_int[2] = {"0", "1"}; + + switch (yyjson_get_type(prop_val)) { + case YYJSON_TYPE_NULL: + return NA_STRING; + break; + case YYJSON_TYPE_STR: + return mkChar(yyjson_get_str(prop_val)); + break; + case YYJSON_TYPE_BOOL: + { + if (opt->property_promotion_lgl_as_int == PROP_LGL_AS_INT) { + int tmp = yyjson_get_bool(prop_val); + return mkChar(bool_int[tmp]); + } else { + int tmp = yyjson_get_bool(prop_val); + return mkChar(bool_str[tmp]); + } + } + break; + case YYJSON_TYPE_ARR: + case YYJSON_TYPE_OBJ: + { + yyjson_mut_doc *doc = yyjson_mut_doc_new(NULL); + yyjson_mut_val *val = yyjson_val_mut_copy(doc, prop_val); + yyjson_mut_doc_set_root(doc, val); + char *json = yyjson_mut_write(doc, 0, NULL); + if (json == NULL) { + error("Error converting json to string in prop_to_strsxp"); + } + SEXP res_ = PROTECT(mkChar(json)); + free(json); + yyjson_mut_doc_free(doc); + UNPROTECT(1); + return res_; + } + break; + case YYJSON_TYPE_NUM: + switch(yyjson_get_subtype(prop_val)) { + case YYJSON_SUBTYPE_UINT: +#if defined(__APPLE__) || defined(_WIN32) + snprintf(buf, 128, "%llu", yyjson_get_uint(prop_val)); +#else + snprintf(buf, 128, "%lu", yyjson_get_uint(prop_val)); +#endif + return mkChar(buf); + break; + case YYJSON_SUBTYPE_SINT: +#if defined(__APPLE__) || defined(_WIN32) + snprintf(buf, 128, "%lld", yyjson_get_sint(prop_val)); +#else + snprintf(buf, 128, "%ld", yyjson_get_sint(prop_val)); +#endif + return mkChar(buf); + break; + case YYJSON_SUBTYPE_REAL: + snprintf(buf, 128, "%f", yyjson_get_real(prop_val)); + return mkChar(buf); + break; + default: + warning("prop_to_strsxp unhandled numeric type %s\n", yyjson_get_type_desc(prop_val)); + } + break; + default: + warning("prop_to_strsxp unhandled type: %s\n", yyjson_get_type_desc(prop_val)); + return NA_STRING; + } + + + Rprintf("Ugh\n"); + return NA_STRING; +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Parse a property as a character string from a feature collection +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP prop_to_strsxp(yyjson_val *features, char *prop_name, geo_parse_options *opt) { + + size_t N = yyjson_get_len(features); + SEXP vec_ = PROTECT(allocVector(STRSXP, (R_xlen_t)N)); + + yyjson_arr_iter feature_iter = yyjson_arr_iter_with(features); + yyjson_val *feature_obj; + unsigned int idx = 0; + while ((feature_obj = yyjson_arr_iter_next(&feature_iter))) { + yyjson_val *props_obj = yyjson_obj_get(feature_obj, "properties"); + yyjson_val *prop_val = yyjson_obj_get(props_obj, prop_name); + + SET_STRING_ELT(vec_, idx, prop_to_rchar(prop_val, opt)); + idx++; + } + + UNPROTECT(1); + return vec_; +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Parse a property as a character string from a feature collection +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP prop_to_vecsxp(yyjson_val *features, char *prop_name, geo_parse_options *opt) { + size_t N = yyjson_get_len(features); + SEXP vec_ = PROTECT(allocVector(VECSXP, (R_xlen_t)N)); + + yyjson_arr_iter feature_iter = yyjson_arr_iter_with(features); + yyjson_val *feature_obj; + unsigned int idx = 0; + while ((feature_obj = yyjson_arr_iter_next(&feature_iter))) { + yyjson_val *props_obj = yyjson_obj_get(feature_obj, "properties"); + yyjson_val *prop_val = yyjson_obj_get(props_obj, prop_name); + if (prop_val == NULL) { + SET_VECTOR_ELT(vec_, idx, ScalarLogical(NA_LOGICAL)); + } else { + SET_VECTOR_ELT(vec_, idx, json_as_robj(prop_val, opt->parse_opt)); + } + idx++; + } + + UNPROTECT(1); + return vec_; +} + + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Parse a property as a INTSXP from a feature collection +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP prop_to_lglsxp(yyjson_val *features, char *prop_name, geo_parse_options *opt) { + size_t N = yyjson_get_len(features); + SEXP vec_ = PROTECT(allocVector(LGLSXP, (R_xlen_t)N)); + int *ptr = INTEGER(vec_); + + yyjson_arr_iter feature_iter = yyjson_arr_iter_with(features); + yyjson_val *feature_obj; + while ((feature_obj = yyjson_arr_iter_next(&feature_iter))) { + yyjson_val *props_obj = yyjson_obj_get(feature_obj, "properties"); + yyjson_val *prop_val = yyjson_obj_get(props_obj, prop_name); + if (prop_val == NULL) { + *ptr++ = NA_INTEGER; + } else { + *ptr++ = yyjson_get_bool(prop_val); + } + } + + UNPROTECT(1); + return vec_; +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Parse a property as a INTSXP from a feature collection +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP prop_to_intsxp(yyjson_val *features, char *prop_name, geo_parse_options *opt) { + size_t N = yyjson_get_len(features); + SEXP vec_ = PROTECT(allocVector(INTSXP, (R_xlen_t)N)); + int *ptr = INTEGER(vec_); + + yyjson_arr_iter feature_iter = yyjson_arr_iter_with(features); + yyjson_val *feature_obj; + while ((feature_obj = yyjson_arr_iter_next(&feature_iter))) { + yyjson_val *props_obj = yyjson_obj_get(feature_obj, "properties"); + yyjson_val *prop_val = yyjson_obj_get(props_obj, prop_name); + if (prop_val == NULL) { + *ptr++ = NA_INTEGER; + } else { + *ptr++ = yyjson_get_int(prop_val); + } + } + + UNPROTECT(1); + return vec_; +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Parse a property as a REALSXP from a feature collection +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP prop_to_realsxp(yyjson_val *features, char *prop_name, geo_parse_options *opt) { + size_t N = yyjson_get_len(features); + SEXP vec_ = PROTECT(allocVector(REALSXP, (R_xlen_t)N)); + double *ptr = REAL(vec_); + + yyjson_arr_iter feature_iter = yyjson_arr_iter_with(features); + yyjson_val *feature_obj; + while ((feature_obj = yyjson_arr_iter_next(&feature_iter))) { + yyjson_val *props_obj = yyjson_obj_get(feature_obj, "properties"); + yyjson_val *prop_val = yyjson_obj_get(props_obj, prop_name); + if (prop_val == NULL) { + *ptr++ = NA_REAL; + } else { + *ptr++ = yyjson_get_num(prop_val); + } + } + + UNPROTECT(1); + return vec_; +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Forward declaration +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP parse_geometry_type(yyjson_val *val, geo_parse_options *opt); + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Parse a feature +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP parse_feature(yyjson_val *obj, geo_parse_options *opt) { + // Rprintf(">>> Feature\n"); + + reset_bbox(opt); + int nprotect = 0; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Parse GEOMETRY + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + yyjson_val *geom = yyjson_obj_get(obj, "geometry"); + SEXP geom_col_ = PROTECT(allocVector(VECSXP, 1)); nprotect++; + SEXP geom_ = PROTECT(parse_geometry_type(geom, opt)); nprotect++; + SET_VECTOR_ELT(geom_col_, 0, geom_); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Set attributes on geometry + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + setAttrib(geom_col_, mkString("n_empty") , ScalarInteger(0)); + setAttrib(geom_col_, mkString("crs") , make_crs()); + + SEXP geom_class_ = PROTECT(allocVector(STRSXP, 2)); nprotect++; + + + yyjson_val *geom_type = yyjson_obj_get(geom, "type"); + // Rprintf("parse_geometry_type(): %s\n", yyjson_get_str(geom_type)); + + if (yyjson_equals_str(geom_type, "Point")) { + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_POINT")); + } else if (yyjson_equals_str(geom_type, "MultiPoint")) { + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_MULTIPOINT")); + } else if (yyjson_equals_str(geom_type, "LineString")) { + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_LINESTRING")); + } else if (yyjson_equals_str(geom_type, "MultiLineString")) { + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_MULTILINESTRING")); + } else if (yyjson_equals_str(geom_type, "Polygon")) { + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_POLYGON")); + } else if (yyjson_equals_str(geom_type, "MultiPolygon")) { + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_MULTIPOLYGON")); + } else { + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_UNKNOWN")); + } + + SET_STRING_ELT(geom_class_, 1, mkChar("sfc")); + setAttrib(geom_col_, R_ClassSymbol, geom_class_); + + setAttrib(geom_col_, mkString("precision"), ScalarReal(0)); + setAttrib(geom_col_, mkString("bbox"), make_bbox(opt)); + + if (opt->type == SFC_TYPE) { + // only care about geom, not properties. + UNPROTECT(nprotect); + return(geom_col_); + } + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Properties + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + yyjson_val *props = yyjson_obj_get(obj, "properties"); + size_t ncols = yyjson_get_len(props) + 1; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Allocate space for data.frame columns and column names + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP res_ = PROTECT(allocVector(VECSXP, (R_xlen_t)ncols)); nprotect++; + SEXP nms_ = PROTECT(allocVector(STRSXP, (R_xlen_t)ncols)); nprotect++; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Iterate over the keys/values "properties" + // keys become column names + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + yyjson_obj_iter iter = yyjson_obj_iter_with(props); + yyjson_val *val, *key; + unsigned int idx = 0; + while ((key = yyjson_obj_iter_next(&iter))) { + val = yyjson_obj_iter_get_val(key); + SEXP robj_ = PROTECT(json_as_robj(val, opt->parse_opt)); + + if (isNull(robj_)) { + // compatibilty with geojson: promotes NULL values to NA_character_ + UNPROTECT(1); + robj_ = PROTECT(allocVector(STRSXP, 1)); + SET_STRING_ELT(robj_, 0, NA_STRING); + } else if (isNewList(robj_) && length(robj_) == 0) { + // compatibilty with geojson. promote empty list to "{}" + UNPROTECT(1); + robj_ = PROTECT(allocVector(STRSXP, 1)); + SET_STRING_ELT(robj_, 0, mkChar("{}")); + } else if (isNewList(robj_) && opt->property_promotion == PROP_TYPE_STRING) { + // this is either a list or a multi-element {}-objet or []-array + // so turn it back into a string + UNPROTECT(1); + robj_ = PROTECT(allocVector(STRSXP, 1)); + SET_STRING_ELT(robj_, 0, prop_to_rchar(val, opt)); + } else if (length(robj_) > 1 && opt->property_promotion == PROP_TYPE_STRING) { + // this is either a list or a multi-element {}-objet or []-array + // so turn it back into a string + UNPROTECT(1); + robj_ = PROTECT(allocVector(STRSXP, 1)); + SET_STRING_ELT(robj_, 0, prop_to_rchar(val, opt)); + } + + SET_VECTOR_ELT(res_, idx, robj_); + UNPROTECT(1); + SET_STRING_ELT(nms_, idx, mkChar(yyjson_get_str(key))); + idx++; + } + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // The geometry column should be a list (i.e. VECSXP) + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SET_VECTOR_ELT(res_, (R_xlen_t)ncols - 1, geom_col_); + SET_STRING_ELT(nms_, (R_xlen_t)ncols - 1, mkChar("geometry")); + + + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Set column names + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + setAttrib(res_, R_NamesSymbol, nms_); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Row.names + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP rownames = PROTECT(allocVector(INTSXP, 2)); nprotect++; + SET_INTEGER_ELT(rownames, 0, NA_INTEGER); + SET_INTEGER_ELT(rownames, 1, -1); // only a single rows + setAttrib(res_, R_RowNamesSymbol, rownames); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Nominate the geometry column name. + // Store this as the 'sf_geometry' attribute + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP sf_name_ = PROTECT(mkString("geometry")); nprotect++; + setAttrib(res_, mkString("sf_column"), sf_name_); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Set 'data.frame' class + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP df_names_ = PROTECT(allocVector(STRSXP, 2)); nprotect++; + SET_STRING_ELT(df_names_, 0, mkChar("sf")); + SET_STRING_ELT(df_names_, 1, mkChar("data.frame")); + setAttrib(res_, R_ClassSymbol, df_names_); + + + + UNPROTECT(nprotect); + return res_; +} + + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Accumulating types and names for properies should really be dynamic, +// but for first draft, just set a static upper limit on number of properiies. +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#define MAX_PROPS 256 + +//=========================================================================== +// ##### # ### ## ## +// # # # # # # +// # ### ### #### # # # ## ### # ### # # +// #### # # # # # # ## # # # # # # # # +// # ##### #### # # # # ##### # # # # # +// # # # # # # # ## # # # # # # # # +// # ### #### ## ## # # ### ### ### ### ### +//=========================================================================== + +SEXP parse_feature_collection_geometry(yyjson_val *features, geo_parse_options *opt) { + + int nprotect = 0; + reset_bbox(opt); + + if (!yyjson_is_arr(features)) { + error("Expecting FeatureCollection::features to be an array"); + } + size_t nrows = yyjson_get_len(features); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // List-column will be used for geometry + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP geom_col_ = PROTECT(allocVector(VECSXP, (R_xlen_t)nrows)); nprotect++; + SEXP geom_classes_ = PROTECT(allocVector(STRSXP, (R_xlen_t)nrows)); nprotect++; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Iterate over array to gather geometry + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + yyjson_arr_iter feature_iter = yyjson_arr_iter_with(features); + yyjson_val *feature; + unsigned int feature_idx = 0; + unsigned int sf_type_bitset = 0; + while ((feature = yyjson_arr_iter_next(&feature_iter))) { + + yyjson_val *geom = yyjson_obj_get(feature, "geometry"); + SET_VECTOR_ELT(geom_col_, feature_idx, geojson_as_sf(geom, opt, 1)); + + yyjson_val *geom_type = yyjson_obj_get(geom, "type"); + + if (yyjson_equals_str(geom_type, "Point")) { + sf_type_bitset |= SF_POINT; + SET_STRING_ELT(geom_classes_, feature_idx, mkChar("POINT")); + } else if (yyjson_equals_str(geom_type, "MultiPoint")) { + sf_type_bitset |= SF_MULTIPOINT; + SET_STRING_ELT(geom_classes_, feature_idx, mkChar("MULTIPOINT")); + } else if (yyjson_equals_str(geom_type, "LineString")) { + sf_type_bitset |= SF_LINESTRING; + SET_STRING_ELT(geom_classes_, feature_idx, mkChar("LINESTRING")); + } else if (yyjson_equals_str(geom_type, "MultiLineString")) { + sf_type_bitset |= SF_MULTILINESTRING; + SET_STRING_ELT(geom_classes_, feature_idx, mkChar("MULTILINESTRING")); + } else if (yyjson_equals_str(geom_type, "Polygon")) { + sf_type_bitset |= SF_POLYGON; + SET_STRING_ELT(geom_classes_, feature_idx, mkChar("POLYGON")); + } else if (yyjson_equals_str(geom_type, "MultiPolygon")) { + sf_type_bitset |= SF_MULTIPOLYGON; + SET_STRING_ELT(geom_classes_, feature_idx, mkChar("MULTIPOLYGON")); + } else if (yyjson_equals_str(geom_type, "GeometryCollection")) { + sf_type_bitset |= SF_GEOMETRY_COLLECTION; + SET_STRING_ELT(geom_classes_, feature_idx, mkChar("GEOMETRYCOLLECTION")); + } else { + SET_STRING_ELT(geom_classes_, feature_idx, mkChar("UNKNOWN")); + } + + feature_idx++; + } + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Set attributes on geometry + // + // According to: https://r-spatial.github.io/sf/reference/sfc.html + // if all classes are the same, then: + // 1. Omit the 'classes' attribute + // 2. set the class to sfc_TYPE + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP geom_class_ = PROTECT(allocVector(STRSXP, 2)); nprotect++; + + switch(sf_type_bitset) { + case SF_POINT: + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_POINT")); + break; + case SF_MULTIPOINT: + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_MULTIPOINT")); + break; + case SF_LINESTRING: + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_LINESTRING")); + break; + case SF_MULTILINESTRING: + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_MULTILINESTRING")); + break; + case SF_POLYGON: + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_POLYGON")); + break; + case SF_MULTIPOLYGON: + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_MULTIPOLYGON")); + break; + default: + if (nrows > 0) { + setAttrib(geom_col_, mkString("classes") , geom_classes_); + } + SET_STRING_ELT(geom_class_, 0, mkChar("sfc_GEOMETRY")); + } + + + setAttrib(geom_col_, mkString("n_empty") , ScalarInteger(0)); + setAttrib(geom_col_, mkString("crs") , make_crs()); + + SET_STRING_ELT(geom_class_, 1, mkChar("sfc")); + setAttrib(geom_col_, R_ClassSymbol, geom_class_); + + setAttrib(geom_col_, mkString("precision"), ScalarReal(0)); + setAttrib(geom_col_, mkString("bbox"), make_bbox(opt)); + + if (needs_z_range(opt)) { + setAttrib(geom_col_, mkString("z_range"), make_z_range(opt)); + } + + if (needs_m_range(opt)) { + setAttrib(geom_col_, mkString("m_range"), make_m_range(opt)); + } + + UNPROTECT(nprotect); + return geom_col_; +} + + + + + +//=========================================================================== +// +//=========================================================================== +SEXP parse_feature_collection(yyjson_val *obj, geo_parse_options *opt) { + + int nprotect = 0; + + yyjson_val *features = NULL; + + if (yyjson_is_obj(obj)) { + // This is an official geojson FeatureCollection object + features = yyjson_obj_get(obj, "features"); + } else if (yyjson_is_arr(obj)) { + // This is just a JSON []-array with multiple features in it. + features = obj; + } else { + error("parse_feature_collection() obj not array or object, but %s", yyjson_get_type_desc(obj)); + } + + if (!yyjson_is_arr(features)) { + error("Expecting FeatureCollection::features to be an array. Got %s", yyjson_get_type_desc(features)); + } + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Parse the geometry + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP geom_col_ = PROTECT(parse_feature_collection_geometry(features, opt)); nprotect++; + if (opt->type == SFC_TYPE) { + // we onlyl care about geometry! Don't worry about parsing properties + UNPROTECT(nprotect); + return geom_col_; + } + + size_t nrows = yyjson_get_len(features); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Iterate over all features to determine full set of properties + // and their types + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + char *prop_names[MAX_PROPS]; + unsigned int type_bitset[MAX_PROPS] = {0}; + int nprops = 0; + + yyjson_arr_iter feature_iter = yyjson_arr_iter_with(features); + yyjson_val *feature; + while ((feature = yyjson_arr_iter_next(&feature_iter))) { + + yyjson_val *props = yyjson_obj_get(feature, "properties"); + + yyjson_obj_iter prop_iter = yyjson_obj_iter_with(props); + yyjson_val *prop_name, *prop_val; + while ((prop_name = yyjson_obj_iter_next(&prop_iter))) { + prop_val = yyjson_obj_iter_get_val(prop_name); + + int name_idx = -1; + for (int i = 0; i < nprops; i++) { + if (yyjson_equals_str(prop_name, prop_names[i])) { + name_idx = i; + break; + } + } + if (name_idx < 0) { + // Name has not been seen yet. so add it. + name_idx = nprops; + prop_names[nprops] = (char *)yyjson_get_str(prop_name); + // Rprintf("Key: %s\n", yyjson_get_str(prop_name)); + nprops++; + if (nprops == MAX_PROPS) { + error("Maximum properies exceeded parsing feature collection: %i", MAX_PROPS); + } + } + + type_bitset[name_idx] = update_type_bitset(type_bitset[name_idx], prop_val, opt->parse_opt); + } + } + + // for (unsigned int i=0; iparse_opt); + // dump_type_bitset(type_bitset[i]); + // Rprintf("[prop %i] %s - sexp_type: %i -> %s\n", + // i, prop_names[i], + // sexp_type, type2char(sexp_type)); + // } + + + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Create a data.frame with: + // prop1, prop2, prop3.... propN, geometry + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP df_ = PROTECT(allocVector(VECSXP, nprops + 1)); nprotect++; + SET_VECTOR_ELT(df_, nprops, geom_col_); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // For each property + // - determine the best SEXP to represent the 'type_bitset' + // - Call a parse function which will + // - loop through the entire FeatureCollection[]-array, + // plucking the property value from each {}-object + // - return an atomic vector or a list + // - place this vector as a column in the data.frame + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + for (unsigned int idx = 0; idx < nprops; idx++) { + + unsigned int sexp_type = get_best_sexp_to_represent_type_bitset(type_bitset[idx], opt->parse_opt); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Check if user requested the "maximum" container type for properties + // to be a string, rather than a list() + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + if (sexp_type == VECSXP && opt->property_promotion == PROP_TYPE_STRING) { + sexp_type = STRSXP; + } + + switch (sexp_type) { + case LGLSXP: + SET_VECTOR_ELT(df_, idx, prop_to_lglsxp(features, prop_names[idx], opt)); + break; + case INTSXP: + SET_VECTOR_ELT(df_, idx, prop_to_intsxp(features, prop_names[idx], opt)); + break; + case REALSXP: + SET_VECTOR_ELT(df_, idx, prop_to_realsxp(features, prop_names[idx], opt)); + break; + case STRSXP: + SET_VECTOR_ELT(df_, idx, prop_to_strsxp(features, prop_names[idx], opt)); + break; + case VECSXP: + SET_VECTOR_ELT(df_, idx, prop_to_vecsxp(features, prop_names[idx], opt)); + break; + default: + warning("Unhandled 'prop' coltype: %i -> %s\n", sexp_type, type2char(sexp_type)); + SET_VECTOR_ELT(df_, idx, allocVector(LGLSXP, (R_xlen_t)nrows)); + } + } + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Nominate the geometry column name. + // Store this as the 'sf_geometry' attribute + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP sf_name_ = PROTECT(mkString("geometry")); nprotect++; + setAttrib(df_, mkString("sf_column"), sf_name_); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Set colnames on data.frame + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP nms_ = PROTECT(allocVector(STRSXP, nprops + 1)); nprotect++; + for (unsigned int i = 0; i < nprops; i++) { + SET_STRING_ELT(nms_, i, mkChar(prop_names[i])); + } + SET_STRING_ELT(nms_, nprops, mkChar("geometry")); + Rf_setAttrib(df_, R_NamesSymbol, nms_); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Set rownames on data.frame + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP rownames = PROTECT(allocVector(INTSXP, 2)); nprotect++; + SET_INTEGER_ELT(rownames, 0, NA_INTEGER); + SET_INTEGER_ELT(rownames, 1, -(int)nrows); + setAttrib(df_, R_RowNamesSymbol, rownames); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Set 'data.frame' class + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP df_class_ = PROTECT(allocVector(STRSXP, 2)); nprotect++; + SET_STRING_ELT(df_class_, 0, mkChar("sf")); + SET_STRING_ELT(df_class_, 1, mkChar("data.frame")); + setAttrib(df_, R_ClassSymbol, df_class_); + + UNPROTECT(nprotect); + return df_; +} + + +//=========================================================================== +// +//=========================================================================== +SEXP promote_bare_geometry_to_list(SEXP geom_, yyjson_val *val, geo_parse_options *opt) { + int nprotect = 0; + + SEXP geom_col_ = PROTECT(allocVector(VECSXP, 1)); nprotect++; + SET_VECTOR_ELT(geom_col_, 0, geom_); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Figure out type of geometry + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP geom_col_class_ = PROTECT(allocVector(STRSXP, 2)); nprotect++; + + if (!yyjson_is_obj(val)) { + error("promote_bare_geometry_to_list(): Expecting object. Got %s", yyjson_get_type_desc(val)); + } + + yyjson_val *type = yyjson_obj_get(val, "type"); + if (type == NULL) { + error("parse_geometry(): type == NULL"); + } + + if (yyjson_equals_str(type, "Point")) { + SET_STRING_ELT(geom_col_class_, 0, mkChar("sfc_POINT")); + } else if (yyjson_equals_str(type, "MultiPoint")) { + SET_STRING_ELT(geom_col_class_, 0, mkChar("sfc_MULTIPOINT")); + } else if (yyjson_equals_str(type, "LineString")) { + SET_STRING_ELT(geom_col_class_, 0, mkChar("sfc_LINESTRING")); + } else if (yyjson_equals_str(type, "MultiLineString")) { + SET_STRING_ELT(geom_col_class_, 0, mkChar("sfc_MULTILINESTRING")); + } else if (yyjson_equals_str(type, "Polygon")) { + SET_STRING_ELT(geom_col_class_, 0, mkChar("sfc_POLYGON")); + } else if (yyjson_equals_str(type, "MultiPolygon")) { + SET_STRING_ELT(geom_col_class_, 0, mkChar("sfc_MULTIPOLYGON")); + } else if (yyjson_equals_str(type, "GeometryCollection")) { + SET_STRING_ELT(geom_col_class_, 0, mkChar("sfc_GEOMETRY")); + setAttrib(geom_col_, mkString("classes") , mkString("GEOMETRYCOLLECTION")); + } else { + error("promote_bare_geometry_to_list(): Unknown geojson type: %s", yyjson_get_str(type)); + } + + SET_STRING_ELT(geom_col_class_, 1, mkChar("sfc")); + setAttrib(geom_col_, R_ClassSymbol, geom_col_class_); + + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Set attributes on geometry + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + setAttrib(geom_col_, mkString("n_empty") , ScalarInteger(0)); + setAttrib(geom_col_, mkString("crs") , make_crs()); + + setAttrib(geom_col_, mkString("precision"), ScalarReal(0)); + setAttrib(geom_col_, mkString("bbox"), make_bbox(opt)); + + if (needs_z_range(opt)) { + setAttrib(geom_col_, mkString("z_range"), make_z_range(opt)); + } + + if (needs_m_range(opt)) { + setAttrib(geom_col_, mkString("m_range"), make_m_range(opt)); + }\ + + UNPROTECT(nprotect); + return geom_col_; +} + + +//=========================================================================== +// +//=========================================================================== +SEXP promote_bare_geometry_to_df(SEXP geom_, yyjson_val *val, geo_parse_options *opt) { + + int nprotect = 0; + + // Setup data.frame with single column called 'geometry' + // 'geometry' is a list column + SEXP df_ = PROTECT(allocVector(VECSXP, 1)); nprotect++; + SET_VECTOR_ELT(df_, 0, promote_bare_geometry_to_list(geom_, val, opt)); + setAttrib(df_, R_NamesSymbol, mkString("geometry")); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Set NULL rownames on data.frame + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP rownames = PROTECT(allocVector(INTSXP, 2)); nprotect++; + SET_INTEGER_ELT(rownames, 0, NA_INTEGER); + SET_INTEGER_ELT(rownames, 1, -1); + setAttrib(df_, R_RowNamesSymbol, rownames); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Set class: 'sf' + 'data.frame' + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP df_class_ = PROTECT(allocVector(STRSXP, 2)); nprotect++; + SET_STRING_ELT(df_class_, 0, mkChar("sf")); + SET_STRING_ELT(df_class_, 1, mkChar("data.frame")); + setAttrib(df_, R_ClassSymbol, df_class_); + + // Attributes for {sf} + setAttrib(df_, mkString("sf_column"), mkString("geometry")); + + UNPROTECT(nprotect); + return df_; +} + + + +//=========================================================================== +// ### ### ## ## +// # # # # # # +// # ### ### ## # # ### # # +// # # # # # # # # # # # # # +// # ## ##### # # # # # # # # # # +// # # # # # # # # # # # # # # +// ### ### ### # # ### ### ### ### +// +// Geometry Collection +//=========================================================================== +SEXP parse_geometry_collection(yyjson_val *obj, geo_parse_options *opt) { + + int nprotect = 0; + reset_bbox(opt); + + yyjson_val *geoms = yyjson_obj_get(obj, "geometries"); + if (!yyjson_is_arr(geoms)) { + error("Expecting GeomCollection::geometries to be an array. not %s", + yyjson_get_type_desc(geoms)); + } + size_t ngeoms = yyjson_get_len(geoms); + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // List-column will be used for geometry + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP geoms_ = PROTECT(allocVector(VECSXP, (R_xlen_t)ngeoms)); nprotect++; + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Iterate over array to gather geometry + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + yyjson_arr_iter geom_iter = yyjson_arr_iter_with(geoms); + yyjson_val *geom; + unsigned int geom_idx = 0; + while ((geom = yyjson_arr_iter_next(&geom_iter))) { + + SEXP geom_ = PROTECT(geojson_as_sf(geom, opt, 1)); + SET_VECTOR_ELT(geoms_, geom_idx, geom_); + + UNPROTECT(1); + geom_idx++; + } + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Set attributes on geometry + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP geom_class_ = PROTECT(allocVector(STRSXP, 3)); nprotect++; + SET_STRING_ELT(geom_class_, 0, mkChar("XY")); + SET_STRING_ELT(geom_class_, 1, mkChar("GEOMETRYCOLLECTION")); + SET_STRING_ELT(geom_class_, 2, mkChar("sfg")); + setAttrib(geoms_, R_ClassSymbol, geom_class_); + + UNPROTECT(nprotect); + return geoms_; +} + +//=========================================================================== +// Parse geometry +//=========================================================================== +SEXP parse_geometry_type(yyjson_val *val, geo_parse_options *opt) { + + if (!yyjson_is_obj(val)) { + error("parse_geometry(): Expecting object. Got %s", yyjson_get_type_desc(val)); + } + + yyjson_val *type = yyjson_obj_get(val, "type"); + if (type == NULL) { + error("parse_geometry(): type == NULL"); + } + + if (yyjson_equals_str(type, "Point")) { + return parse_point(val, opt); + } else if (yyjson_equals_str(type, "MultiPoint")) { + return parse_multipoint(val, opt); + } else if (yyjson_equals_str(type, "LineString")) { + return parse_linestring(val, opt); + } else if (yyjson_equals_str(type, "MultiLineString")) { + return parse_multilinestring(val, opt); + } else if (yyjson_equals_str(type, "Polygon")) { + return parse_polygon(val, opt); + } else if (yyjson_equals_str(type, "MultiPolygon")) { + return parse_multipolygon(val, opt); + } else if (yyjson_equals_str(type, "GeometryCollection")) { + return parse_geometry_collection(val, opt); + } else { + error("parse_geometry(): Unknown geojson type: %s", yyjson_get_str(type)); + } +} + + +//=========================================================================== +// +//=========================================================================== +SEXP geojson_as_sf(yyjson_val *val, geo_parse_options *opt, unsigned int depth) { + + if (yyjson_is_arr(val)) { + // Assume this is a JSON []-array of features + return parse_feature_collection(val, opt); + } + + if (!yyjson_is_obj(val)) { + error("geojson_as_sf(): Expecting object. Got %s", yyjson_get_type_desc(val)); + } + + yyjson_val *type = yyjson_obj_get(val, "type"); + if (type == NULL) { + error("geojson_as_sf(): type == NULL"); + } + + if (yyjson_equals_str(type, "Feature")) { + return parse_feature(val, opt); + } else if (yyjson_equals_str(type, "FeatureCollection")) { + return parse_feature_collection(val, opt); + } else { + int nprotect = 0; + SEXP res_= PROTECT(parse_geometry_type(val, opt)); nprotect++; + + // If this is not a top-level object, then just return it. + // the calling function will wrap it in a data.frame or whatever + if (depth > 0) { + UNPROTECT(nprotect); + return res_; + } + + // This is top-level bare geometry! + // This must be a single POINT/MULTIPOINT/LINESTRING/MULTILINSTRING + // POLYGON/MULTIPOLYGON/GEOMETRYCOLLECTION + if (opt->type == SF_TYPE) { + // Return as a df + res_ = PROTECT(promote_bare_geometry_to_df(res_, val, opt)); nprotect++; + } else { + // opt->type == SFC_TYPE + // return as a list + res_ = PROTECT(promote_bare_geometry_to_list(res_, val, opt)); nprotect++; + } + + UNPROTECT(nprotect); + return res_; + } + + return R_NilValue; +} + + + + + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Parse GeoJSON from a string +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP parse_geojson_str_(SEXP str_, SEXP geo_opts_, SEXP parse_opts_) { + + geo_parse_options opt = create_geo_parse_options(geo_opts_); + + parse_options parse_opt = create_parse_options(parse_opts_); + opt.parse_opt = &parse_opt; + + const char *str = CHAR(STRING_ELT(str_, 0)); + yyjson_read_err err; + yyjson_doc *doc = yyjson_read_opts((char *)str, strlen(str), opt.yyjson_read_flag, NULL, &err); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // If doc is NULL, then an error occurred during parsing. + // Try and print something sensible like {jsonlite} does. + // I.e. + // - print some context around where the error occurred + // - print the index in the character string where the error occurred + // - add a visual pointer to the output so the user knows where this was + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + if (doc == NULL) { + output_verbose_error(str, err); + error("Error parsing JSON: %s code: %u at position: %ld\n", err.msg, err.code, err.pos); + } + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Parse the document from the root node + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP res_ = PROTECT(geojson_as_sf(yyjson_doc_get_root(doc), &opt, 0)); + + yyjson_doc_free(doc); + + UNPROTECT(1); + return res_; +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Parse GeoJSON from a string +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP parse_geojson_file_(SEXP filename_, SEXP geo_opts_, SEXP parse_opts_) { + + geo_parse_options opt = create_geo_parse_options(geo_opts_); + + parse_options parse_opt = create_parse_options(parse_opts_); + opt.parse_opt = &parse_opt; + + const char *filename = (const char *)CHAR( STRING_ELT(filename_, 0) ); + filename = R_ExpandFileName(filename); + yyjson_read_err err; + yyjson_doc *doc = yyjson_read_file((char *)filename, opt.yyjson_read_flag, NULL, &err); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // If doc is NULL, then an error occurred during parsing. + // Try and print something sensible like {jsonlite} does. + // I.e. + // - print some context around where the error occurred + // - print the index in the character string where the error occurred + // - add a visual pointer to the output so the user knows where this was + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + if (doc == NULL) { + error("Error parsing JSON file '%s': %s code: %u at position: %ld\n", + filename, err.msg, err.code, err.pos); + } + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Parse the document from the root node + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP res_ = PROTECT(geojson_as_sf(yyjson_doc_get_root(doc), &opt, 0)); + + yyjson_doc_free(doc); + + UNPROTECT(1); + return res_; +} + + + + + + + + + + + + + + + diff --git a/src/geojson-serialize.c b/src/geojson-serialize.c new file mode 100644 index 0000000..4d76448 --- /dev/null +++ b/src/geojson-serialize.c @@ -0,0 +1,352 @@ + + + +#include +#include +#include + +#include +#include +#include +#include + +#include "yyjson.h" +#include "R-yyjson-serialize.h" + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// GeoJSON Serialize options +// - this also contains state information i.e. +// - current bounding box accumulations +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +typedef struct { + unsigned int yyjson_write_flag; + serialize_options *serialize_opt; +} geo_serialize_options; + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Initialise geo_parse_opts from an R named list from the user +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +geo_serialize_options create_geo_serialize_options(SEXP to_geo_opts_) { + geo_serialize_options opt = { + .yyjson_write_flag = YYJSON_WRITE_NOFLAG, + .serialize_opt = NULL + }; + + if (isNull(to_geo_opts_) || length(to_geo_opts_) == 0) { + return opt; + } + + if (!isNewList(to_geo_opts_)) { + error("'to_geo_opts_' must be a list"); + } + + SEXP nms_ = getAttrib(to_geo_opts_, R_NamesSymbol); + if (isNull(nms_)) { + error("'to_geo_opts_' must be a named list"); + } + + for (unsigned int i = 0; i < length(to_geo_opts_); i++) { + const char *opt_name = CHAR(STRING_ELT(nms_, i)); + SEXP val_ = VECTOR_ELT(to_geo_opts_, i); + + // if (strcmp(opt_name, "property_promotion") == 0) { + // const char *val = CHAR(STRING_ELT(val_, 0)); + // opt.property_promotion = strcmp(val, "string") == 0 ? PROP_TYPE_STRING : PROP_TYPE_LIST; + // } else if (strcmp(opt_name, "property_promotion_lgl_as_int") == 0) { + // const char *val = CHAR(STRING_ELT(val_, 0)); + // opt.property_promotion_lgl_as_int = strcmp(val, "string") == 0 ? PROP_LGL_AS_STR : PROP_LGL_AS_INT; + // } else if (strcmp(opt_name, "type") == 0) { + // const char *val = CHAR(STRING_ELT(val_, 0)); + // opt.type = strcmp(val, "sf") == 0 ? SF_TYPE : SFC_TYPE; + if (strcmp(opt_name, "pretty") == 0) { + if (asLogical(val_)) { + opt.yyjson_write_flag |= YYJSON_WRITE_PRETTY_TWO_SPACES; + } + } else { + warning("geo_opt: Unknown option ignored: '%s'\n", opt_name); + } + } + return opt; +} + + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// Serialize geometry +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +yyjson_mut_val *serialize_geom(SEXP sf_, yyjson_mut_doc *doc, geo_serialize_options *opt) { + + yyjson_mut_val *obj = yyjson_mut_obj(doc); + + bool geom_collection = false; + + if (inherits(sf_, "POINT")) { + yyjson_mut_obj_add_str(doc, obj, "type", "Point"); + } else if (inherits(sf_, "MULTIPOINT")) { + yyjson_mut_obj_add_str(doc, obj, "type", "MultiPoint"); + } else if (inherits(sf_, "LINESTRING")) { + yyjson_mut_obj_add_str(doc, obj, "type", "LineString"); + } else if (inherits(sf_, "MULTILINESTRING")) { + yyjson_mut_obj_add_str(doc, obj, "type", "MultiLineString"); + } else if (inherits(sf_, "POLYGON")) { + yyjson_mut_obj_add_str(doc, obj, "type", "Polygon"); + } else if (inherits(sf_, "MULTIPOLYGON")) { + yyjson_mut_obj_add_str(doc, obj, "type", "MultiPolygon"); + } else if (inherits(sf_, "GEOMETRYCOLLECTION")) { + geom_collection = true; + yyjson_mut_obj_add_str(doc, obj, "type", "GeometryCollection"); + } else { + error("@@@@@@@ serialize_geom Issue. Unhandled geometry type\n"); + } + + + if (!geom_collection) { + yyjson_mut_val *key = yyjson_mut_str(doc, "coordinates"); + yyjson_mut_obj_add(obj, key, serialize_core(sf_, doc, opt->serialize_opt)); + } else{ + + if (!isNewList(sf_)) { + error("Expecting geomcollection to be a VECSXP not: %s", type2char((SEXPTYPE)TYPEOF(sf_))); + } + + // An array of geoms + yyjson_mut_val *geoms = yyjson_mut_arr(doc); + + // Unpack each element of the 'sf_' list as a geom and add to the array + for (unsigned int i = 0; i < length(sf_); i++) { + yyjson_mut_val *geom = serialize_geom(VECTOR_ELT(sf_, i), doc, opt); + yyjson_mut_arr_add_val(geoms, geom); + } + + yyjson_mut_val *key = yyjson_mut_str(doc, "geometries"); + yyjson_mut_obj_add(obj, key, geoms); + } + + + return obj; +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP sfc_to_str(SEXP sfc_, geo_serialize_options *opt) { + + int nprotect = 0; + if (!isNewList(sfc_)) { + error("serialize_sfc(): Expeting list\n"); + } + + + R_xlen_t N = xlength(sfc_); + SEXP geojson_ = PROTECT(allocVector(STRSXP, N)); nprotect++; + + for (unsigned int idx = 0; idx < N; idx++) { + yyjson_mut_doc *doc = yyjson_mut_doc_new(NULL); + SEXP elem_ = VECTOR_ELT(sfc_, idx); + yyjson_mut_val *val = serialize_geom(elem_, doc, opt); + yyjson_mut_doc_set_root(doc, val); + + yyjson_write_err err; + char *json = yyjson_mut_write_opts(doc, opt->yyjson_write_flag, NULL, NULL, &err); + if (json == NULL) { + yyjson_mut_doc_free(doc); + error("Write to string error: %s code: %u\n", err.msg, err.code); + } + + SET_STRING_ELT(geojson_, idx, mkChar(json)); + yyjson_mut_doc_free(doc); + } + + + UNPROTECT(nprotect++); + return geojson_; +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// sf data.frame to feature collection +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +yyjson_mut_doc *sf_to_json(SEXP sf_, geo_serialize_options *opt) { + + // int nprotect = 0; + if (!isNewList(sf_) || !inherits(sf_, "data.frame")) { + error("serialize_sf(): Expecting data.frame\n"); + } + + yyjson_mut_doc *doc = yyjson_mut_doc_new(NULL); + // int ncol = length(sf_); + int nrow = length(VECTOR_ELT(sf_, 0)); + // Rprintf("[%i, %i] data.frame\n", nrow, ncol); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Determine index of geometry collection + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + int geom_col_idx = -1; + SEXP geom_col_name_ = getAttrib(sf_, mkString("sf_column")); + if (isNull(geom_col_name_)) { + error("sf_to_str(): Couldn't determine 'sf_column' name"); + } + const char *geom_col_name = CHAR(STRING_ELT(geom_col_name_, 0)); + SEXP colnames_ = getAttrib(sf_, R_NamesSymbol); + for (int i = 0; i < length(colnames_); i++) { + if (strcmp(CHAR(STRING_ELT(colnames_, i)), geom_col_name) == 0) { + geom_col_idx = i; + break; + } + } + if (geom_col_idx == -1) { + error("sf_to_str(): Couldn't 'sf_column' name '%s' in column names of sf object", geom_col_name); + } + + SEXP geom_col_ = VECTOR_ELT(sf_, geom_col_idx); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Iterate over each row to + // - create a 'Feature' object + // - add it to the features JSON []-array + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + yyjson_mut_val *features = yyjson_mut_arr(doc); + unsigned int *col_type = detect_data_frame_types(sf_, opt->serialize_opt); + + for (unsigned int row = 0; row < nrow; row++) { + yyjson_mut_val *properties = data_frame_row_to_json_object(sf_, col_type, row, geom_col_idx, doc, opt->serialize_opt); + yyjson_mut_val *geometry = serialize_geom(VECTOR_ELT(geom_col_, row), doc, opt); + yyjson_mut_val *feature = yyjson_mut_obj(doc); + yyjson_mut_obj_add_str(doc, feature, "type", "Feature"); + yyjson_mut_obj_add(feature, yyjson_mut_str(doc, "properties"), properties); + yyjson_mut_obj_add(feature, yyjson_mut_str(doc, "geometry" ), geometry); + + // Add the feature to the array of features + yyjson_mut_arr_add_val(features, feature); + } + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Feature collection + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + yyjson_mut_val *fc = yyjson_mut_obj(doc); + yyjson_mut_obj_add_str(doc, fc, "type", "FeatureCollection"); + yyjson_mut_obj_add(fc, yyjson_mut_str(doc, "features"), features); + + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Add the feature collection as the root element of the JSON 'doc' + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + yyjson_mut_doc_set_root(doc, fc); + + return doc; +} + + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// sf data.frame to feature collection +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP sf_to_str(SEXP sf_, geo_serialize_options *opt) { + + int nprotect = 0; + yyjson_mut_doc *doc = sf_to_json(sf_, opt); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Write the doc to a string + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + yyjson_write_err err; + char *json = yyjson_mut_write_opts(doc, opt->yyjson_write_flag, NULL, NULL, &err); + if (json == NULL) { + yyjson_mut_doc_free(doc); + error("serialize_sf() Write to string error: %s code: %u\n", err.msg, err.code); + } + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Convert string to R character, tidy and return + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + SEXP geojson_ = PROTECT(mkString(json)); nprotect++; + yyjson_mut_doc_free(doc); + UNPROTECT(nprotect++); + return geojson_; +} + +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// sf data.frame to feature collection +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +SEXP sf_to_file(SEXP sf_, SEXP filename_, geo_serialize_options *opt) { + + yyjson_mut_doc *doc = sf_to_json(sf_, opt); + + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // Write to JSON file + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + const char *filename = CHAR(STRING_ELT(filename_, 0)); + yyjson_write_err err; + bool success = yyjson_mut_write_file(filename, doc, opt->yyjson_write_flag, NULL, &err); + if (!success) { + yyjson_mut_doc_free(doc); + error("Write to file error '%s': %s code: %u\n", filename, err.msg, err.code); + } + yyjson_mut_doc_free(doc); + return R_NilValue; +} + + + + +//=========================================================================== +// # ### ### ### # # +// # # # # # # # # +// #### ### # # # # ## # +// # # # # ### # # # # # +// # # # # # # # # ## +// # # # # # # # # # # # # +// ## ### ### ### ### # # +// +// Serialize R object to JSON string. Callable from R +//=========================================================================== +SEXP serialize_sf_to_str_(SEXP sf_, SEXP to_geo_opts_, SEXP serialize_opts_) { + + int nprotect = 0; + if (!inherits(sf_, "sf") && !inherits(sf_, "sfc")) { + error("Not an sf object"); + } + geo_serialize_options opt = create_geo_serialize_options(to_geo_opts_); + + serialize_options serialize_opt = parse_serialize_options(serialize_opts_); + opt.serialize_opt = &serialize_opt; + + SEXP res_ = R_NilValue; + if (inherits(sf_, "sfc")) { + res_ = PROTECT(sfc_to_str(sf_, &opt)); nprotect++; + } else if (inherits(sf_, "sf")) { + res_ = PROTECT(sf_to_str(sf_, &opt)); nprotect++; + } else { + error("serialize_sf_to_str_: class not handled yet"); + } + + UNPROTECT(nprotect); + return res_; +} + +SEXP serialize_sf_to_file_(SEXP sf_, SEXP filename_, SEXP to_geo_opts_, SEXP serialize_opts_) { + + int nprotect = 0; + if (!inherits(sf_, "sf") && !inherits(sf_, "sfc")) { + error("Not an sf object"); + } + geo_serialize_options opt = create_geo_serialize_options(to_geo_opts_); + + serialize_options serialize_opt = parse_serialize_options(serialize_opts_); + opt.serialize_opt = &serialize_opt; + + // SEXP res_ = R_NilValue; + if (inherits(sf_, "sfc")) { + // res_ = PROTECT(sfc_to_str(sf_, &opt)); nprotect++; + error("Serializing 'sfc' objects to file not done yet"); + } else if (inherits(sf_, "sf")) { + PROTECT(sf_to_file(sf_, filename_, &opt)); nprotect++; + } else { + error("serialize_sf_to_file_: class not handled yet"); + } + + UNPROTECT(nprotect); + return R_NilValue; +} + diff --git a/src/init.c b/src/init.c index fa05a26..0d5e4a9 100644 --- a/src/init.c +++ b/src/init.c @@ -35,7 +35,14 @@ extern SEXP serialize_df_to_ndjson_file_(SEXP robj_, SEXP filename_, SEXP serial extern SEXP serialize_list_to_ndjson_str_ (SEXP robj_, SEXP serialize_opts_); extern SEXP serialize_list_to_ndjson_file_(SEXP robj_, SEXP filename_, SEXP serialize_opts_); +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +// GeoJSON +//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +extern SEXP parse_geojson_str_ (SEXP str_ , SEXP geo_opts_, SEXP parse_opts_); +extern SEXP parse_geojson_file_(SEXP filename_, SEXP geo_opts_, SEXP parse_opts_); +extern SEXP serialize_sf_to_str_ (SEXP sf_ , SEXP geo_opts_, SEXP serialize_opts_); +extern SEXP serialize_sf_to_file_(SEXP sf_, SEXP filename_, SEXP geo_opts_, SEXP serialize_opts_); static const R_CallMethodDef CEntries[] = { @@ -70,6 +77,15 @@ static const R_CallMethodDef CEntries[] = { {"serialize_list_to_ndjson_str_" , (DL_FUNC) &serialize_list_to_ndjson_str_ , 2}, {"serialize_list_to_ndjson_file_", (DL_FUNC) &serialize_list_to_ndjson_file_, 3}, + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + // GeoJSON + //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + {"parse_geojson_str_" , (DL_FUNC) &parse_geojson_str_ , 3}, + {"parse_geojson_file_", (DL_FUNC) &parse_geojson_file_, 3}, + + {"serialize_sf_to_str_" , (DL_FUNC) &serialize_sf_to_str_ , 3}, + {"serialize_sf_to_file_", (DL_FUNC) &serialize_sf_to_file_, 4}, + {NULL , NULL, 0} }; diff --git a/tests/testthat/geojson/coord-class-linestring-xyz.json b/tests/testthat/geojson/coord-class-linestring-xyz.json new file mode 100644 index 0000000..5f5cefb --- /dev/null +++ b/tests/testthat/geojson/coord-class-linestring-xyz.json @@ -0,0 +1 @@ +{"type":"LineString","coordinates":[[0.0,0.0,0.0],[1.0,1.0,1.0]]} diff --git a/tests/testthat/geojson/coord-class-linestring-xyzm.json b/tests/testthat/geojson/coord-class-linestring-xyzm.json new file mode 100644 index 0000000..ce0a554 --- /dev/null +++ b/tests/testthat/geojson/coord-class-linestring-xyzm.json @@ -0,0 +1 @@ +{"type":"LineString","coordinates":[[0.0,0.0,0.0,0.0],[1.0,2.0,3.0,4.0]]} diff --git a/tests/testthat/geojson/coord-class-multilinestring-xyz.json b/tests/testthat/geojson/coord-class-multilinestring-xyz.json new file mode 100644 index 0000000..912c6e2 --- /dev/null +++ b/tests/testthat/geojson/coord-class-multilinestring-xyz.json @@ -0,0 +1 @@ +{"type":"MultiLineString","coordinates":[[[0.0,0.0,0.0],[1.0,2.0,3.0]]]} diff --git a/tests/testthat/geojson/coord-class-multilinestring-xyzm.json b/tests/testthat/geojson/coord-class-multilinestring-xyzm.json new file mode 100644 index 0000000..c9f7f72 --- /dev/null +++ b/tests/testthat/geojson/coord-class-multilinestring-xyzm.json @@ -0,0 +1 @@ +{"type":"MultiLineString","coordinates":[[[0.0,0.0,0.0,0.0],[1.0,2.0,3.0,4.0]]]} diff --git a/tests/testthat/geojson/coord-class-multipoint-xy.json b/tests/testthat/geojson/coord-class-multipoint-xy.json new file mode 100644 index 0000000..5c2b8f7 --- /dev/null +++ b/tests/testthat/geojson/coord-class-multipoint-xy.json @@ -0,0 +1 @@ +{"type":"MultiPoint","coordinates":[[0.0,0.0],[1.0,1.0]]} diff --git a/tests/testthat/geojson/coord-class-multipoint-xyz.json b/tests/testthat/geojson/coord-class-multipoint-xyz.json new file mode 100644 index 0000000..ac101d0 --- /dev/null +++ b/tests/testthat/geojson/coord-class-multipoint-xyz.json @@ -0,0 +1 @@ +{"type":"MultiPoint","coordinates":[[0.0,0.0,0.0],[1.0,2.0,3.0]]} diff --git a/tests/testthat/geojson/coord-class-multipoint-xyzm.json b/tests/testthat/geojson/coord-class-multipoint-xyzm.json new file mode 100644 index 0000000..d589eff --- /dev/null +++ b/tests/testthat/geojson/coord-class-multipoint-xyzm.json @@ -0,0 +1,2 @@ +{"type":"MultiPoint","coordinates":[[0.0,0.0,0.0,0.0],[1.0,2.0,3.0,4.0]]} + diff --git a/tests/testthat/geojson/coord-class-multipolygon-xyz.json b/tests/testthat/geojson/coord-class-multipolygon-xyz.json new file mode 100644 index 0000000..65d7ee1 --- /dev/null +++ b/tests/testthat/geojson/coord-class-multipolygon-xyz.json @@ -0,0 +1 @@ +{"type":"MultiPolygon","coordinates":[[[[0.0,0.0,0.0],[0.0,1.0,0.0],[1.0,1.0,0.0],[1.0,0.0,2.0],[0.0,0.0,0.0]],[[2.0,2.0,0.0],[2.0,3.0,0.0],[3.0,3.0,0.0],[3.0,2.0,0.0],[2.0,2.0,0.0]]]]} diff --git a/tests/testthat/geojson/coord-class-multipolygon-xyzm.json b/tests/testthat/geojson/coord-class-multipolygon-xyzm.json new file mode 100644 index 0000000..fd36cde --- /dev/null +++ b/tests/testthat/geojson/coord-class-multipolygon-xyzm.json @@ -0,0 +1 @@ +{"type":"MultiPolygon","coordinates":[[[[0.0,0.0,0.0,0.0],[0.0,1.0,0.0,0.0],[1.0,1.0,0.0,0.0],[1.0,0.0,2.0,0.0],[0.0,0.0,0.0,0.0]],[[2.0,2.0,0.0,0.0],[2.0,3.0,0.0,0.0],[3.0,3.0,0.0,0.0],[3.0,2.0,0.0,0.0],[2.0,2.0,0.0,0.0]]]]} diff --git a/tests/testthat/geojson/coord-class-point-xy.json b/tests/testthat/geojson/coord-class-point-xy.json new file mode 100644 index 0000000..3936b96 --- /dev/null +++ b/tests/testthat/geojson/coord-class-point-xy.json @@ -0,0 +1 @@ +{"type":"Point","coordinates":[0.0,0.0]} diff --git a/tests/testthat/geojson/coord-class-point-xyz.json b/tests/testthat/geojson/coord-class-point-xyz.json new file mode 100644 index 0000000..4a7d2da --- /dev/null +++ b/tests/testthat/geojson/coord-class-point-xyz.json @@ -0,0 +1,2 @@ +{"type":"Point","coordinates":[0.0,0.0,1.0]} + diff --git a/tests/testthat/geojson/coord-class-point-xyzm.json b/tests/testthat/geojson/coord-class-point-xyzm.json new file mode 100644 index 0000000..f17d09d --- /dev/null +++ b/tests/testthat/geojson/coord-class-point-xyzm.json @@ -0,0 +1,2 @@ +{"type":"Point","coordinates":[0.0,0.0,1.0,2.0]} + diff --git a/tests/testthat/geojson/coord-class-polygon-xyz.json b/tests/testthat/geojson/coord-class-polygon-xyz.json new file mode 100644 index 0000000..7379ba7 --- /dev/null +++ b/tests/testthat/geojson/coord-class-polygon-xyz.json @@ -0,0 +1 @@ +{"type":"Polygon","coordinates":[[[0.0,0.0,0.0],[0.0,1.0,0.0],[1.0,1.0,0.0],[1.0,0.0,0.0],[0.0,0.0,0.0]]]} diff --git a/tests/testthat/geojson/coord-class-polygon-xyzm.json b/tests/testthat/geojson/coord-class-polygon-xyzm.json new file mode 100644 index 0000000..17f94c0 --- /dev/null +++ b/tests/testthat/geojson/coord-class-polygon-xyzm.json @@ -0,0 +1 @@ +{"type":"Polygon","coordinates":[[[0.0,0.0,0.0,0.0],[0.0,1.0,0.0,0.0],[1.0,1.0,2.0,3.0],[1.0,0.0,0.0,0.0],[0.0,0.0,0.0,0.0]]]} diff --git a/tests/testthat/geojson/feature-collection.json b/tests/testthat/geojson/feature-collection.json new file mode 100644 index 0000000..b45cf52 --- /dev/null +++ b/tests/testthat/geojson/feature-collection.json @@ -0,0 +1,158 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -80.870885, + 35.215151 + ] + }, + "properties": { + "name": "ABBOTT NEIGHBORHOOD PARK", + "address": "1300 SPRUCE ST" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -80.837753, + 35.249801 + ] + }, + "properties": { + "name": "DOUBLE OAKS CENTER", + "address": "1326 WOODWARD AV" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -80.83827, + 35.256747 + ] + }, + "properties": { + "name": "DOUBLE OAKS NEIGHBORHOOD PARK", + "address": "2605 DOUBLE OAKS RD" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -80.836977, + 35.257517 + ] + }, + "properties": { + "name": "DOUBLE OAKS POOL", + "address": "1200 NEWLAND RD" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -80.816476, + 35.401487 + ] + }, + "properties": { + "name": "DAVID B. WAYMER FLYING REGIONAL PARK", + "address": "15401 HOLBROOKS RD" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -80.835564, + 35.399172 + ] + }, + "properties": { + "name": "DAVID B. WAYMER COMMUNITY PARK", + "address": "302 HOLBROOKS RD" + } + }, + { + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + -80.724878, + 35.265454 + ], + [ + -80.722646, + 35.260338 + ], + [ + -80.720329, + 35.260618 + ], + [ + -80.718698, + 35.260267 + ], + [ + -80.715093, + 35.260548 + ], + [ + -80.71681, + 35.255361 + ], + [ + -80.710887, + 35.255361 + ], + [ + -80.703248, + 35.265033 + ], + [ + -80.704793, + 35.268397 + ], + [ + -80.70857, + 35.268257 + ], + [ + -80.712518, + 35.270359 + ], + [ + -80.715179, + 35.267696 + ], + [ + -80.721359, + 35.267276 + ], + [ + -80.724878, + 35.265454 + ] + ] + ] + }, + "properties": { + "name": "Plaza Road Park" + } + } + ] +} diff --git a/tests/testthat/geojson/featurecollection-empty.json b/tests/testthat/geojson/featurecollection-empty.json new file mode 100644 index 0000000..66b7952 --- /dev/null +++ b/tests/testthat/geojson/featurecollection-empty.json @@ -0,0 +1 @@ +{"type":"FeatureCollection","features":[]} diff --git a/tests/testthat/geojson/geo_melbourne.json b/tests/testthat/geojson/geo_melbourne.json new file mode 100644 index 0000000..19e1771 --- /dev/null +++ b/tests/testthat/geojson/geo_melbourne.json @@ -0,0 +1 @@ +{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"SA2_NAME":"Abbotsford","polygonId":70,"SA3_NAME":"Yarra","AREASQKM":1.7405,"fillColor":"#440154","strokeColor":"#440154","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9925232,-37.8024902],[144.9926453,-37.8018379],[144.9926758,-37.801609],[144.992691,-37.8015175],[144.9927521,-37.8011894],[144.9928284,-37.8007202],[144.9928589,-37.8005409],[144.9929352,-37.8000679],[144.992981,-37.799839],[144.9930878,-37.7991409],[144.9931946,-37.7984505],[144.9932404,-37.7981071],[144.9933014,-37.79776],[144.9934235,-37.7970581],[144.9935913,-37.7960472],[144.9938812,-37.7960205],[144.9940643,-37.7960205],[144.994339,-37.7960396],[144.9944611,-37.7960472],[144.9948273,-37.7960091],[144.9949188,-37.7960091],[144.9949951,-37.7960205],[144.9950714,-37.7960281],[144.9953613,-37.7961082],[144.9954834,-37.7961197],[144.9954834,-37.7962074],[144.9976196,-37.7964172],[144.9976654,-37.7961006],[144.9980011,-37.7961082],[144.9991913,-37.7960701],[145.0000916,-37.7960396],[145.0005951,-37.7960091],[145.0007629,-37.79599],[145.0009308,-37.7959099],[145.0010071,-37.7958488],[145.0010681,-37.7957497],[145.0010529,-37.795639],[145.0012817,-37.7955894],[145.0012817,-37.79562],[145.0012817,-37.7956505],[145.0012817,-37.7956581],[145.0012817,-37.7956696],[145.0012817,-37.7956772],[145.0012817,-37.7957077],[145.0012817,-37.7957191],[145.0012817,-37.7957497],[145.0012817,-37.7957687],[145.0012817,-37.7957878],[145.001297,-37.7957993],[145.001297,-37.7958107],[145.0013123,-37.7958183],[145.0013123,-37.7958298],[145.0013428,-37.7958374],[145.0013428,-37.7958374],[145.001358,-37.7958488],[145.0013733,-37.7958488],[145.0013885,-37.7958488],[145.0014191,-37.7958679],[145.0014343,-37.7958679],[145.0014801,-37.7958984],[145.0014954,-37.7959404],[145.0014954,-37.795948],[145.0014954,-37.7959976],[145.0015411,-37.7959976],[145.0015411,-37.7960091],[145.0015411,-37.7960205],[145.0015411,-37.7960396],[145.0015411,-37.7960472],[145.0015411,-37.7960701],[145.0015411,-37.7960777],[145.0015564,-37.7961006],[145.0015564,-37.7961197],[145.0015564,-37.7961502],[145.0015564,-37.7961502],[145.0015717,-37.7961578],[145.0015717,-37.7961693],[145.0015717,-37.7961884],[145.0015717,-37.7961998],[145.0019379,-37.7966499],[145.0018921,-37.7967491],[145.0018005,-37.7969284],[145.0017242,-37.797039],[145.0016327,-37.7971191],[145.0015106,-37.7971573],[145.0014038,-37.7971802],[145.001236,-37.7971382],[145.0010529,-37.7970772],[145.0008698,-37.79702],[145.0006714,-37.7969704],[145.0003662,-37.7969475],[145.0001526,-37.7969475],[144.9999084,-37.7969589],[144.9997101,-37.796978],[144.9994965,-37.7970009],[144.9993744,-37.7970581],[144.9993134,-37.7971077],[144.9992676,-37.7972183],[144.9992523,-37.7973595],[144.9992981,-37.7975082],[144.9993744,-37.7976494],[144.9995422,-37.7978477],[144.9996796,-37.798008],[144.9998169,-37.7981491],[145,-37.7982903],[145.0003204,-37.79842],[145.0006409,-37.7985382],[145.0009003,-37.7986298],[145.0011597,-37.7987595],[145.0014191,-37.7989006],[145.0020447,-37.7992897],[145.0024567,-37.7995186],[145.0027008,-37.7996674],[145.0028839,-37.7998085],[145.0031891,-37.8000603],[145.0034637,-37.8002586],[145.0037079,-37.8004684],[145.0039825,-37.8007278],[145.0040894,-37.8008194],[145.0041962,-37.8008881],[145.0045013,-37.8010902],[145.0048828,-37.8013191],[145.0053101,-37.8015785],[145.006073,-37.8020973],[145.0064697,-37.8023872],[145.0068207,-37.8026505],[145.0072632,-37.8029709],[145.0074921,-37.8031578],[145.0076294,-37.803299],[145.0076904,-37.8034592],[145.0076904,-37.8036804],[145.0076599,-37.8038979],[145.0075836,-37.8040771],[145.0074158,-37.8041878],[145.0071716,-37.8043289],[145.0069427,-37.8044777],[145.0067139,-37.8046074],[145.0064545,-37.8047409],[145.0061951,-37.8048477],[145.0058899,-37.8049774],[145.0056,-37.8050995],[145.0053558,-37.8051796],[145.0051422,-37.8052406],[145.0049438,-37.8052902],[145.0047302,-37.8053207],[145.0045776,-37.8053398],[145.0044098,-37.8053398],[145.0042419,-37.8053207],[145.0040436,-37.8052673],[145.003891,-37.8051796],[145.0037537,-37.8051109],[145.003479,-37.8050308],[145.0032501,-37.8049393],[145.0030212,-37.8048477],[145.0027924,-37.8047485],[145.0024414,-37.8045807],[145.002182,-37.8044472],[145.0018921,-37.8043289],[145.0016022,-37.8042488],[145.0015106,-37.8042297],[145.0012817,-37.8041992],[145.0010223,-37.8041687],[145.0008392,-37.8041687],[145.0006714,-37.8041801],[145.0005798,-37.8041878],[145.0003052,-37.8042297],[145.0001373,-37.8042793],[144.999939,-37.80439],[144.9998016,-37.8045082],[144.9996338,-37.8046989],[144.9994812,-37.8048592],[144.9993439,-37.8050385],[144.9992828,-37.8052101],[144.9992676,-37.8053589],[144.9993591,-37.8054771],[144.9993591,-37.8056488],[144.9994965,-37.8058281],[144.9996033,-37.8060074],[144.9997101,-37.8061981],[144.9998169,-37.8064003],[144.9999542,-37.8065987],[145.0000305,-37.8066788],[145.0001221,-37.8067894],[145.0002136,-37.806881],[145.0003204,-37.8069687],[145.0004425,-37.8070488],[145.0005341,-37.8071289],[145.0007935,-37.807209],[145.0010529,-37.8072395],[145.0011902,-37.8072281],[145.0013275,-37.8072281],[145.0018616,-37.8072472],[145.0022278,-37.8072395],[145.0028229,-37.8072281],[145.0033569,-37.8072472],[145.00383,-37.8072701],[145.0042114,-37.8072777],[145.0044098,-37.8072891],[145.0047302,-37.8072701],[145.0056915,-37.8071899],[145.0064392,-37.8071785],[145.0069275,-37.8071899],[145.0072937,-37.807209],[145.0075378,-37.8072472],[145.007782,-37.8073082],[145.0080566,-37.8073997],[145.0083618,-37.807518],[145.0085297,-37.8075905],[145.0087128,-37.8077087],[145.0088501,-37.8078384],[145.0089569,-37.8079872],[145.0089722,-37.8081398],[145.0089722,-37.8083992],[145.0089722,-37.8084373],[145.0089722,-37.8087006],[145.0090027,-37.8090096],[145.0090332,-37.8092995],[145.0090637,-37.8096008],[145.0091095,-37.8097878],[145.00914,-37.8099403],[145.009201,-37.8101387],[145.0092926,-37.810318],[145.0093689,-37.8103981],[145.0095215,-37.8104706],[145.0097351,-37.8104973],[145.0098877,-37.8104897],[145.0100403,-37.8104973],[145.0105133,-37.8105278],[145.0109406,-37.8105698],[145.0113068,-37.8105774],[145.0117188,-37.8105774],[145.0120697,-37.8105888],[145.0126801,-37.8106194],[145.0134735,-37.8106308],[145.0136261,-37.8106308],[145.0139771,-37.8106003],[145.0141296,-37.8105698],[145.0146637,-37.8104973],[145.0149689,-37.8104706],[145.0152893,-37.8104706],[145.0155029,-37.8104973],[145.0156403,-37.8105392],[145.0157318,-37.8106194],[145.0157928,-37.8107491],[145.0157928,-37.8108482],[145.0157623,-37.8110008],[145.015686,-37.8112907],[145.0155945,-37.8115387],[145.0155029,-37.8118591],[145.0153961,-37.8121376],[145.0153809,-37.8121376],[145.0150757,-37.8120995],[145.0141449,-37.8120003],[145.0133057,-37.8117905],[145.0130005,-37.8117104],[145.012207,-37.8116302],[145.0101013,-37.8113976],[145.0097656,-37.8114395],[145.0096436,-37.8114471],[145.0084839,-37.8113403],[145.0073547,-37.8112297],[145.0070801,-37.8111992],[145.0064087,-37.8111305],[145.0062714,-37.8111191],[145.0054626,-37.811039],[145.0051117,-37.8110085],[145.0046844,-37.8109703],[145.0041199,-37.8109093],[145.0029449,-37.8107986],[145.0023193,-37.81073],[145.0006409,-37.8105583],[144.9995422,-37.8104477],[144.9990692,-37.8103981],[144.9983521,-37.8103294],[144.997757,-37.8102684],[144.9971619,-37.8102074],[144.9965668,-37.8101387],[144.9960327,-37.8100891],[144.9952545,-37.810009],[144.9945374,-37.8099289],[144.9938507,-37.8098602],[144.9937744,-37.8098488],[144.9928436,-37.8097572],[144.9925995,-37.8097382],[144.9923706,-37.8097191],[144.9919739,-37.8097191],[144.9913483,-37.8097305],[144.9914093,-37.8093605],[144.9915161,-37.8086395],[144.9915924,-37.8081589],[144.9916992,-37.807518],[144.9917603,-37.8071594],[144.9921265,-37.8049889],[144.9923706,-37.8034973],[144.9924927,-37.8026772],[144.9925232,-37.8024902]]]}},{"type":"Feature","properties":{"SA2_NAME":"Albert Park","polygonId":59,"SA3_NAME":"Port Phillip","AREASQKM":4.6747,"fillColor":"#450457","strokeColor":"#450457","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9449005,-37.8437576],[144.9455719,-37.8430405],[144.9465179,-37.8410072],[144.947052,-37.84132],[144.9488525,-37.8407974],[144.9492188,-37.8406906],[144.9500427,-37.8404579],[144.95047,-37.8403282],[144.9510803,-37.8401489],[144.9518433,-37.8399277],[144.9517517,-37.8397484],[144.9517212,-37.8396683],[144.9517059,-37.8395882],[144.9516907,-37.839489],[144.9516907,-37.8394089],[144.9516907,-37.8393288],[144.9517212,-37.8392296],[144.9517517,-37.8391304],[144.9517822,-37.8390503],[144.9518433,-37.8389778],[144.951889,-37.8389091],[144.9519501,-37.8388405],[144.9520416,-37.838768],[144.9521332,-37.8386993],[144.9522095,-37.8386497],[144.952301,-37.8386078],[144.9523926,-37.8385506],[144.9524841,-37.8385086],[144.954422,-37.8379478],[144.9568939,-37.8372307],[144.9571686,-37.8378181],[144.9576263,-37.8387985],[144.957901,-37.8393898],[144.9581604,-37.8399773],[144.9586792,-37.8410492],[144.959198,-37.8421593],[144.9595032,-37.8418999],[144.9597321,-37.8416977],[144.9604492,-37.8410797],[144.9608002,-37.8407898],[144.9611969,-37.8404694],[144.9613953,-37.8403206],[144.9616394,-37.8401489],[144.9618835,-37.8399887],[144.9621277,-37.8398285],[144.9623718,-37.8396797],[144.9626312,-37.8395309],[144.9628754,-37.8393784],[144.9631348,-37.8392296],[144.9633789,-37.8391075],[144.9640045,-37.8387985],[144.9642639,-37.8386688],[144.964859,-37.8383904],[144.965271,-37.8382072],[144.9655914,-37.838089],[144.9657135,-37.8380394],[144.9658661,-37.8379707],[144.9667206,-37.8376579],[144.9676514,-37.8373795],[144.9678802,-37.8373108],[144.9680939,-37.8372383],[144.9682617,-37.8371696],[144.9684601,-37.8370895],[144.9686432,-37.8370094],[144.9688721,-37.8368988],[144.969101,-37.8367805],[144.9693146,-37.8366699],[144.9695435,-37.8365288],[144.9697723,-37.8363686],[144.969986,-37.8362083],[144.9701996,-37.8360405],[144.9703979,-37.8358688],[144.9705963,-37.8356781],[144.9706421,-37.8356285],[144.9707642,-37.8354988],[144.970932,-37.8353195],[144.9710693,-37.8351288],[144.9716797,-37.834259],[144.9716339,-37.8339081],[144.9717102,-37.8336678],[144.9717255,-37.8335304],[144.971756,-37.8332901],[144.971756,-37.8330879],[144.9717407,-37.8329697],[144.9717407,-37.83284],[144.9717102,-37.8327179],[144.9716949,-37.8326187],[144.9716644,-37.8325195],[144.9716339,-37.832428],[144.9716034,-37.8323288],[144.9717865,-37.8322792],[144.9718323,-37.8323174],[144.9719238,-37.8324394],[144.9720612,-37.8326073],[144.9721222,-37.8326797],[144.9722443,-37.8328094],[144.9723663,-37.8329391],[144.9725037,-37.8330574],[144.972641,-37.8331795],[144.9728088,-37.8332901],[144.9734039,-37.8337173],[144.973465,-37.8337593],[144.9736328,-37.8338776],[144.973999,-37.8341179],[144.9741058,-37.8341904],[144.9741821,-37.8342705],[144.9744415,-37.8345604],[144.9745331,-37.8346672],[144.9748688,-37.8350487],[144.9749298,-37.8351173],[144.9749756,-37.8351974],[144.9750366,-37.8353195],[144.9751892,-37.8355675],[144.9753418,-37.8358307],[144.9754333,-37.835968],[144.9754791,-37.8360672],[144.9755249,-37.8362083],[144.9758606,-37.8371506],[144.976059,-37.8376694],[144.9762573,-37.8381996],[144.9763489,-37.8384476],[144.9764404,-37.8387184],[144.9765778,-37.8390694],[144.9767914,-37.8396797],[144.9768829,-37.8399506],[144.9769897,-37.8402176],[144.9770813,-37.8404694],[144.9772797,-37.8410187],[144.9774017,-37.8413391],[144.9775391,-37.8417282],[144.9777222,-37.8422279],[144.9778137,-37.8424797],[144.9779205,-37.8427582],[144.9779968,-37.8429909],[144.9781342,-37.8433609],[144.9782715,-37.843708],[144.9783936,-37.8440475],[144.9785614,-37.8445473],[144.9786835,-37.8448486],[144.9790802,-37.8459702],[144.9794159,-37.8468704],[144.9795074,-37.8471107],[144.9797211,-37.8477173],[144.9801483,-37.8488579],[144.9803314,-37.8493881],[144.9804382,-37.849659],[144.9806366,-37.8502083],[144.9794159,-37.8504906],[144.9783478,-37.8507309],[144.9785767,-37.851429],[144.9788513,-37.8522186],[144.9790344,-37.8527603],[144.9785309,-37.8529091],[144.9785156,-37.8530807],[144.9783325,-37.8531876],[144.97612,-37.8538704],[144.9758911,-37.8538895],[144.9756775,-37.8538589],[144.9754791,-37.8537788],[144.9753571,-37.8536682],[144.9743652,-37.8521805],[144.9742889,-37.8521881],[144.9706421,-37.85355],[144.9701691,-37.8537292],[144.9689484,-37.8541603],[144.968399,-37.8543472],[144.9682617,-37.8543892],[144.9680634,-37.8546371],[144.9672699,-37.8555908],[144.9668884,-37.8560371],[144.9664917,-37.8565292],[144.9662476,-37.8568077],[144.9656677,-37.8574982],[144.9654694,-37.8572998],[144.9650116,-37.8568573],[144.9647522,-37.8565979],[144.9643707,-37.8562202],[144.9642181,-37.8560982],[144.9640198,-37.8559494],[144.9637756,-37.8557587],[144.9633026,-37.8554573],[144.9628296,-37.8552094],[144.9625397,-37.8551178],[144.9621887,-37.85495],[144.9616241,-37.8546677],[144.9610138,-37.8543701],[144.960907,-37.8543091],[144.9603271,-37.8539886],[144.9597015,-37.8537102],[144.9593811,-37.853508],[144.9590607,-37.8533707],[144.9586639,-37.8531609],[144.9583282,-37.8529701],[144.9580841,-37.8528786],[144.95784,-37.8527908],[144.9577332,-37.8527374],[144.9571991,-37.8524704],[144.9568024,-37.8522873],[144.9565735,-37.8521576],[144.9562836,-37.8520088],[144.9560699,-37.8519402],[144.9558716,-37.8518791],[144.9556427,-37.8517303],[144.9549713,-37.85149],[144.954361,-37.8512001],[144.9542236,-37.8511391],[144.9538422,-37.8509407],[144.9534912,-37.8508072],[144.9531403,-37.8506203],[144.9528961,-37.8504601],[144.952301,-37.8502083],[144.951889,-37.8500671],[144.9515839,-37.8499107],[144.9512482,-37.8497772],[144.950882,-37.8496284],[144.9503784,-37.8494606],[144.9499512,-37.8492279],[144.9494781,-37.8490372],[144.9492188,-37.8489494],[144.9487915,-37.8487206],[144.94841,-37.8485489],[144.9482117,-37.8484497],[144.9478607,-37.8482399],[144.947113,-37.8479195],[144.9464417,-37.8476181],[144.9463654,-37.8475876],[144.9460297,-37.8474274],[144.9457245,-37.84729],[144.9452515,-37.8470879],[144.9449005,-37.8470001],[144.9447174,-37.8469391],[144.9446106,-37.8468285],[144.9445343,-37.8467598],[144.9443054,-37.8466682],[144.944046,-37.8466492],[144.9438934,-37.8465996],[144.9436798,-37.8465195],[144.9429626,-37.846199],[144.942688,-37.8460884],[144.9432678,-37.84552],[144.9434662,-37.8453102],[144.9440002,-37.8447304],[144.9442749,-37.844429],[144.9449005,-37.8437576]]]}},{"type":"Feature","properties":{"SA2_NAME":"Alphington - Fairfield","polygonId":41,"SA3_NAME":"Darebin - South","AREASQKM":2.8853,"fillColor":"#46075A","strokeColor":"#46075A","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[145.0203705,-37.76548],[145.0215149,-37.7655983],[145.0246124,-37.7659302],[145.0264893,-37.7661285],[145.0274048,-37.7662277],[145.0285492,-37.7663498],[145.0305939,-37.7665596],[145.031189,-37.7666283],[145.031189,-37.7666779],[145.0312195,-37.7667809],[145.0312347,-37.7668381],[145.0312805,-37.7669106],[145.0313263,-37.7669678],[145.0313873,-37.7670479],[145.0314484,-37.7671089],[145.0315094,-37.76717],[145.0315704,-37.7672501],[145.0316162,-37.7673187],[145.0316315,-37.7674179],[145.0316162,-37.7675591],[145.0316162,-37.7676888],[145.031601,-37.7677879],[145.0315704,-37.7679176],[145.0315399,-37.7680206],[145.0315094,-37.7681503],[145.0314789,-37.76828],[145.0314636,-37.7683983],[145.0314331,-37.768528],[145.0314331,-37.7686501],[145.0314636,-37.7687187],[145.031662,-37.7688599],[145.0317383,-37.76894],[145.0317841,-37.7690277],[145.0317993,-37.7691574],[145.0317993,-37.7692604],[145.0317688,-37.7693787],[145.0317688,-37.7694588],[145.0317993,-37.7695885],[145.0318298,-37.7697296],[145.0318604,-37.7698975],[145.0318604,-37.7700081],[145.0318756,-37.77005],[145.0318909,-37.7701302],[145.0319214,-37.7702293],[145.0320282,-37.7704277],[145.0321198,-37.7705383],[145.0322571,-37.770649],[145.0324249,-37.7706795],[145.0325928,-37.770668],[145.0327606,-37.770649],[145.0328217,-37.7706375],[145.0328979,-37.7706184],[145.032959,-37.7705879],[145.0330505,-37.7705803],[145.0331726,-37.7705688],[145.0332489,-37.7705688],[145.0333557,-37.7705383],[145.0334625,-37.7705078],[145.0336304,-37.7704773],[145.0339813,-37.7704201],[145.0340881,-37.7703896],[145.0341644,-37.7703705],[145.0341797,-37.7703705],[145.0342407,-37.7703705],[145.0343018,-37.7703705],[145.0343933,-37.7703705],[145.0345154,-37.7703476],[145.0346069,-37.77034],[145.0347137,-37.7703094],[145.0348053,-37.770298],[145.03508,-37.7702789],[145.0352478,-37.7702675],[145.0353394,-37.7702675],[145.0354767,-37.7702904],[145.0356293,-37.7703285],[145.0357971,-37.770359],[145.036026,-37.7704201],[145.0361481,-37.7704773],[145.0362549,-37.7705688],[145.0363312,-37.7706108],[145.0363617,-37.7706108],[145.0364075,-37.7705879],[145.0364838,-37.7705193],[145.036499,-37.7705078],[145.0365753,-37.7705002],[145.0366058,-37.7705002],[145.0366516,-37.7705002],[145.0366516,-37.7705078],[145.0367126,-37.7705383],[145.0367737,-37.7705688],[145.0368042,-37.7706108],[145.0368195,-37.770649],[145.0368195,-37.7706795],[145.0367889,-37.7707672],[145.0367889,-37.7708588],[145.0368195,-37.7709198],[145.0368805,-37.7709885],[145.0369415,-37.7710686],[145.036972,-37.7711487],[145.0370178,-37.7712173],[145.0370636,-37.7712784],[145.0370789,-37.7713509],[145.0370941,-37.7714081],[145.0371094,-37.7714996],[145.0371094,-37.7716484],[145.0371094,-37.7717094],[145.0371094,-37.7717705],[145.0370941,-37.7718201],[145.0370789,-37.7719002],[145.0370331,-37.7721596],[145.036911,-37.7723694],[145.0368805,-37.7724495],[145.0368347,-37.7725105],[145.0368042,-37.7725677],[145.0367432,-37.7725983],[145.0366974,-37.7726173],[145.0366364,-37.7726288],[145.0365295,-37.7726173],[145.0364227,-37.7726097],[145.0363617,-37.7726173],[145.0363464,-37.7726288],[145.0362854,-37.7726479],[145.0361938,-37.7726707],[145.0360565,-37.7726784],[145.0359192,-37.7726707],[145.0357819,-37.7726402],[145.035553,-37.7725677],[145.0354919,-37.7725487],[145.0354156,-37.7725182],[145.0351105,-37.7724686],[145.0348969,-37.7724495],[145.034729,-37.7724075],[145.034668,-37.7723885],[145.0344849,-37.7723503],[145.0344238,-37.7723389],[145.0343628,-37.7723389],[145.0343018,-37.7723503],[145.0342407,-37.7723694],[145.0341797,-37.772419],[145.0341187,-37.7725105],[145.0340881,-37.7726097],[145.0341187,-37.7727089],[145.0341492,-37.772789],[145.0341949,-37.7728691],[145.0342407,-37.7729607],[145.0342712,-37.7730293],[145.0343628,-37.7731209],[145.0344543,-37.7732201],[145.0345306,-37.7733383],[145.0345917,-37.7733994],[145.0346527,-37.773468],[145.0346832,-37.7735176],[145.0347595,-37.7736473],[145.03479,-37.7737083],[145.0348206,-37.7737999],[145.0348969,-37.77388],[145.0349426,-37.7739182],[145.0349884,-37.7739677],[145.0350189,-37.7740173],[145.0350494,-37.7740479],[145.03508,-37.7740974],[145.0351105,-37.7741699],[145.0351715,-37.7742691],[145.035202,-37.7743607],[145.0352631,-37.7744408],[145.0353088,-37.7745285],[145.0353546,-37.7746086],[145.0354462,-37.7747307],[145.0355682,-37.7748184],[145.0356445,-37.7748604],[145.0358124,-37.7749176],[145.0358429,-37.7749405],[145.0359039,-37.7749672],[145.0359192,-37.7749977],[145.0359192,-37.7750587],[145.0359039,-37.7751503],[145.0358582,-37.7752304],[145.0357971,-37.7753792],[145.0357819,-37.7754288],[145.0357208,-37.7756081],[145.0356598,-37.7757683],[145.0356445,-37.7758102],[145.0355988,-37.7758179],[145.0354767,-37.7758102],[145.0353546,-37.7757874],[145.0352936,-37.7757988],[145.0352173,-37.7758598],[145.0351562,-37.7759285],[145.03508,-37.7760277],[145.0350494,-37.7761383],[145.0350189,-37.7762909],[145.0349884,-37.7765007],[145.0350037,-37.7766075],[145.0350342,-37.7767372],[145.0350342,-37.7768173],[145.0350189,-37.7769394],[145.0350189,-37.7770195],[145.0350342,-37.7770882],[145.0350342,-37.7771492],[145.0350494,-37.7772484],[145.0350494,-37.7772903],[145.03508,-37.777359],[145.0351105,-37.7773895],[145.0351105,-37.7774277],[145.0351105,-37.7774887],[145.0351105,-37.7775497],[145.0351105,-37.7776108],[145.03508,-37.7777672],[145.0350647,-37.7778397],[145.0350189,-37.7779198],[145.0349731,-37.7779808],[145.0349121,-37.7780685],[145.03479,-37.7783394],[145.034729,-37.7784996],[145.0346985,-37.7785606],[145.034668,-37.7785873],[145.0345917,-37.7786484],[145.0345459,-37.7787094],[145.0345306,-37.7787399],[145.0345154,-37.7787781],[145.0344696,-37.7788391],[145.0344696,-37.7789078],[145.0345306,-37.7789803],[145.0346375,-37.7790108],[145.0347137,-37.7790108],[145.03479,-37.7789803],[145.0348816,-37.7789497],[145.0349579,-37.7789307],[145.03508,-37.7789383],[145.0351868,-37.7789307],[145.0353088,-37.7789078],[145.0354919,-37.7788391],[145.035553,-37.77882],[145.0355988,-37.77882],[145.0357513,-37.7788277],[145.0358887,-37.7788391],[145.035965,-37.7788773],[145.0358124,-37.7790489],[145.0352325,-37.7796478],[145.0351562,-37.7797279],[145.0350647,-37.7798004],[145.0349731,-37.7798576],[145.0348816,-37.7799187],[145.0347748,-37.7799683],[145.0346832,-37.7800179],[145.0345612,-37.7800598],[145.0344391,-37.780098],[145.0339203,-37.7802391],[145.0334167,-37.7803307],[145.0322571,-37.7805481],[145.0311432,-37.7807579],[145.0300598,-37.7809601],[145.0286713,-37.7812195],[145.0279388,-37.7813606],[145.027298,-37.7814789],[145.0257416,-37.7817688],[145.0250244,-37.781868],[145.0245667,-37.7819405],[145.0240936,-37.7820473],[145.0234222,-37.7822189],[145.0232849,-37.782238],[145.0220032,-37.7824898],[145.0209198,-37.7827072],[145.0197601,-37.7829399],[145.0191345,-37.7830696],[145.0185699,-37.7831802],[145.0184174,-37.7832108],[145.0176544,-37.7833595],[145.0173798,-37.7833595],[145.0161896,-37.7835579],[145.0149994,-37.7837601],[145.0148315,-37.7837906],[145.0144806,-37.7837906],[145.0142975,-37.7838287],[145.0143738,-37.7833672],[145.0143738,-37.7833786],[145.0143738,-37.7833595],[145.0144958,-37.78339],[145.0145874,-37.7828674],[145.0147247,-37.7820396],[145.0148315,-37.7813187],[145.0149078,-37.7809601],[145.0149231,-37.7808685],[145.0149231,-37.7807808],[145.0151672,-37.7793808],[145.0151978,-37.7791672],[145.0157776,-37.7791672],[145.0158539,-37.7787704],[145.0147247,-37.7786407],[145.0149689,-37.7773285],[145.0152435,-37.7759705],[145.0152435,-37.7758789],[145.0152588,-37.7757874],[145.015564,-37.7740898],[145.015564,-37.7739983],[145.0160675,-37.7740593],[145.016098,-37.7738304],[145.0161133,-37.7737198],[145.0162048,-37.7732086],[145.0162506,-37.7729073],[145.0162659,-37.7728195],[145.0162659,-37.7728081],[145.0162811,-37.7727585],[145.0163574,-37.7723083],[145.0164185,-37.7719078],[145.0164642,-37.7716179],[145.0164795,-37.7715378],[145.0164948,-37.7714081],[145.01651,-37.7713699],[145.0165863,-37.7709274],[145.0166016,-37.7708282],[145.0166626,-37.7704887],[145.0167389,-37.7700195],[145.0167694,-37.7698402],[145.016861,-37.7692986],[145.0169525,-37.7686501],[145.0170135,-37.7687073],[145.0174103,-37.7687492],[145.0175323,-37.7687073],[145.0176239,-37.7681885],[145.0177917,-37.7672081],[145.0166931,-37.7670975],[145.0168762,-37.7660179],[145.0170288,-37.7651291],[145.0181122,-37.7652397],[145.0192413,-37.765358],[145.0203705,-37.76548]]]}},{"type":"Feature","properties":{"SA2_NAME":"Armadale","polygonId":66,"SA3_NAME":"Stonnington - West","AREASQKM":2.1835,"fillColor":"#460A5D","strokeColor":"#460A5D","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[145.0116577,-37.8535805],[145.0117493,-37.8529472],[145.0119171,-37.8518791],[145.0119324,-37.851799],[145.0120239,-37.8511696],[145.0121613,-37.8502274],[145.0122223,-37.8498688],[145.0122986,-37.849369],[145.0123138,-37.8492775],[145.0124207,-37.8492889],[145.0154877,-37.8497086],[145.016861,-37.8498878],[145.0177765,-37.8500099],[145.0182648,-37.8500786],[145.0188751,-37.8501587],[145.0197296,-37.8502693],[145.0202942,-37.850338],[145.020462,-37.8503609],[145.0214386,-37.8504906],[145.0225983,-37.8506393],[145.0237274,-37.8507881],[145.0241394,-37.8508377],[145.0248413,-37.8509407],[145.0254364,-37.8510208],[145.026886,-37.8512077],[145.0275574,-37.8512878],[145.0279083,-37.8513374],[145.0285645,-37.851429],[145.02948,-37.8515472],[145.0296631,-37.8515701],[145.0300446,-37.8516197],[145.0299835,-37.8520279],[145.0299072,-37.85252],[145.0297394,-37.8535385],[145.0295715,-37.8547287],[145.0294189,-37.8557205],[145.0292816,-37.8566208],[145.0292206,-37.857029],[145.0291901,-37.8571091],[145.0291595,-37.857338],[145.0291595,-37.8573685],[145.0290527,-37.8580208],[145.0289307,-37.8587875],[145.0289001,-37.8589287],[145.0287933,-37.8596001],[145.0287323,-37.8599281],[145.0286407,-37.8604584],[145.0285797,-37.8608284],[145.0284882,-37.8614197],[145.0283356,-37.8623695],[145.0281525,-37.8634605],[145.0280304,-37.8642387],[145.0279999,-37.8643379],[145.0279541,-37.8646507],[145.0278778,-37.8651199],[145.0278473,-37.8653107],[145.0276794,-37.8663101],[145.0271301,-37.8660774],[145.0267639,-37.8659096],[145.026062,-37.8656082],[145.02565,-37.8654289],[145.0251465,-37.8652077],[145.0241699,-37.8647804],[145.0231781,-37.8643494],[145.0223083,-37.8639603],[145.0222015,-37.8639183],[145.0206146,-37.8632278],[145.0204926,-37.8631706],[145.019455,-37.8627205],[145.0188293,-37.8624496],[145.0180206,-37.8620987],[145.0169983,-37.8616486],[145.0157928,-37.8611183],[145.015213,-37.8608704],[145.0151215,-37.8608398],[145.0136108,-37.86063],[145.0133972,-37.8605995],[145.0127258,-37.860508],[145.0117798,-37.8603897],[145.0105133,-37.860218],[145.0106964,-37.8591805],[145.0108643,-37.8582001],[145.0108795,-37.85812],[145.0109406,-37.8577805],[145.0109711,-37.8576508],[145.0112457,-37.85606],[145.0114899,-37.8546906],[145.0115509,-37.8543091],[145.0116119,-37.8539085],[145.0116577,-37.8535805]]]}},{"type":"Feature","properties":{"SA2_NAME":"Ascot Vale","polygonId":44,"SA3_NAME":"Essendon","AREASQKM":3.8361,"fillColor":"#460C5F","strokeColor":"#460C5F","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.8994141,-37.7703972],[144.899765,-37.7702789],[144.9006042,-37.7701073],[144.9009399,-37.7700195],[144.9024963,-37.7701988],[144.903595,-37.7703285],[144.9040833,-37.7703781],[144.9051971,-37.7705078],[144.9066315,-37.770668],[144.907486,-37.7707672],[144.90802,-37.7708282],[144.908844,-37.7709198],[144.9091492,-37.7709503],[144.9100494,-37.7710495],[144.9102936,-37.77108],[144.9106598,-37.7711182],[144.9111328,-37.7711678],[144.9114227,-37.7711983],[144.9125214,-37.771328],[144.913681,-37.7714577],[144.9148102,-37.7715797],[144.9150238,-37.7715988],[144.9154816,-37.7716599],[144.9161682,-37.7717285],[144.9167328,-37.7717896],[144.9180908,-37.7719383],[144.9183502,-37.7719688],[144.9195557,-37.7720985],[144.920639,-37.7722092],[144.9219208,-37.7723503],[144.9231567,-37.77248],[144.9239197,-37.7725601],[144.9252625,-37.7726974],[144.9263153,-37.7728081],[144.9264374,-37.7728195],[144.9269257,-37.7727585],[144.9268799,-37.7726288],[144.9272614,-37.7725983],[144.9274292,-37.7725792],[144.9276428,-37.7725983],[144.9302521,-37.7728806],[144.9303284,-37.7728882],[144.9319916,-37.7730598],[144.9320831,-37.7730675],[144.9336548,-37.7732391],[144.934021,-37.7732773],[144.9344025,-37.7733192],[144.9345856,-37.7733307],[144.9347534,-37.7733498],[144.9349518,-37.7733803],[144.9351501,-37.7734184],[144.9357605,-37.7735786],[144.9364777,-37.7737885],[144.9364166,-37.7738609],[144.9363251,-37.7741089],[144.9363251,-37.774189],[144.9363556,-37.774498],[144.9364929,-37.7757187],[144.936554,-37.7760773],[144.9365692,-37.7762108],[144.9366302,-37.7764702],[144.9367065,-37.7767181],[144.9368134,-37.7770996],[144.9368744,-37.7772102],[144.9370728,-37.7777672],[144.9356689,-37.7776108],[144.9349365,-37.7775192],[144.9348602,-37.7775574],[144.933609,-37.7774086],[144.9336395,-37.7774391],[144.9330139,-37.777359],[144.9324799,-37.777298],[144.9321136,-37.7772598],[144.9316101,-37.7771988],[144.9312592,-37.7771606],[144.9309235,-37.7771301],[144.9307556,-37.7771072],[144.9302368,-37.77705],[144.9300842,-37.7770309],[144.9303589,-37.77742],[144.9304047,-37.7774887],[144.9299011,-37.7777596],[144.9301453,-37.7781372],[144.9303589,-37.7784691],[144.9306183,-37.77882],[144.9310455,-37.7793694],[144.9312897,-37.7796593],[144.9315948,-37.7800407],[144.932312,-37.7809105],[144.9317169,-37.7808495],[144.9316559,-37.7812004],[144.9316406,-37.781208],[144.9312592,-37.7811699],[144.9312286,-37.7813492],[144.9312286,-37.7813683],[144.9311829,-37.7813606],[144.9310303,-37.7813492],[144.931015,-37.7813187],[144.9307709,-37.7812996],[144.9307404,-37.7811279],[144.9307404,-37.7810783],[144.930481,-37.7810593],[144.9304504,-37.7812576],[144.9303894,-37.7815285],[144.930191,-37.7815094],[144.9297638,-37.7814598],[144.9296417,-37.7814484],[144.9296722,-37.7811775],[144.9296875,-37.7811508],[144.9295502,-37.7811394],[144.9295654,-37.7810783],[144.9293365,-37.7810593],[144.9293518,-37.7809601],[144.9292755,-37.7809486],[144.9290771,-37.7809296],[144.9289551,-37.7809105],[144.9288483,-37.7808876],[144.9284973,-37.7808609],[144.928421,-37.7808495],[144.9284058,-37.7809677],[144.9283295,-37.7809601],[144.928299,-37.7811089],[144.9282532,-37.7810898],[144.9282532,-37.7810173],[144.9279938,-37.7809982],[144.9278717,-37.7809792],[144.9278107,-37.7809792],[144.927597,-37.7809486],[144.9275818,-37.7810898],[144.927063,-37.7806091],[144.9267731,-37.7806702],[144.9266968,-37.7806778],[144.9266815,-37.7806587],[144.9266663,-37.7806396],[144.9266357,-37.7805977],[144.9266205,-37.7805786],[144.9266205,-37.7805672],[144.9266052,-37.7805595],[144.92659,-37.7805405],[144.92659,-37.780529],[144.9265594,-37.7805099],[144.9265594,-37.7804985],[144.9265442,-37.7804794],[144.9265442,-37.7804794],[144.9265289,-37.7804604],[144.9265289,-37.7804604],[144.9264221,-37.7803192],[144.9261322,-37.7802887],[144.9251709,-37.7801971],[144.9251099,-37.7805481],[144.9244995,-37.7804909],[144.9244537,-37.7808304],[144.9238434,-37.7807693],[144.9237518,-37.7807693],[144.9232941,-37.7807198],[144.9233551,-37.7803993],[144.9232788,-37.7803879],[144.9232788,-37.7804184],[144.9231873,-37.7804108],[144.9230347,-37.7803993],[144.9229584,-37.7803879],[144.9225922,-37.7803497],[144.9225006,-37.78088],[144.9224091,-37.7813492],[144.9223633,-37.7816582],[144.9222717,-37.7822495],[144.922226,-37.7825089],[144.9221802,-37.7827492],[144.9221497,-37.7829704],[144.9220276,-37.7837105],[144.9205627,-37.78368],[144.9203339,-37.7836685],[144.9193115,-37.783638],[144.9176025,-37.7836075],[144.9173126,-37.7833099],[144.9169617,-37.7829399],[144.9159698,-37.781868],[144.9151001,-37.7809601],[144.9148102,-37.7806587],[144.9147339,-37.7805786],[144.9145203,-37.7803879],[144.9135742,-37.7793884],[144.9116516,-37.7805176],[144.9108429,-37.7809906],[144.9082336,-37.7825279],[144.9082184,-37.7825584],[144.9081116,-37.7826805],[144.9079895,-37.7828178],[144.9078827,-37.7829399],[144.9077606,-37.7830887],[144.9075928,-37.7833176],[144.9074554,-37.7835388],[144.9073029,-37.7837906],[144.9071655,-37.7840309],[144.9070435,-37.7842903],[144.9069366,-37.7845383],[144.9068298,-37.7847977],[144.9067535,-37.785038],[144.9066925,-37.7852783],[144.9066315,-37.7855492],[144.9065399,-37.7860184],[144.9064636,-37.7868385],[144.9063263,-37.7873878],[144.904953,-37.7871475],[144.9049377,-37.7872086],[144.9048615,-37.787468],[144.9048309,-37.78759],[144.9048004,-37.7876396],[144.9046936,-37.7879105],[144.9045563,-37.7881699],[144.9044037,-37.7884598],[144.9042511,-37.7887077],[144.904007,-37.7889481],[144.9035339,-37.7892799],[144.90271,-37.78965],[144.90271,-37.7895279],[144.90271,-37.7893906],[144.9027557,-37.7892075],[144.9028168,-37.7890091],[144.9029694,-37.7887077],[144.9031067,-37.7884483],[144.9033203,-37.7880478],[144.9035034,-37.7876892],[144.9035797,-37.7874298],[144.9036255,-37.7872391],[144.9036407,-37.7870483],[144.903656,-37.786808],[144.9036713,-37.7867088],[144.9037018,-37.7865105],[144.9037476,-37.7863083],[144.9037933,-37.7861595],[144.9038696,-37.7859993],[144.9039917,-37.7858086],[144.904068,-37.7856178],[144.9040833,-37.7854385],[144.9041138,-37.7853088],[144.9040833,-37.7850876],[144.9040222,-37.7847404],[144.9039764,-37.7845802],[144.9038239,-37.7843895],[144.903656,-37.7842178],[144.9034729,-37.7840691],[144.9033051,-37.7839699],[144.9030914,-37.7838402],[144.9028931,-37.7837105],[144.9026642,-37.7835274],[144.9023895,-37.7832794],[144.9021912,-37.7831078],[144.9021149,-37.7830505],[144.9017639,-37.7827797],[144.9015198,-37.782608],[144.9012146,-37.7824402],[144.9009399,-37.782299],[144.9007111,-37.7821999],[144.9003906,-37.7820587],[144.9001312,-37.781929],[144.8998413,-37.7817688],[144.8995209,-37.7815895],[144.8992462,-37.7813988],[144.8990021,-37.7812386],[144.8987732,-37.7811089],[144.8984833,-37.7809677],[144.8981018,-37.7807503],[144.8979187,-37.7806091],[144.8977051,-37.7803574],[144.897522,-37.7800598],[144.8973236,-37.7797203],[144.8972015,-37.779438],[144.8971405,-37.7792282],[144.89711,-37.7789879],[144.8970795,-37.7787285],[144.8970795,-37.7787094],[144.8970642,-37.7784576],[144.897049,-37.7783585],[144.8970337,-37.7780304],[144.8969574,-37.77771],[144.8968811,-37.777298],[144.8968201,-37.7769585],[144.8967133,-37.7765808],[144.8966522,-37.7763786],[144.8965912,-37.7761879],[144.8964996,-37.7759476],[144.8962402,-37.7753983],[144.8961639,-37.7751808],[144.8961029,-37.77491],[144.8960419,-37.7746506],[144.8959961,-37.7744102],[144.8959808,-37.7742386],[144.8959198,-37.7739182],[144.8959045,-37.7736588],[144.8958893,-37.7734909],[144.8958588,-37.7733994],[144.8958435,-37.7732506],[144.8958588,-37.7730484],[144.8959503,-37.7728081],[144.8961792,-37.77248],[144.8964233,-37.7721596],[144.8968201,-37.7717896],[144.8971863,-37.7715302],[144.8976288,-37.7712479],[144.8979797,-37.7710381],[144.8984833,-37.7707901],[144.8989105,-37.7705803],[144.8994141,-37.7703972]]]}},{"type":"Feature","properties":{"SA2_NAME":"Brunswick","polygonId":36,"SA3_NAME":"Brunswick - Coburg","AREASQKM":5.1425,"fillColor":"#472D7B","strokeColor":"#472D7B","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9497375,-37.7627602],[144.9500122,-37.7610474],[144.9501801,-37.7601585],[144.9503174,-37.7593079],[144.9500732,-37.7592773],[144.9501495,-37.7589302],[144.9503021,-37.7580872],[144.9504242,-37.75737],[144.9506531,-37.7562294],[144.9506531,-37.7561874],[144.9506683,-37.7561607],[144.9506836,-37.7561188],[144.9506836,-37.7560997],[144.9506989,-37.7560692],[144.9507294,-37.7560501],[144.9507294,-37.7560387],[144.9507599,-37.7560081],[144.9507904,-37.7559776],[144.9508057,-37.7559586],[144.9508209,-37.7559509],[144.9508514,-37.7559204],[144.9508667,-37.755909],[144.9509125,-37.7558899],[144.950943,-37.7558708],[144.9510193,-37.7558403],[144.9511871,-37.7557793],[144.9516907,-37.755619],[144.9519196,-37.7555389],[144.9522095,-37.7554283],[144.9527283,-37.7552109],[144.9532013,-37.7550087],[144.9532623,-37.7549706],[144.9533997,-37.7548904],[144.9535065,-37.7547989],[144.953598,-37.7546997],[144.9536896,-37.7545586],[144.9538269,-37.7543182],[144.9538574,-37.7542305],[144.9539642,-37.7542381],[144.9548035,-37.7543373],[144.9557648,-37.7544479],[144.9564514,-37.754528],[144.9567413,-37.7545586],[144.9575195,-37.7546577],[144.9582214,-37.7547379],[144.9587097,-37.7547989],[144.9590607,-37.7548409],[144.960083,-37.7549591],[144.9615326,-37.7551308],[144.961731,-37.7551498],[144.9621735,-37.7551994],[144.9638824,-37.7554092],[144.9641113,-37.7554474],[144.9648132,-37.7555389],[144.9659882,-37.7556801],[144.9673615,-37.7558289],[144.967514,-37.7558479],[144.9681091,-37.755909],[144.9694061,-37.7560577],[144.9703979,-37.7561684],[144.9711304,-37.7562485],[144.9723206,-37.7563782],[144.9733124,-37.7564888],[144.9739227,-37.7565575],[144.9740295,-37.7565689],[144.9748535,-37.7566605],[144.9761047,-37.7568092],[144.9766083,-37.7568703],[144.9769745,-37.7569199],[144.9766235,-37.7590103],[144.9757538,-37.7589073],[144.9751282,-37.7588272],[144.9751282,-37.7588387],[144.9750977,-37.7588272],[144.9745026,-37.7587585],[144.9739532,-37.7586975],[144.9739075,-37.7590103],[144.9738922,-37.7591286],[144.9738617,-37.7592087],[144.9740753,-37.7592278],[144.9740601,-37.7592697],[144.9740295,-37.7594604],[144.9739838,-37.7597389],[144.9738159,-37.7597198],[144.9736176,-37.7608681],[144.973587,-37.7609978],[144.9734955,-37.7611008],[144.9733429,-37.7620277],[144.9733887,-37.7620392],[144.973053,-37.7638702],[144.973053,-37.7639008],[144.9729309,-37.7645493],[144.9727936,-37.7653198],[144.9727325,-37.7657585],[144.97258,-37.7665482],[144.97229,-37.7681274],[144.9721832,-37.7687683],[144.972168,-37.7688904],[144.9719696,-37.7699394],[144.9718628,-37.7705574],[144.9717102,-37.7714005],[144.9716492,-37.7717781],[144.9716187,-37.7719307],[144.9716034,-37.7720299],[144.9714966,-37.7726593],[144.9713745,-37.7733879],[144.9712677,-37.7740974],[144.9712067,-37.7744789],[144.9711304,-37.7749596],[144.9711304,-37.7750092],[144.9710083,-37.7757683],[144.9710388,-37.7758598],[144.9709473,-37.7765198],[144.9709167,-37.7767181],[144.9708405,-37.7772408],[144.9706879,-37.7782898],[144.9705811,-37.7789001],[144.97052,-37.7792778],[144.9689941,-37.7790985],[144.9680939,-37.7792282],[144.9676361,-37.7793083],[144.9677124,-37.7789383],[144.9672089,-37.7788773],[144.9659729,-37.7787399],[144.9651794,-37.7786407],[144.9639435,-37.7784882],[144.9633331,-37.7784195],[144.9624786,-37.7783089],[144.9616241,-37.7782097],[144.9614716,-37.7781906],[144.9602203,-37.778038],[144.9598999,-37.7779999],[144.959259,-37.7779198],[144.9580841,-37.7777786],[144.9564514,-37.7775879],[144.9551239,-37.77742],[144.9541626,-37.7773094],[144.9531403,-37.7771873],[144.9523926,-37.7770882],[144.9516602,-37.7770081],[144.9502869,-37.7768402],[144.949646,-37.7767601],[144.9494324,-37.7767372],[144.9494019,-37.7767296],[144.9487915,-37.7756882],[144.9488831,-37.7751579],[144.9489594,-37.7747002],[144.9491425,-37.773838],[144.9493256,-37.7728271],[144.9495544,-37.7716103],[144.9498444,-37.7701492],[144.9492798,-37.7700806],[144.948761,-37.7700195],[144.9485321,-37.769989],[144.9486389,-37.7693596],[144.9487,-37.7690277],[144.9488525,-37.7681999],[144.9488678,-37.7681198],[144.9489594,-37.7675972],[144.9490051,-37.7672882],[144.9491425,-37.76651],[144.949295,-37.7654877],[144.9493713,-37.7650604],[144.9494019,-37.7647896],[144.9494171,-37.7646675],[144.9494324,-37.7645874],[144.9494324,-37.7645683],[144.9497375,-37.7627602]]]}},{"type":"Feature","properties":{"SA2_NAME":"Brunswick East","polygonId":37,"SA3_NAME":"Brunswick - Coburg","AREASQKM":2.168,"fillColor":"#472D7B","strokeColor":"#472D7B","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9733887,-37.7620392],[144.9733429,-37.7620277],[144.9734955,-37.7611008],[144.973587,-37.7609978],[144.9736176,-37.7608681],[144.9738159,-37.7597198],[144.9739838,-37.7597389],[144.9740295,-37.7594604],[144.9740601,-37.7592697],[144.9740753,-37.7592278],[144.9738617,-37.7592087],[144.9738922,-37.7591286],[144.9739075,-37.7590103],[144.9739532,-37.7586975],[144.9745026,-37.7587585],[144.9750977,-37.7588272],[144.9751282,-37.7588387],[144.9751282,-37.7588272],[144.9757538,-37.7589073],[144.9766235,-37.7590103],[144.9769745,-37.7569199],[144.977829,-37.757019],[144.9785004,-37.7570992],[144.9794922,-37.7572098],[144.9796906,-37.7572403],[144.9798431,-37.7572594],[144.9801636,-37.7572899],[144.9802094,-37.7574196],[144.9802551,-37.7576981],[144.9804535,-37.7580376],[144.9806366,-37.7583275],[144.9808502,-37.75877],[144.9809418,-37.7588882],[144.9811401,-37.7591896],[144.9813843,-37.7595482],[144.9816132,-37.7599106],[144.9818573,-37.7603073],[144.9820862,-37.7606277],[144.9824982,-37.7609596],[144.9828339,-37.7612572],[144.9830322,-37.7614174],[144.9831543,-37.7615585],[144.983139,-37.7618179],[144.9830322,-37.7619476],[144.9828491,-37.7620506],[144.9826202,-37.7621078],[144.9824677,-37.7621574],[144.9821014,-37.7621307],[144.9818573,-37.7621384],[144.9815674,-37.7622108],[144.981369,-37.7623787],[144.981369,-37.7626305],[144.9814453,-37.7628288],[144.9815521,-37.762989],[144.9816895,-37.7631989],[144.9819183,-37.7633896],[144.9822693,-37.763588],[144.9824982,-37.7636375],[144.983078,-37.7636604],[144.9835205,-37.7637978],[144.9836426,-37.7638397],[144.9838257,-37.7639809],[144.9838867,-37.7641106],[144.9839783,-37.7646484],[144.9841919,-37.7649574],[144.9842834,-37.765049],[144.9843445,-37.7651291],[144.9848022,-37.7654076],[144.9852142,-37.765728],[144.9854889,-37.7660103],[144.9855499,-37.7661972],[144.9855652,-37.7664185],[144.9851532,-37.766819],[144.9848938,-37.7669373],[144.9847717,-37.7669792],[144.9845123,-37.767189],[144.9844666,-37.7673302],[144.9844666,-37.7675095],[144.9844513,-37.7677383],[144.9844055,-37.7681808],[144.9843597,-37.7685089],[144.9842529,-37.7691498],[144.9842224,-37.7694206],[144.9842224,-37.769558],[144.9842072,-37.7696609],[144.9841461,-37.7697983],[144.9841614,-37.7700996],[144.9841919,-37.7703285],[144.9842529,-37.7707405],[144.9844513,-37.7712288],[144.9845123,-37.7713394],[144.9848633,-37.7716789],[144.9850311,-37.7719002],[144.9854279,-37.7722473],[144.9855347,-37.7723579],[144.9857788,-37.7725983],[144.9861603,-37.7729301],[144.9864502,-37.7732277],[144.9866333,-37.773468],[144.9868011,-37.7737083],[144.9868317,-37.773838],[144.9868622,-37.7743683],[144.9867096,-37.7743492],[144.9866028,-37.7744293],[144.9858398,-37.7743378],[144.9857635,-37.7743797],[144.9851837,-37.7743073],[144.9833832,-37.7740898],[144.9833984,-37.7739372],[144.9824524,-37.773838],[144.9816284,-37.7737503],[144.9815063,-37.7737389],[144.9811096,-37.7737007],[144.9808655,-37.7736702],[144.9806824,-37.7736473],[144.9803925,-37.7736206],[144.9797211,-37.7735481],[144.979187,-37.7734909],[144.9790039,-37.774559],[144.9789429,-37.7748985],[144.9788818,-37.7752991],[144.9788513,-37.7754478],[144.978714,-37.7762489],[144.9785614,-37.7772179],[144.9784088,-37.7780609],[144.978241,-37.779068],[144.9782104,-37.7792282],[144.9782104,-37.7794075],[144.9782104,-37.7794991],[144.9781952,-37.7795906],[144.9781494,-37.7798691],[144.9781189,-37.7800674],[144.9781036,-37.7801971],[144.9774017,-37.7801208],[144.9768982,-37.7800598],[144.9752502,-37.7798576],[144.9746857,-37.779789],[144.9734802,-37.7796402],[144.9733276,-37.7796173],[144.9727631,-37.7795486],[144.971283,-37.7793808],[144.97052,-37.7792778],[144.9705811,-37.7789001],[144.9706879,-37.7782898],[144.9708405,-37.7772408],[144.9709167,-37.7767181],[144.9709473,-37.7765198],[144.9710388,-37.7758598],[144.9710083,-37.7757683],[144.9711304,-37.7750092],[144.9711304,-37.7749596],[144.9712067,-37.7744789],[144.9712677,-37.7740974],[144.9713745,-37.7733879],[144.9714966,-37.7726593],[144.9716034,-37.7720299],[144.9716187,-37.7719307],[144.9716492,-37.7717781],[144.9717102,-37.7714005],[144.9718628,-37.7705574],[144.9719696,-37.7699394],[144.972168,-37.7688904],[144.9721832,-37.7687683],[144.97229,-37.7681274],[144.97258,-37.7665482],[144.9727325,-37.7657585],[144.9727936,-37.7653198],[144.9729309,-37.7645493],[144.973053,-37.7639008],[144.973053,-37.7638702],[144.9733887,-37.7620392]]]}},{"type":"Feature","properties":{"SA2_NAME":"Brunswick West","polygonId":38,"SA3_NAME":"Brunswick - Coburg","AREASQKM":3.1795,"fillColor":"#472E7C","strokeColor":"#472E7C","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9340668,-37.7596893],[144.9340515,-37.7595596],[144.9339905,-37.7594986],[144.9338074,-37.759388],[144.933609,-37.7592773],[144.9331665,-37.7590179],[144.9330139,-37.7588882],[144.9329834,-37.7588577],[144.9329681,-37.7587776],[144.9329529,-37.7587204],[144.9329681,-37.7586479],[144.9329987,-37.7585907],[144.9330292,-37.7585373],[144.9330597,-37.7584877],[144.9332428,-37.7583389],[144.9333191,-37.7583008],[144.9333496,-37.7582474],[144.9333801,-37.7582092],[144.9334106,-37.7581482],[144.9334259,-37.7580986],[144.9334412,-37.7580376],[144.9334564,-37.7579575],[144.9334412,-37.7578087],[144.9334412,-37.7577591],[144.9334564,-37.7577095],[144.9334717,-37.7576485],[144.9335022,-37.7575989],[144.9335327,-37.7575378],[144.9335785,-37.7574692],[144.933609,-37.7574272],[144.9337311,-37.757328],[144.9337921,-37.7572899],[144.9344177,-37.7569389],[144.9344482,-37.7569199],[144.934494,-37.7568779],[144.9345245,-37.7568398],[144.9345551,-37.7567978],[144.9345703,-37.7567101],[144.9345703,-37.7566681],[144.9345703,-37.7566299],[144.9345703,-37.756588],[144.9345093,-37.7564087],[144.9344635,-37.7562904],[144.934433,-37.7561989],[144.9343719,-37.7560997],[144.9342957,-37.7559891],[144.9342041,-37.7558594],[144.9341278,-37.7557602],[144.934021,-37.7556572],[144.9339142,-37.7555695],[144.9337921,-37.7554474],[144.9337311,-37.7553902],[144.93367,-37.7553291],[144.9336243,-37.755249],[144.933609,-37.7552109],[144.933609,-37.7551384],[144.933609,-37.7550697],[144.9336395,-37.7550087],[144.93367,-37.7549591],[144.9337006,-37.7549095],[144.9338684,-37.7547989],[144.9344177,-37.7545395],[144.9344788,-37.754509],[144.9346161,-37.7544174],[144.9346771,-37.7543793],[144.9347534,-37.7543182],[144.9348145,-37.7542572],[144.9348602,-37.7541885],[144.9348907,-37.7541199],[144.9349365,-37.7540474],[144.9349518,-37.7539787],[144.934967,-37.7539101],[144.9349976,-37.7537003],[144.9350433,-37.7534676],[144.9350128,-37.7533798],[144.9349518,-37.7532883],[144.9348907,-37.7532272],[144.9347992,-37.75317],[144.9347229,-37.7531281],[144.9346008,-37.7531204],[144.9345093,-37.753109],[144.9343719,-37.7531204],[144.9342041,-37.7531509],[144.934021,-37.7531891],[144.9338837,-37.7532005],[144.9337463,-37.7532005],[144.9335632,-37.7531776],[144.9333801,-37.7531281],[144.933197,-37.7530708],[144.9330292,-37.7529907],[144.9328156,-37.7528801],[144.932663,-37.752758],[144.9325562,-37.7526474],[144.9324951,-37.7526207],[144.9324188,-37.7526093],[144.932373,-37.7526207],[144.932312,-37.7526283],[144.9322205,-37.7526779],[144.9321594,-37.7527885],[144.9321136,-37.7529602],[144.9320221,-37.7530708],[144.9319,-37.75317],[144.9318237,-37.7532005],[144.9317627,-37.7532196],[144.9317017,-37.7532387],[144.9316406,-37.7532501],[144.9315643,-37.7532578],[144.9314728,-37.7532806],[144.9314117,-37.7532883],[144.9313507,-37.7532997],[144.9312592,-37.7533188],[144.9311829,-37.7533493],[144.9310913,-37.7533798],[144.9309998,-37.7534409],[144.9309387,-37.753479],[144.9308777,-37.7535095],[144.9308014,-37.7535477],[144.9307098,-37.7536087],[144.9306335,-37.7536507],[144.930542,-37.7536583],[144.9304047,-37.7536278],[144.9303131,-37.7535782],[144.930191,-37.7534981],[144.9301147,-37.753418],[144.9300232,-37.7533302],[144.9299316,-37.7532272],[144.9298706,-37.7531281],[144.9297943,-37.7530289],[144.9297333,-37.7529488],[144.929657,-37.7528381],[144.9295807,-37.7527199],[144.9295502,-37.7526703],[144.9295502,-37.7526283],[144.9295197,-37.7525291],[144.9294739,-37.7523994],[144.9294586,-37.7522774],[144.9294434,-37.7521782],[144.9293976,-37.7519989],[144.9293518,-37.7519493],[144.9292908,-37.7519073],[144.9291534,-37.7518883],[144.9290771,-37.7519073],[144.9290009,-37.7519379],[144.9289246,-37.7520103],[144.9288788,-37.7520981],[144.9288025,-37.7522507],[144.9287415,-37.7523689],[144.9286804,-37.7524681],[144.9286041,-37.7525482],[144.9285278,-37.7525978],[144.9284515,-37.7526207],[144.928421,-37.7526207],[144.9283752,-37.7526093],[144.928299,-37.7525902],[144.9281464,-37.7525177],[144.9280396,-37.7524796],[144.9279327,-37.7524185],[144.9277496,-37.7523079],[144.9276886,-37.7522697],[144.9275818,-37.7522278],[144.9274597,-37.7521973],[144.9273376,-37.7521591],[144.9272156,-37.7521095],[144.9271088,-37.7520485],[144.9270325,-37.7519875],[144.9269714,-37.7519302],[144.9268951,-37.7518501],[144.9268951,-37.7518387],[144.9268799,-37.7518272],[144.9268799,-37.7518082],[144.9268799,-37.7517891],[144.9268646,-37.75177],[144.9268494,-37.7517281],[144.9268341,-37.7516975],[144.9268036,-37.7516403],[144.9267731,-37.7515984],[144.9267426,-37.7515678],[144.9267273,-37.7515182],[144.9267273,-37.7514877],[144.926712,-37.7514572],[144.9267273,-37.7513695],[144.9267731,-37.7512589],[144.9268036,-37.7512283],[144.9268188,-37.7512207],[144.9268494,-37.7511673],[144.9269409,-37.7510681],[144.9271393,-37.7510872],[144.9277802,-37.7511673],[144.9284973,-37.7512474],[144.9291534,-37.7513275],[144.9294891,-37.7513695],[144.9301147,-37.7514381],[144.931076,-37.7515488],[144.9320526,-37.7516708],[144.9333649,-37.7518196],[144.9338531,-37.7518806],[144.9343109,-37.7519302],[144.9345703,-37.7519608],[144.9351807,-37.7520409],[144.9360504,-37.75214],[144.9365234,-37.7521973],[144.9372406,-37.7522774],[144.937561,-37.7523193],[144.9376678,-37.7523308],[144.9378967,-37.7523499],[144.9382324,-37.752388],[144.9387207,-37.752449],[144.9408112,-37.7526894],[144.9419556,-37.7528305],[144.9424896,-37.7528877],[144.9434204,-37.7529984],[144.9446106,-37.7531281],[144.9457397,-37.7532692],[144.9462433,-37.7533302],[144.9476318,-37.7534981],[144.9479523,-37.7535286],[144.9485779,-37.7536087],[144.9494781,-37.7537079],[144.9499207,-37.7537575],[144.9503937,-37.7538185],[144.9509888,-37.7538872],[144.9511261,-37.7539101],[144.9521637,-37.7540283],[144.9533234,-37.754158],[144.9538574,-37.7542305],[144.9538269,-37.7543182],[144.9536896,-37.7545586],[144.953598,-37.7546997],[144.9535065,-37.7547989],[144.9533997,-37.7548904],[144.9532623,-37.7549706],[144.9532013,-37.7550087],[144.9527283,-37.7552109],[144.9522095,-37.7554283],[144.9519196,-37.7555389],[144.9516907,-37.755619],[144.9511871,-37.7557793],[144.9510193,-37.7558403],[144.950943,-37.7558708],[144.9509125,-37.7558899],[144.9508667,-37.755909],[144.9508514,-37.7559204],[144.9508209,-37.7559509],[144.9508057,-37.7559586],[144.9507904,-37.7559776],[144.9507599,-37.7560081],[144.9507294,-37.7560387],[144.9507294,-37.7560501],[144.9506989,-37.7560692],[144.9506836,-37.7560997],[144.9506836,-37.7561188],[144.9506683,-37.7561607],[144.9506531,-37.7561874],[144.9506531,-37.7562294],[144.9504242,-37.75737],[144.9503021,-37.7580872],[144.9501495,-37.7589302],[144.9500732,-37.7592773],[144.9503174,-37.7593079],[144.9501801,-37.7601585],[144.9500122,-37.7610474],[144.9497375,-37.7627602],[144.9494324,-37.7645683],[144.9494324,-37.7645874],[144.9494171,-37.7646675],[144.9494019,-37.7647896],[144.9493713,-37.7650604],[144.949295,-37.7654877],[144.9491425,-37.76651],[144.9490051,-37.7672882],[144.9489594,-37.7675972],[144.9488678,-37.7681198],[144.9488525,-37.7681999],[144.9487,-37.7690277],[144.9486389,-37.7693596],[144.9485321,-37.769989],[144.948761,-37.7700195],[144.9492798,-37.7700806],[144.9498444,-37.7701492],[144.9495544,-37.7716103],[144.9493256,-37.7728271],[144.9491425,-37.773838],[144.9489594,-37.7747002],[144.9488831,-37.7751579],[144.9487915,-37.7756882],[144.9494019,-37.7767296],[144.9478912,-37.7765503],[144.9470367,-37.7764473],[144.9451294,-37.7762184],[144.9430847,-37.7759705],[144.9427032,-37.7759285],[144.9421844,-37.7758598],[144.9407959,-37.7756882],[144.9405975,-37.7756691],[144.9398041,-37.7755775],[144.9391632,-37.7754974],[144.9387512,-37.7754402],[144.9386292,-37.7756195],[144.9386139,-37.7757072],[144.9385834,-37.7757874],[144.9385223,-37.7759972],[144.9384918,-37.7761192],[144.9384003,-37.7762108],[144.9383545,-37.7762794],[144.9383392,-37.77631],[144.9382935,-37.7763786],[144.9382324,-37.7764778],[144.9382019,-37.7765884],[144.9381256,-37.7767372],[144.9380188,-37.7768593],[144.937912,-37.7769699],[144.9378357,-37.7770386],[144.9377747,-37.7770996],[144.9376984,-37.7771606],[144.9376526,-37.7771797],[144.9377289,-37.7773476],[144.9378204,-37.7775803],[144.9379425,-37.7778893],[144.9373322,-37.7778091],[144.9370728,-37.7777672],[144.9368744,-37.7772102],[144.9368134,-37.7770996],[144.9367065,-37.7767181],[144.9366302,-37.7764702],[144.9365692,-37.7762108],[144.936554,-37.7760773],[144.9364929,-37.7757187],[144.9363556,-37.774498],[144.9363251,-37.774189],[144.9363251,-37.7741089],[144.9364166,-37.7738609],[144.9364777,-37.7737885],[144.9365387,-37.7737083],[144.9366302,-37.7736092],[144.9368286,-37.7734604],[144.9372711,-37.7731209],[144.9376373,-37.7728386],[144.9377441,-37.7727394],[144.9378967,-37.7725105],[144.9383392,-37.7718773],[144.9384155,-37.7717209],[144.9384308,-37.7715492],[144.9383545,-37.7713394],[144.9382782,-37.7712173],[144.9381409,-37.7711182],[144.9379425,-37.771019],[144.9377136,-37.7709808],[144.9372253,-37.7709885],[144.9371185,-37.7709885],[144.9368896,-37.7709999],[144.9359589,-37.7710075],[144.9356689,-37.7710304],[144.9355927,-37.771019],[144.9354401,-37.7709503],[144.935318,-37.7708588],[144.9352417,-37.7707405],[144.9352112,-37.7706108],[144.9353027,-37.7702904],[144.935318,-37.7701683],[144.9353485,-37.7700577],[144.9354401,-37.7698898],[144.9356232,-37.7697372],[144.9361267,-37.7694893],[144.9363556,-37.7694206],[144.9370422,-37.7691307],[144.9372559,-37.7690392],[144.9376373,-37.7688789],[144.9377899,-37.7687378],[144.937851,-37.7686272],[144.937851,-37.7686081],[144.9378815,-37.7684784],[144.9377136,-37.7676697],[144.9376831,-37.7675781],[144.9376984,-37.7674904],[144.9377289,-37.7669907],[144.9377441,-37.7669106],[144.9377441,-37.7668571],[144.9378662,-37.7666893],[144.937973,-37.7664986],[144.9380035,-37.7662888],[144.9380798,-37.7652092],[144.9380951,-37.7649307],[144.9381561,-37.7641182],[144.9382629,-37.7627983],[144.9384155,-37.7614098],[144.9384308,-37.761158],[144.9384308,-37.7611008],[144.9384003,-37.7609177],[144.9383087,-37.7608109],[144.9381866,-37.7607307],[144.9379425,-37.7606392],[144.9376678,-37.76054],[144.9372711,-37.7603989],[144.9366608,-37.7601891],[144.9364166,-37.7601395],[144.9357758,-37.7601204],[144.9355316,-37.760128],[144.9352875,-37.7602081],[144.9347839,-37.760498],[144.9347076,-37.7605286],[144.9345398,-37.7605782],[144.9343872,-37.7605896],[144.9342194,-37.7605476],[144.934082,-37.760479],[144.9339905,-37.7603798],[144.9339294,-37.7602692],[144.9338989,-37.7601509],[144.9339294,-37.7600174],[144.934021,-37.7598572],[144.9340515,-37.7598076],[144.9340668,-37.7596893]]]}},{"type":"Feature","properties":{"SA2_NAME":"Carlton","polygonId":48,"SA3_NAME":"Melbourne City","AREASQKM":1.8185,"fillColor":"#443A83","strokeColor":"#443A83","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9643097,-37.7984772],[144.9645996,-37.7968407],[144.9647217,-37.7961578],[144.9649658,-37.7945595],[144.9649506,-37.7943802],[144.9649506,-37.794239],[144.96492,-37.7940598],[144.9648895,-37.7939301],[144.9648285,-37.7937508],[144.9647675,-37.7936172],[144.9647064,-37.793499],[144.9646149,-37.7933388],[144.9644928,-37.7931709],[144.9644928,-37.7931595],[144.964386,-37.7930489],[144.9642334,-37.7928772],[144.9640808,-37.7927399],[144.9641113,-37.7927284],[144.9642334,-37.7928009],[144.9643707,-37.7928696],[144.9645081,-37.7929306],[144.9646454,-37.7929878],[144.964798,-37.7930374],[144.9649506,-37.7930794],[144.9651031,-37.7931175],[144.9651947,-37.7931404],[144.9652557,-37.7931595],[144.9654236,-37.7931786],[144.9655762,-37.7931976],[144.9657288,-37.7932091],[144.9658966,-37.7932205],[144.9660492,-37.7932205],[144.966217,-37.7932091],[144.966629,-37.7931786],[144.9667206,-37.7931595],[144.9668427,-37.7931404],[144.96698,-37.7931175],[144.9671021,-37.7930794],[144.9672089,-37.7930489],[144.9673004,-37.7930107],[144.9674225,-37.7929573],[144.9674988,-37.7929077],[144.9676208,-37.7928391],[144.9677277,-37.7927704],[144.967804,-37.7927208],[144.9678802,-37.7926598],[144.9679718,-37.7925682],[144.9680328,-37.7924995],[144.9681091,-37.792408],[144.9681549,-37.7923393],[144.9681702,-37.7923203],[144.9682159,-37.7922897],[144.9682617,-37.7922707],[144.9683228,-37.7922592],[144.9683838,-37.7922592],[144.9689026,-37.7923088],[144.9692383,-37.7923508],[144.9696808,-37.7924004],[144.9698639,-37.792408],[144.9713287,-37.7925682],[144.97258,-37.7927094],[144.9737244,-37.7928276],[144.9747467,-37.7929382],[144.975708,-37.7930374],[144.9756012,-37.7936592],[144.9756012,-37.7937202],[144.9755402,-37.7940292],[144.9754791,-37.7943497],[144.9754333,-37.7946701],[144.9753723,-37.7949791],[144.9753113,-37.7954178],[144.9752808,-37.7955589],[144.9751434,-37.79636],[144.9750671,-37.7967796],[144.9750061,-37.7971573],[144.9748688,-37.7979507],[144.9747467,-37.7986374],[144.9747467,-37.7986908],[144.9746094,-37.799469],[144.9745331,-37.7999573],[144.9744415,-37.800518],[144.974411,-37.8006706],[144.9743195,-37.8012199],[144.9740601,-37.8026886],[144.973999,-37.8031197],[144.9738312,-37.8041077],[144.9736023,-37.805378],[144.9735565,-37.8057289],[144.9733734,-37.8067589],[144.973175,-37.8079185],[144.9713593,-37.8077202],[144.971283,-37.8075485],[144.970932,-37.8075104],[144.9688416,-37.8072891],[144.9680328,-37.8071976],[144.9673309,-37.8071289],[144.9658508,-37.8069687],[144.9651031,-37.8068886],[144.9648743,-37.8068695],[144.9643707,-37.8068085],[144.9633636,-37.8066978],[144.9628906,-37.8066483],[144.9624481,-37.8065987],[144.9618378,-37.8065376],[144.9614105,-37.806488],[144.9608002,-37.8064308],[144.9599304,-37.8063278],[144.9595032,-37.8062897],[144.9584503,-37.8040276],[144.9580536,-37.8031273],[144.9578857,-37.8027687],[144.9574432,-37.8018074],[144.9573212,-37.801548],[144.9574432,-37.8005791],[144.95755,-37.7997093],[144.9588165,-37.7998581],[144.9598999,-37.7999802],[144.9610138,-37.8001099],[144.9624939,-37.8002586],[144.9639587,-37.8004189],[144.9642029,-37.7991104],[144.9642792,-37.7986298],[144.9643097,-37.7984772]]]}},{"type":"Feature","properties":{"SA2_NAME":"Carlton North - Princes Hill","polygonId":71,"SA3_NAME":"Yarra","AREASQKM":2.3042,"fillColor":"#443A83","strokeColor":"#443A83","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9593811,-37.7847176],[144.9595337,-37.7834778],[144.959671,-37.7824173],[144.9597473,-37.7817307],[144.9598999,-37.7805176],[144.9602203,-37.778038],[144.9614716,-37.7781906],[144.9616241,-37.7782097],[144.9624786,-37.7783089],[144.9633331,-37.7784195],[144.9639435,-37.7784882],[144.9651794,-37.7786407],[144.9659729,-37.7787399],[144.9672089,-37.7788773],[144.9677124,-37.7789383],[144.9676361,-37.7793083],[144.9680939,-37.7792282],[144.9689941,-37.7790985],[144.97052,-37.7792778],[144.971283,-37.7793808],[144.9727631,-37.7795486],[144.9733276,-37.7796173],[144.9734802,-37.7796402],[144.9746857,-37.779789],[144.9752502,-37.7798576],[144.9768982,-37.7800598],[144.9774017,-37.7801208],[144.9781036,-37.7801971],[144.9779358,-37.7810898],[144.9778748,-37.7814178],[144.9778595,-37.7814674],[144.9777374,-37.7821884],[144.9776459,-37.7826385],[144.9775696,-37.7830772],[144.9774628,-37.7837105],[144.9772034,-37.7851486],[144.9770355,-37.7859688],[144.9770203,-37.7860794],[144.9769287,-37.7865181],[144.9768829,-37.7868309],[144.9767303,-37.7876472],[144.9766388,-37.7880783],[144.9765015,-37.7887878],[144.9764099,-37.789299],[144.9763336,-37.7897072],[144.9762421,-37.7902298],[144.9759674,-37.7916489],[144.975769,-37.7927284],[144.9757385,-37.7929077],[144.975708,-37.7930374],[144.9747467,-37.7929382],[144.9737244,-37.7928276],[144.97258,-37.7927094],[144.9713287,-37.7925682],[144.9698639,-37.792408],[144.9696808,-37.7924004],[144.9692383,-37.7923508],[144.9689026,-37.7923088],[144.9683838,-37.7922592],[144.9683228,-37.7922592],[144.9682617,-37.7922707],[144.9682159,-37.7922897],[144.9681702,-37.7923203],[144.9681549,-37.7923393],[144.9681091,-37.792408],[144.9680328,-37.7924995],[144.9679718,-37.7925682],[144.9678802,-37.7926598],[144.967804,-37.7927208],[144.9677277,-37.7927704],[144.9676208,-37.7928391],[144.9674988,-37.7929077],[144.9674225,-37.7929573],[144.9673004,-37.7930107],[144.9672089,-37.7930489],[144.9671021,-37.7930794],[144.96698,-37.7931175],[144.9668427,-37.7931404],[144.9667206,-37.7931595],[144.966629,-37.7931786],[144.966217,-37.7932091],[144.9660492,-37.7932205],[144.9658966,-37.7932205],[144.9657288,-37.7932091],[144.9655762,-37.7931976],[144.9654236,-37.7931786],[144.9652557,-37.7931595],[144.9651947,-37.7931404],[144.9651031,-37.7931175],[144.9649506,-37.7930794],[144.964798,-37.7930374],[144.9646454,-37.7929878],[144.9645081,-37.7929306],[144.9643707,-37.7928696],[144.9642334,-37.7928009],[144.9641113,-37.7927284],[144.963974,-37.7926483],[144.9638824,-37.7925797],[144.9637451,-37.7924881],[144.963623,-37.7924004],[144.9634705,-37.7923279],[144.9633331,-37.7922478],[144.9633026,-37.7922401],[144.9628601,-37.7920685],[144.9625244,-37.7919884],[144.9620209,-37.7919083],[144.9616699,-37.7918892],[144.9615631,-37.7918892],[144.96138,-37.7918396],[144.9612274,-37.79179],[144.9610596,-37.791729],[144.960968,-37.7916794],[144.9607697,-37.7915878],[144.9606323,-37.7915077],[144.9604797,-37.79142],[144.9603119,-37.7912979],[144.9601898,-37.7911987],[144.960083,-37.7911072],[144.960022,-37.791069],[144.9599152,-37.7909584],[144.9597931,-37.7907982],[144.959671,-37.7906685],[144.9595642,-37.7905388],[144.9594727,-37.7903976],[144.9593811,-37.7902603],[144.9593201,-37.7901306],[144.9592743,-37.7900505],[144.9591675,-37.789978],[144.9590302,-37.7899208],[144.9588928,-37.7898903],[144.9587402,-37.7898674],[144.9588776,-37.7889481],[144.9590302,-37.7877007],[144.9590912,-37.7871284],[144.9592133,-37.7862206],[144.9592438,-37.7859383],[144.9593811,-37.7847176]]]}},{"type":"Feature","properties":{"SA2_NAME":"Coburg","polygonId":39,"SA3_NAME":"Brunswick - Coburg","AREASQKM":6.9346,"fillColor":"#404688","strokeColor":"#404688","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9484711,-37.7394981],[144.948761,-37.737648],[144.9490509,-37.7360001],[144.9491119,-37.7356186],[144.9493408,-37.73423],[144.9494629,-37.7334709],[144.949585,-37.7327805],[144.9495697,-37.7327003],[144.9494629,-37.7324982],[144.9500122,-37.7325478],[144.9512177,-37.7326698],[144.9514771,-37.7326889],[144.9524231,-37.7327805],[144.9532928,-37.7328606],[144.9541931,-37.7329483],[144.9550934,-37.7330284],[144.9553833,-37.7330589],[144.9559326,-37.7331085],[144.9565735,-37.7331696],[144.9568024,-37.7331886],[144.9576569,-37.7332687],[144.9580536,-37.7333107],[144.9585114,-37.7333488],[144.9593811,-37.733429],[144.9602356,-37.7335091],[144.9603424,-37.7335205],[144.9611359,-37.7335892],[144.9628601,-37.7337494],[144.9641724,-37.7338791],[144.9648438,-37.7339401],[144.9653473,-37.7339897],[144.9659882,-37.7340508],[144.9661102,-37.7340584],[144.9669189,-37.7341499],[144.9677429,-37.73423],[144.9678497,-37.7342682],[144.9681549,-37.7343788],[144.9698334,-37.7352295],[144.969986,-37.7352905],[144.9703522,-37.7353897],[144.9706421,-37.7354088],[144.9717102,-37.7354507],[144.9724426,-37.7354698],[144.9728851,-37.7354889],[144.9735413,-37.735508],[144.9746094,-37.7355385],[144.9751587,-37.7355576],[144.9759979,-37.7354698],[144.9768829,-37.7353401],[144.9774628,-37.7353973],[144.9776917,-37.7354202],[144.9801636,-37.7356682],[144.9812012,-37.7357788],[144.981369,-37.7357979],[144.9818726,-37.7358475],[144.9828949,-37.7359505],[144.9827881,-37.7361107],[144.982605,-37.7365189],[144.9824371,-37.7368774],[144.9819946,-37.7378387],[144.9816284,-37.7386703],[144.9813232,-37.7393608],[144.9810181,-37.7400208],[144.9797821,-37.7427483],[144.9789886,-37.7426682],[144.9789581,-37.7427292],[144.9789886,-37.7427902],[144.9789886,-37.7429504],[144.9790497,-37.7430801],[144.9792938,-37.7432175],[144.9795532,-37.7434502],[144.9797821,-37.743679],[144.980011,-37.7439384],[144.9803314,-37.7441902],[144.9805298,-37.7442589],[144.9812012,-37.7446289],[144.9815521,-37.7448502],[144.9819031,-37.7452087],[144.9820099,-37.7455101],[144.9820099,-37.7457504],[144.9819183,-37.7458992],[144.9817352,-37.7460403],[144.9815674,-37.7461205],[144.9813538,-37.7461891],[144.9810791,-37.7462082],[144.9807129,-37.7461891],[144.980484,-37.7461395],[144.9803009,-37.7461395],[144.9802094,-37.7461777],[144.9801483,-37.7462997],[144.9801636,-37.7463875],[144.9802094,-37.7464981],[144.9803619,-37.7465706],[144.9804535,-37.7466774],[144.9805603,-37.7468109],[144.9805756,-37.7469597],[144.9805298,-37.7474594],[144.980545,-37.7476082],[144.9806366,-37.7477303],[144.9810181,-37.7482872],[144.9811096,-37.7484398],[144.9812317,-37.7485275],[144.9812469,-37.7485809],[144.9812927,-37.7486191],[144.9813385,-37.7486992],[144.981369,-37.7487793],[144.981369,-37.7489586],[144.9812622,-37.7490807],[144.9807739,-37.7495003],[144.9806519,-37.74963],[144.9805908,-37.7497597],[144.9805908,-37.7498894],[144.9807129,-37.7501106],[144.9807434,-37.7501602],[144.9808197,-37.7502403],[144.980835,-37.7502708],[144.9809418,-37.7504387],[144.9811401,-37.7506104],[144.9812012,-37.7506981],[144.9812622,-37.7508087],[144.9812927,-37.7509499],[144.9813232,-37.7510376],[144.9815063,-37.7513504],[144.9816437,-37.7514877],[144.9817657,-37.7517509],[144.981781,-37.7518806],[144.9818115,-37.7520981],[144.981781,-37.7521896],[144.9815674,-37.7523804],[144.981369,-37.7524872],[144.9812622,-37.7525673],[144.9812164,-37.7525978],[144.9811401,-37.7526588],[144.9810791,-37.7526894],[144.9808197,-37.7526779],[144.9807739,-37.7526894],[144.9806213,-37.7528305],[144.9804993,-37.7529182],[144.9804535,-37.7529488],[144.9802246,-37.7530098],[144.9801178,-37.7530403],[144.97995,-37.7531586],[144.9797516,-37.7533493],[144.9794312,-37.7537575],[144.9793396,-37.7539101],[144.9792938,-37.7539978],[144.9792328,-37.7542191],[144.9792938,-37.7543678],[144.9795074,-37.7545509],[144.9795685,-37.7546196],[144.9796448,-37.7547073],[144.9796295,-37.7547684],[144.9795074,-37.7548676],[144.9794617,-37.7549706],[144.9794617,-37.7550087],[144.9794922,-37.7550697],[144.9795532,-37.7552109],[144.979599,-37.7553673],[144.9796906,-37.7556496],[144.9797821,-37.7562599],[144.9798737,-37.7564583],[144.9801636,-37.7572899],[144.9798431,-37.7572594],[144.9796906,-37.7572403],[144.9794922,-37.7572098],[144.9785004,-37.7570992],[144.977829,-37.757019],[144.9769745,-37.7569199],[144.9766083,-37.7568703],[144.9761047,-37.7568092],[144.9748535,-37.7566605],[144.9740295,-37.7565689],[144.9739227,-37.7565575],[144.9733124,-37.7564888],[144.9723206,-37.7563782],[144.9711304,-37.7562485],[144.9703979,-37.7561684],[144.9694061,-37.7560577],[144.9681091,-37.755909],[144.967514,-37.7558479],[144.9673615,-37.7558289],[144.9659882,-37.7556801],[144.9648132,-37.7555389],[144.9641113,-37.7554474],[144.9638824,-37.7554092],[144.9621735,-37.7551994],[144.961731,-37.7551498],[144.9615326,-37.7551308],[144.960083,-37.7549591],[144.9590607,-37.7548409],[144.9587097,-37.7547989],[144.9582214,-37.7547379],[144.9575195,-37.7546577],[144.9567413,-37.7545586],[144.9564514,-37.754528],[144.9557648,-37.7544479],[144.9548035,-37.7543373],[144.9539642,-37.7542381],[144.9538574,-37.7542305],[144.9533234,-37.754158],[144.9521637,-37.7540283],[144.9511261,-37.7539101],[144.9509888,-37.7538872],[144.9503937,-37.7538185],[144.9499207,-37.7537575],[144.9494781,-37.7537079],[144.9485779,-37.7536087],[144.9479523,-37.7535286],[144.9476318,-37.7534981],[144.9462433,-37.7533302],[144.9457397,-37.7532692],[144.9460754,-37.7514305],[144.9462433,-37.7505875],[144.9463806,-37.7496796],[144.946701,-37.7497177],[144.9469604,-37.7484474],[144.9472504,-37.7469101],[144.9472504,-37.7468681],[144.9470673,-37.7468491],[144.9465637,-37.7467804],[144.9468994,-37.7447701],[144.946991,-37.7443008],[144.9472046,-37.7430077],[144.9475098,-37.7412109],[144.9478302,-37.7394409],[144.9484711,-37.7394981]]]}},{"type":"Feature","properties":{"SA2_NAME":"Collingwood","polygonId":72,"SA3_NAME":"Yarra","AREASQKM":1.2671,"fillColor":"#3F4788","strokeColor":"#3F4788","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.983963,-37.8006897],[144.9840088,-37.8004303],[144.9841156,-37.7998276],[144.9842682,-37.7989502],[144.9843903,-37.7982483],[144.9843903,-37.7981606],[144.9845123,-37.7975502],[144.9845428,-37.7973595],[144.9846191,-37.7968788],[144.9846802,-37.7965698],[144.9847412,-37.7961807],[144.9847717,-37.7959709],[144.9848938,-37.7953377],[144.9850922,-37.7941589],[144.9852142,-37.794178],[144.9857178,-37.7942276],[144.9860687,-37.7942581],[144.9869232,-37.7943573],[144.9874725,-37.7944107],[144.9876862,-37.7944298],[144.9877472,-37.7944374],[144.9880066,-37.7944679],[144.9880219,-37.7944794],[144.9882507,-37.7944984],[144.9886322,-37.794529],[144.9889832,-37.7945709],[144.98909,-37.7945786],[144.9897919,-37.7946472],[144.9898834,-37.7946701],[144.9898834,-37.7946777],[144.9899292,-37.7946892],[144.9900208,-37.7947006],[144.9901276,-37.7946892],[144.9902802,-37.7947197],[144.9904633,-37.7947693],[144.9906616,-37.794838],[144.9909821,-37.7949677],[144.9914246,-37.7951584],[144.9916077,-37.7952309],[144.991806,-37.7952881],[144.9919891,-37.7953377],[144.9922028,-37.7953873],[144.992981,-37.7955284],[144.9931641,-37.795578],[144.9933319,-37.7956696],[144.9934845,-37.7958183],[144.9936066,-37.7959709],[144.9935913,-37.7960472],[144.9934235,-37.7970581],[144.9933014,-37.79776],[144.9932404,-37.7981071],[144.9931946,-37.7984505],[144.9930878,-37.7991409],[144.992981,-37.799839],[144.9929352,-37.8000679],[144.9928589,-37.8005409],[144.9928284,-37.8007202],[144.9927521,-37.8011894],[144.992691,-37.8015175],[144.9926758,-37.801609],[144.9926453,-37.8018379],[144.9925232,-37.8024902],[144.9924927,-37.8026772],[144.9923706,-37.8034973],[144.9921265,-37.8049889],[144.9917603,-37.8071594],[144.9916992,-37.807518],[144.9915924,-37.8081589],[144.9915161,-37.8086395],[144.9914093,-37.8093605],[144.9913483,-37.8097305],[144.9904175,-37.8097305],[144.9902039,-37.8097305],[144.9894257,-37.8096504],[144.9889984,-37.8096008],[144.9885254,-37.8095474],[144.9879608,-37.8094902],[144.9876099,-37.8094597],[144.9869995,-37.8093872],[144.9863892,-37.80933],[144.985611,-37.8092384],[144.9852905,-37.8092079],[144.9847412,-37.8091507],[144.9846039,-37.8091393],[144.9837799,-37.8090477],[144.9833069,-37.8089981],[144.9825439,-37.808918],[144.9827423,-37.8078308],[144.9829102,-37.8067703],[144.9829865,-37.8063698],[144.9832306,-37.8049698],[144.9833679,-37.8041382],[144.98349,-37.8034477],[144.9835205,-37.8032684],[144.9835968,-37.8027992],[144.9837036,-37.8021774],[144.9837341,-37.8020096],[144.9837799,-37.8017502],[144.9838715,-37.8012199],[144.983963,-37.8006897]]]}},{"type":"Feature","properties":{"SA2_NAME":"Docklands","polygonId":49,"SA3_NAME":"Melbourne City","AREASQKM":2.444,"fillColor":"#39568C","strokeColor":"#39568C","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.932373,-37.8192673],[144.9328613,-37.8180199],[144.9334259,-37.8164673],[144.9337311,-37.8155098],[144.9338379,-37.8151398],[144.9339447,-37.8146973],[144.934021,-37.8143578],[144.934082,-37.8138885],[144.9341278,-37.8137093],[144.9342499,-37.8129005],[144.934433,-37.8126678],[144.9346924,-37.8119087],[144.9346619,-37.8105278],[144.9346924,-37.8103104],[144.9347229,-37.8101501],[144.9350128,-37.8094482],[144.9354248,-37.8095093],[144.9359589,-37.8095703],[144.9367828,-37.8097191],[144.9372253,-37.8098373],[144.937912,-37.8100471],[144.9385071,-37.8102684],[144.9391022,-37.8105087],[144.940094,-37.8109703],[144.9408112,-37.8113289],[144.9413605,-37.8115997],[144.9420166,-37.8119507],[144.9428711,-37.8124504],[144.9430237,-37.8125],[144.9431763,-37.8125381],[144.9433289,-37.8125381],[144.943512,-37.8125191],[144.9437103,-37.812458],[144.9447021,-37.8120689],[144.944931,-37.8120499],[144.9450836,-37.8120575],[144.9452362,-37.812088],[144.9454346,-37.8118591],[144.9460144,-37.8116379],[144.9478149,-37.8109474],[144.9481049,-37.8115273],[144.9482422,-37.8116493],[144.9492798,-37.8125572],[144.9503174,-37.8134689],[144.9514313,-37.8131599],[144.9516296,-37.8136177],[144.9517975,-37.8139687],[144.951889,-37.8141479],[144.9523315,-37.8151283],[144.9527893,-37.8161087],[144.9532318,-37.8170891],[144.9536896,-37.8180809],[144.9539032,-37.8185501],[144.9541321,-37.8190575],[144.9543915,-37.8195992],[144.9546204,-37.8200874],[144.9550629,-37.8210907],[144.9551392,-37.8212585],[144.9553528,-37.8216896],[144.955719,-37.8225098],[144.9559784,-37.8230476],[144.9552612,-37.8233376],[144.9543915,-37.8235474],[144.9533234,-37.8237],[144.9521942,-37.823719],[144.9498138,-37.8235283],[144.9491882,-37.8234596],[144.948349,-37.8233681],[144.9479218,-37.8233795],[144.9479218,-37.8237572],[144.9480286,-37.8241997],[144.9480591,-37.8243103],[144.9480896,-37.8244476],[144.9481201,-37.8245583],[144.9480896,-37.824749],[144.9479675,-37.8252296],[144.9478607,-37.8252296],[144.9477234,-37.8252487],[144.9475555,-37.8252907],[144.9473419,-37.8252983],[144.9472504,-37.8252983],[144.946991,-37.8252907],[144.9462128,-37.8252373],[144.9459991,-37.8252296],[144.9451904,-37.8251381],[144.944458,-37.8250694],[144.9437408,-37.8249893],[144.9436798,-37.8249779],[144.9436035,-37.8249702],[144.9435425,-37.8249474],[144.9434814,-37.8249207],[144.9434204,-37.8248978],[144.9433594,-37.8248596],[144.9433136,-37.8248291],[144.9430389,-37.8246307],[144.9430237,-37.8246078],[144.942627,-37.8243179],[144.9423523,-37.8241005],[144.9420013,-37.8239708],[144.940506,-37.823658],[144.9398651,-37.8235207],[144.937851,-37.8230896],[144.9371338,-37.8229408],[144.9367828,-37.8228989],[144.9364929,-37.8228378],[144.9327087,-37.8220482],[144.9314728,-37.8217888],[144.9318237,-37.8208275],[144.931839,-37.8207283],[144.9321594,-37.8198586],[144.932373,-37.8192673]]]}},{"type":"Feature","properties":{"SA2_NAME":"East Melbourne","polygonId":50,"SA3_NAME":"Melbourne City","AREASQKM":2.8998,"fillColor":"#365C8D","strokeColor":"#365C8D","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9739532,-37.8133087],[144.9736176,-37.8125992],[144.9734802,-37.8123283],[144.9730377,-37.811348],[144.9727325,-37.8106804],[144.97258,-37.8103676],[144.9724731,-37.8101082],[144.9723816,-37.8099174],[144.9721375,-37.8093987],[144.9716644,-37.8083992],[144.9713593,-37.8077202],[144.973175,-37.8079185],[144.9740295,-37.8080101],[144.9747162,-37.8080788],[144.9756927,-37.8081779],[144.9758606,-37.8082008],[144.9761963,-37.808239],[144.9767761,-37.8083],[144.97789,-37.8084183],[144.9785614,-37.8084908],[144.9790039,-37.8085403],[144.9801636,-37.8086586],[144.9811401,-37.8087692],[144.9813538,-37.8087883],[144.9820404,-37.8088608],[144.9825439,-37.808918],[144.9833069,-37.8089981],[144.9837799,-37.8090477],[144.9846039,-37.8091393],[144.9847412,-37.8091507],[144.9852905,-37.8092079],[144.985611,-37.8092384],[144.9863892,-37.80933],[144.9869995,-37.8093872],[144.9876099,-37.8094597],[144.9879608,-37.8094902],[144.9885254,-37.8095474],[144.9889984,-37.8096008],[144.9894257,-37.8096504],[144.9902039,-37.8097305],[144.9904175,-37.8097305],[144.9913483,-37.8097305],[144.9911804,-37.8106194],[144.9911194,-37.8109398],[144.9910736,-37.8112488],[144.9909363,-37.8120193],[144.9909363,-37.8120308],[144.99086,-37.8124199],[144.9907837,-37.81287],[144.9906616,-37.813549],[144.9906311,-37.8137703],[144.9904785,-37.8146782],[144.990448,-37.8148079],[144.9902802,-37.8157883],[144.9902039,-37.8162575],[144.9900818,-37.8168678],[144.9900665,-37.8169594],[144.9900208,-37.8172798],[144.9900055,-37.8175507],[144.9899902,-37.817688],[144.9899597,-37.8178902],[144.9898834,-37.818409],[144.9897614,-37.8190575],[144.9897156,-37.8193398],[144.9897156,-37.8193779],[144.9896851,-37.8195572],[144.989563,-37.8202782],[144.9893341,-37.8216476],[144.9891357,-37.8227997],[144.98909,-37.8231087],[144.9890289,-37.8233986],[144.9889374,-37.8240395],[144.9888306,-37.8246193],[144.9887238,-37.8252373],[144.9886932,-37.8252983],[144.9884491,-37.8267899],[144.9883423,-37.8273697],[144.988327,-37.8274994],[144.9882355,-37.8279572],[144.9881287,-37.8285484],[144.9880524,-37.8289375],[144.9879913,-37.829258],[144.987915,-37.8296204],[144.987915,-37.82967],[144.9870911,-37.8288574],[144.986496,-37.8283081],[144.9857635,-37.8278809],[144.9850311,-37.8276787],[144.9849243,-37.8276482],[144.9839325,-37.8274689],[144.9825134,-37.8272285],[144.9811249,-37.8267975],[144.9800568,-37.8260994],[144.9793243,-37.8255081],[144.9784393,-37.8244781],[144.9774017,-37.823288],[144.9766388,-37.8231888],[144.976059,-37.8225975],[144.9746399,-37.8208885],[144.9730988,-37.8198204],[144.9716187,-37.8194084],[144.9702301,-37.8195076],[144.9684296,-37.8196182],[144.968338,-37.8194199],[144.9682922,-37.8193283],[144.9682465,-37.8192177],[144.9674225,-37.8174477],[144.9693146,-37.8168983],[144.9698944,-37.8167305],[144.9703369,-37.8166084],[144.9723816,-37.8159981],[144.9736328,-37.8156281],[144.9747314,-37.8153076],[144.9748535,-37.8152809],[144.9746399,-37.8148308],[144.9745483,-37.8146172],[144.9744415,-37.8143692],[144.9743958,-37.8143005],[144.9740906,-37.8136406],[144.9739532,-37.8133087]]]}},{"type":"Feature","properties":{"SA2_NAME":"Elwood","polygonId":60,"SA3_NAME":"Port Phillip","AREASQKM":2.553,"fillColor":"#355F8D","strokeColor":"#355F8D","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9773254,-37.8788795],[144.9773102,-37.8786774],[144.9756622,-37.878788],[144.9755707,-37.8787308],[144.9754944,-37.8786392],[144.9754639,-37.8785286],[144.9754028,-37.8783798],[144.9753571,-37.8782387],[144.9752808,-37.8780899],[144.9752197,-37.8779907],[144.975174,-37.8778305],[144.9750824,-37.8776703],[144.9749908,-37.8775406],[144.9749298,-37.8773804],[144.9748383,-37.8772278],[144.974762,-37.8770676],[144.9746704,-37.8769073],[144.9746094,-37.8767395],[144.9745636,-37.8765678],[144.9745331,-37.8764],[144.9745026,-37.8762703],[144.9768677,-37.8753395],[144.9775543,-37.8750687],[144.9779663,-37.8749084],[144.9798737,-37.8741684],[144.981369,-37.8735886],[144.9824219,-37.8731689],[144.9830627,-37.8729286],[144.983551,-37.8727379],[144.9836884,-37.8726883],[144.9843292,-37.8724403],[144.9848328,-37.8722496],[144.9859619,-37.8718185],[144.9867401,-37.8715172],[144.9873199,-37.8712997],[144.9873657,-37.8712807],[144.9879913,-37.8710403],[144.988678,-37.8707809],[144.9887695,-37.870739],[144.9894409,-37.871788],[144.9896393,-37.8721199],[144.9898529,-37.8724594],[144.9900513,-37.8727798],[144.990509,-37.8735199],[144.9907227,-37.8738289],[144.9908752,-37.8740807],[144.9911499,-37.8745193],[144.991272,-37.8747177],[144.9915771,-37.8752098],[144.9918213,-37.8755875],[144.9922333,-37.8762474],[144.992691,-37.8769989],[144.993103,-37.8776398],[144.9933014,-37.8779678],[144.9934998,-37.8782883],[144.9935913,-37.8784409],[144.9936523,-37.8785286],[144.9937439,-37.8786697],[144.9940338,-37.8791199],[144.9942932,-37.8795395],[144.9945221,-37.879879],[144.9946747,-37.8801384],[144.9949188,-37.8805389],[144.995224,-37.8810196],[144.9953918,-37.8812599],[144.9957581,-37.8818588],[144.9959412,-37.8821487],[144.9967346,-37.8834991],[144.996994,-37.8838081],[144.9963226,-37.88377],[144.9929199,-37.8833504],[144.9922638,-37.8832703],[144.9920807,-37.8842201],[144.9918976,-37.8852005],[144.9917908,-37.8857384],[144.9917603,-37.8859406],[144.9917145,-37.8861389],[144.9915314,-37.8871193],[144.9914246,-37.8876991],[144.9912109,-37.8887787],[144.9910889,-37.8894882],[144.9909515,-37.8901596],[144.99086,-37.8907089],[144.9907532,-37.8912086],[144.9906616,-37.8917274],[144.9863281,-37.8911705],[144.9852295,-37.8910294],[144.9849701,-37.8909988],[144.9849548,-37.8909378],[144.984848,-37.89077],[144.9847412,-37.8906097],[144.9846039,-37.8904572],[144.9844513,-37.8903389],[144.9843292,-37.8901787],[144.9842377,-37.8899879],[144.9841614,-37.8897972],[144.9840393,-37.8896408],[144.9839172,-37.8894806],[144.9837952,-37.889328],[144.9836578,-37.8891983],[144.9835205,-37.8890381],[144.9834137,-37.8888893],[144.9832611,-37.8887482],[144.983139,-37.8885994],[144.9828796,-37.8882904],[144.9828339,-37.8881989],[144.9827576,-37.8881378],[144.9826508,-37.8880692],[144.9823914,-37.8877907],[144.982254,-37.8876495],[144.9821167,-37.8875084],[144.9819794,-37.8873672],[144.9818268,-37.8872375],[144.9816895,-37.8871002],[144.9815674,-37.8869591],[144.9814301,-37.8868179],[144.9812927,-37.8866806],[144.9811401,-37.8865509],[144.9809875,-37.8864098],[144.980835,-37.8862801],[144.9806976,-37.8861504],[144.980545,-37.8860207],[144.980423,-37.8858795],[144.9802704,-37.8857384],[144.9801331,-37.8855972],[144.9799805,-37.8854675],[144.9798431,-37.8853302],[144.9796906,-37.8852005],[144.979538,-37.8850784],[144.9793854,-37.8849373],[144.9790802,-37.8846893],[144.9789124,-37.8845673],[144.9787598,-37.8844604],[144.9785614,-37.8843575],[144.9784088,-37.8842392],[144.9782562,-37.8841209],[144.9780731,-37.8840103],[144.9779205,-37.8838882],[144.9777679,-37.8837585],[144.9776001,-37.8836403],[144.9774323,-37.8835373],[144.9772644,-37.8834381],[144.9771729,-37.8833504],[144.9769897,-37.8832474],[144.9768066,-37.8831482],[144.9766846,-37.8830376],[144.9765778,-37.8829384],[144.9765167,-37.8829308],[144.9763794,-37.8829193],[144.9764709,-37.8828087],[144.9765472,-37.8827095],[144.9758148,-37.8822899],[144.975647,-37.8821182],[144.9756317,-37.8819275],[144.9757843,-37.8816185],[144.9758453,-37.8815384],[144.9758911,-37.8814774],[144.9759216,-37.8814278],[144.9759064,-37.8813171],[144.9758911,-37.8808975],[144.9758759,-37.8807602],[144.9758606,-37.8806],[144.9758301,-37.8804207],[144.9757996,-37.8802376],[144.9757843,-37.8800583],[144.9757538,-37.8797302],[144.9757385,-37.8795776],[144.9757233,-37.8794403],[144.975708,-37.8792801],[144.9757233,-37.8792381],[144.9757385,-37.8791275],[144.9757843,-37.8790779],[144.9758606,-37.8790207],[144.9771118,-37.8788986],[144.9773254,-37.8788795]]]}},{"type":"Feature","properties":{"SA2_NAME":"Essendon - Aberfeldie","polygonId":45,"SA3_NAME":"Essendon","AREASQKM":8.443,"fillColor":"#33628D","strokeColor":"#33628D","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.8911438,-37.74506],[144.8912659,-37.7443199],[144.891449,-37.7433472],[144.891449,-37.7431374],[144.8914642,-37.7428703],[144.8915558,-37.7421494],[144.8917999,-37.7405891],[144.891983,-37.7394295],[144.8920135,-37.7392693],[144.8920746,-37.7388992],[144.8921509,-37.7384605],[144.8922119,-37.737999],[144.8922424,-37.7378006],[144.8923035,-37.7374687],[144.8923187,-37.7373199],[144.8925018,-37.7373886],[144.8926239,-37.7366791],[144.8926697,-37.7363701],[144.8927917,-37.7355576],[144.8929291,-37.7345772],[144.8956146,-37.7348595],[144.8985901,-37.7351608],[144.9015656,-37.7354584],[144.9026642,-37.7355385],[144.9034424,-37.7355003],[144.9044189,-37.7353706],[144.90448,-37.7353592],[144.9048767,-37.73592],[144.9053955,-37.7368202],[144.9055786,-37.7371178],[144.9057312,-37.7373581],[144.9058685,-37.7375679],[144.9063416,-37.7383385],[144.9067993,-37.73909],[144.9073029,-37.7398605],[144.907959,-37.7409172],[144.9082031,-37.7413101],[144.9091949,-37.7414207],[144.9103088,-37.741539],[144.9130554,-37.7418404],[144.9138489,-37.7419205],[144.9144592,-37.7419891],[144.9155121,-37.7420998],[144.915863,-37.7421379],[144.9159393,-37.7421494],[144.9173126,-37.7422981],[144.9176025,-37.7423286],[144.9199371,-37.7425804],[144.9220428,-37.7428093],[144.9222107,-37.7428284],[144.9233398,-37.7429581],[144.9254303,-37.7431908],[144.9256287,-37.7432098],[144.9258423,-37.7432404],[144.9270935,-37.7433701],[144.9274902,-37.7434196],[144.9277496,-37.7434692],[144.9282227,-37.7434692],[144.92836,-37.7434692],[144.9288177,-37.7435379],[144.930542,-37.7437286],[144.9311829,-37.7437973],[144.9334717,-37.7440491],[144.9338531,-37.7445908],[144.9335175,-37.7446976],[144.9333649,-37.7447701],[144.9332428,-37.7448387],[144.9332123,-37.7448883],[144.9331818,-37.7449188],[144.9331512,-37.745018],[144.9331207,-37.7451096],[144.9331055,-37.7451897],[144.9330597,-37.7453079],[144.9329681,-37.7454109],[144.9328308,-37.7454605],[144.9326019,-37.7454605],[144.932312,-37.7454109],[144.9320068,-37.745369],[144.9318542,-37.7454185],[144.9317627,-37.7454376],[144.9315643,-37.7455177],[144.9311371,-37.7455482],[144.9307709,-37.7455406],[144.9303436,-37.7454987],[144.9296722,-37.745388],[144.9294128,-37.745369],[144.9291534,-37.7454185],[144.928772,-37.7455597],[144.9285431,-37.7457085],[144.9283905,-37.7458801],[144.9283752,-37.7459793],[144.92836,-37.746048],[144.9283447,-37.7462387],[144.9283295,-37.7463684],[144.9283295,-37.7464676],[144.9282837,-37.7466507],[144.9282837,-37.746788],[144.9282684,-37.7468987],[144.9282684,-37.7469902],[144.9282837,-37.7470703],[144.928299,-37.7471275],[144.92836,-37.7472],[144.9285126,-37.7472878],[144.9287109,-37.7473297],[144.9289703,-37.7473297],[144.9291229,-37.7473297],[144.929184,-37.7473907],[144.9291992,-37.7474709],[144.9291992,-37.7475471],[144.9291992,-37.7475891],[144.9291229,-37.7476692],[144.9290314,-37.7477379],[144.9289093,-37.7478485],[144.9287872,-37.7479706],[144.9287109,-37.7481003],[144.9286804,-37.7482109],[144.9286499,-37.7483101],[144.9286194,-37.7483978],[144.9285736,-37.7485008],[144.9285126,-37.7486076],[144.9284515,-37.7486992],[144.9283905,-37.7487907],[144.92836,-37.748848],[144.9282837,-37.7489281],[144.9281769,-37.74897],[144.9280396,-37.74897],[144.9278717,-37.74897],[144.9277191,-37.7489891],[144.9276276,-37.7490387],[144.9274902,-37.7491608],[144.9273987,-37.7492676],[144.9273529,-37.7494087],[144.9273071,-37.7495003],[144.9273529,-37.7495995],[144.9273987,-37.7496796],[144.9274292,-37.7497673],[144.9274597,-37.7498474],[144.927475,-37.7499809],[144.927475,-37.7501183],[144.927475,-37.7502174],[144.9274597,-37.7502785],[144.9274445,-37.7503204],[144.9273987,-37.7503891],[144.9273529,-37.7504692],[144.9273224,-37.7505302],[144.9272614,-37.7505989],[144.9272003,-37.7507172],[144.9271088,-37.7508583],[144.9270935,-37.7509384],[144.9270325,-37.750988],[144.9269867,-37.7510376],[144.9269409,-37.7510681],[144.9268494,-37.7511673],[144.9268188,-37.7512207],[144.9268036,-37.7512283],[144.9267731,-37.7512589],[144.9267273,-37.7513695],[144.926712,-37.7514572],[144.9267273,-37.7514877],[144.9267273,-37.7515182],[144.9267426,-37.7515678],[144.9267731,-37.7515984],[144.9268036,-37.7516403],[144.9268341,-37.7516975],[144.9268494,-37.7517281],[144.9268646,-37.75177],[144.9268799,-37.7517891],[144.9268799,-37.7518082],[144.9268799,-37.7518272],[144.9268951,-37.7518387],[144.9268951,-37.7518501],[144.9269714,-37.7519302],[144.9270325,-37.7519875],[144.9271088,-37.7520485],[144.9272156,-37.7521095],[144.9273376,-37.7521591],[144.9274597,-37.7521973],[144.9275818,-37.7522278],[144.9276886,-37.7522697],[144.9277496,-37.7523079],[144.9279327,-37.7524185],[144.9280396,-37.7524796],[144.9281464,-37.7525177],[144.928299,-37.7525902],[144.9283752,-37.7526093],[144.928421,-37.7526207],[144.9284515,-37.7526207],[144.9285278,-37.7525978],[144.9286041,-37.7525482],[144.9286804,-37.7524681],[144.9287415,-37.7523689],[144.9288025,-37.7522507],[144.9288788,-37.7520981],[144.9289246,-37.7520103],[144.9290009,-37.7519379],[144.9290771,-37.7519073],[144.9291534,-37.7518883],[144.9292908,-37.7519073],[144.9293518,-37.7519493],[144.9293976,-37.7519989],[144.9294434,-37.7521782],[144.9294586,-37.7522774],[144.9294739,-37.7523994],[144.9295197,-37.7525291],[144.9295502,-37.7526283],[144.9295502,-37.7526703],[144.9295807,-37.7527199],[144.929657,-37.7528381],[144.9297333,-37.7529488],[144.9297943,-37.7530289],[144.9298706,-37.7531281],[144.9299316,-37.7532272],[144.9300232,-37.7533302],[144.9301147,-37.753418],[144.930191,-37.7534981],[144.9303131,-37.7535782],[144.9304047,-37.7536278],[144.930542,-37.7536583],[144.9306335,-37.7536507],[144.9307098,-37.7536087],[144.9308014,-37.7535477],[144.9308777,-37.7535095],[144.9309387,-37.753479],[144.9309998,-37.7534409],[144.9310913,-37.7533798],[144.9311829,-37.7533493],[144.9312592,-37.7533188],[144.9313507,-37.7532997],[144.9314117,-37.7532883],[144.9314728,-37.7532806],[144.9315643,-37.7532578],[144.9316406,-37.7532501],[144.9317017,-37.7532387],[144.9317627,-37.7532196],[144.9318237,-37.7532005],[144.9319,-37.75317],[144.9320221,-37.7530708],[144.9321136,-37.7529602],[144.9321594,-37.7527885],[144.9322205,-37.7526779],[144.932312,-37.7526283],[144.932373,-37.7526207],[144.9324188,-37.7526093],[144.9324951,-37.7526207],[144.9325562,-37.7526474],[144.932663,-37.752758],[144.9328156,-37.7528801],[144.9330292,-37.7529907],[144.933197,-37.7530708],[144.9333801,-37.7531281],[144.9335632,-37.7531776],[144.9337463,-37.7532005],[144.9338837,-37.7532005],[144.934021,-37.7531891],[144.9342041,-37.7531509],[144.9343719,-37.7531204],[144.9345093,-37.753109],[144.9346008,-37.7531204],[144.9347229,-37.7531281],[144.9347992,-37.75317],[144.9348907,-37.7532272],[144.9349518,-37.7532883],[144.9350128,-37.7533798],[144.9350433,-37.7534676],[144.9349976,-37.7537003],[144.934967,-37.7539101],[144.9349518,-37.7539787],[144.9349365,-37.7540474],[144.9348907,-37.7541199],[144.9348602,-37.7541885],[144.9348145,-37.7542572],[144.9347534,-37.7543182],[144.9346771,-37.7543793],[144.9346161,-37.7544174],[144.9344788,-37.754509],[144.9344177,-37.7545395],[144.9338684,-37.7547989],[144.9337006,-37.7549095],[144.93367,-37.7549591],[144.9336395,-37.7550087],[144.933609,-37.7550697],[144.933609,-37.7551384],[144.933609,-37.7552109],[144.9336243,-37.755249],[144.93367,-37.7553291],[144.9337311,-37.7553902],[144.9337921,-37.7554474],[144.9339142,-37.7555695],[144.934021,-37.7556572],[144.9341278,-37.7557602],[144.9342041,-37.7558594],[144.9342957,-37.7559891],[144.9343719,-37.7560997],[144.934433,-37.7561989],[144.9344635,-37.7562904],[144.9345093,-37.7564087],[144.9345703,-37.756588],[144.9345703,-37.7566299],[144.9345703,-37.7566681],[144.9345703,-37.7567101],[144.9345551,-37.7567978],[144.9345245,-37.7568398],[144.934494,-37.7568779],[144.9344482,-37.7569199],[144.9344177,-37.7569389],[144.9337921,-37.7572899],[144.9337311,-37.757328],[144.933609,-37.7574272],[144.9335785,-37.7574692],[144.9335327,-37.7575378],[144.9335022,-37.7575989],[144.9334717,-37.7576485],[144.9334564,-37.7577095],[144.9334412,-37.7577591],[144.9334412,-37.7578087],[144.9334564,-37.7579575],[144.9334412,-37.7580376],[144.9334259,-37.7580986],[144.9334106,-37.7581482],[144.9333801,-37.7582092],[144.9333496,-37.7582474],[144.9333191,-37.7583008],[144.9332428,-37.7583389],[144.9330597,-37.7584877],[144.9330292,-37.7585373],[144.9329987,-37.7585907],[144.9329681,-37.7586479],[144.9329529,-37.7587204],[144.9329681,-37.7587776],[144.9329834,-37.7588577],[144.9330139,-37.7588882],[144.9331665,-37.7590179],[144.933609,-37.7592773],[144.9338074,-37.759388],[144.932663,-37.7592506],[144.9320526,-37.7591782],[144.9321289,-37.758728],[144.9298248,-37.7584801],[144.9287415,-37.758358],[144.9276123,-37.7582397],[144.9264526,-37.75811],[144.9264526,-37.7580681],[144.9252014,-37.7579384],[144.9244232,-37.7578506],[144.9236908,-37.7577705],[144.9229126,-37.757679],[144.9226074,-37.7576485],[144.9211884,-37.7574883],[144.9200439,-37.75737],[144.9198151,-37.7573395],[144.9192657,-37.7572784],[144.9189911,-37.7572479],[144.9186859,-37.7572174],[144.9170532,-37.7570305],[144.9169617,-37.757019],[144.9164734,-37.756958],[144.9162445,-37.7569275],[144.9162903,-37.7584877],[144.9162903,-37.7584991],[144.9162903,-37.7585106],[144.9162903,-37.7585907],[144.9162903,-37.7585983],[144.9162903,-37.7586288],[144.9162903,-37.7586403],[144.9162903,-37.7586594],[144.9162903,-37.7586708],[144.9163055,-37.7587509],[144.9163208,-37.7588387],[144.9163208,-37.7589073],[144.9163361,-37.7589684],[144.9163361,-37.7589798],[144.9163361,-37.7589874],[144.9163361,-37.7590179],[144.9163361,-37.7590294],[144.9163513,-37.7590675],[144.9163513,-37.759079],[144.9163513,-37.75914],[144.9163513,-37.7591705],[144.9163513,-37.7591896],[144.9163666,-37.7591972],[144.9163666,-37.7592201],[144.9163666,-37.7592278],[144.9163666,-37.7592583],[144.9163818,-37.7592697],[144.9163818,-37.7593079],[144.9163818,-37.7593498],[144.9163818,-37.7593803],[144.9163971,-37.7594109],[144.9163971,-37.7594299],[144.9163971,-37.7594376],[144.9164124,-37.7594795],[144.9164124,-37.7594986],[144.9164124,-37.7595291],[144.9164124,-37.7595596],[144.9164276,-37.7595673],[144.9164276,-37.7596092],[144.9164429,-37.7596588],[144.9164429,-37.7596893],[144.9164429,-37.7597084],[144.9164429,-37.7597389],[144.9164581,-37.7597389],[144.9164734,-37.7597885],[144.9164734,-37.7598076],[144.9164734,-37.7598495],[144.9164734,-37.7598572],[144.9164886,-37.7598877],[144.9165039,-37.7599678],[144.9165039,-37.7599792],[144.9165192,-37.7600479],[144.9165192,-37.7600899],[144.9165192,-37.7601204],[144.9165344,-37.760128],[144.9165344,-37.7601585],[144.9165497,-37.7601776],[144.9165497,-37.7601891],[144.9165649,-37.7602692],[144.9165649,-37.7602692],[144.9165802,-37.7602882],[144.9165802,-37.7603073],[144.9165802,-37.7603378],[144.9165802,-37.7603493],[144.9165802,-37.7603607],[144.9165955,-37.7603989],[144.9165955,-37.7604103],[144.9166107,-37.7604179],[144.9166107,-37.7604675],[144.9166107,-37.760479],[144.9166107,-37.7604904],[144.9166412,-37.7605476],[144.9166412,-37.7605591],[144.9166565,-37.7605972],[144.9166565,-37.7606201],[144.9166718,-37.7606583],[144.9166718,-37.7607002],[144.9166718,-37.7607079],[144.916687,-37.7607079],[144.916687,-37.7607193],[144.9160614,-37.7606583],[144.9160309,-37.7607689],[144.9159698,-37.7611275],[144.9158173,-37.7611084],[144.915863,-37.7609482],[144.9155884,-37.7608986],[144.9155731,-37.7609482],[144.9153595,-37.7609177],[144.9153442,-37.7609482],[144.9151306,-37.7609177],[144.9151154,-37.7609787],[144.9148407,-37.7609482],[144.9148712,-37.7607803],[144.9146423,-37.7607498],[144.9145813,-37.7610207],[144.9143219,-37.7609978],[144.9143219,-37.7610283],[144.9139709,-37.7609901],[144.9140015,-37.7608871],[144.9132996,-37.7608109],[144.9133148,-37.7606697],[144.9132538,-37.7606697],[144.9132233,-37.7606277],[144.9116364,-37.7604294],[144.9115906,-37.7606583],[144.9109955,-37.7605782],[144.9109192,-37.7605705],[144.9104309,-37.7605209],[144.9103851,-37.7605095],[144.910202,-37.760479],[144.9100494,-37.7604675],[144.9098206,-37.7604408],[144.90979,-37.7605705],[144.9097137,-37.7605591],[144.909256,-37.7605209],[144.9091797,-37.7608795],[144.9086304,-37.7608185],[144.9075317,-37.7607079],[144.9075317,-37.7606201],[144.9075928,-37.7603607],[144.9072571,-37.7603188],[144.9072723,-37.7601776],[144.907074,-37.7601509],[144.9069824,-37.7606506],[144.9064026,-37.7605896],[144.9052429,-37.7604599],[144.905304,-37.7601204],[144.9047394,-37.7600479],[144.9047089,-37.7600098],[144.9047394,-37.7598686],[144.9044495,-37.7598305],[144.9043884,-37.7600098],[144.9038086,-37.7599373],[144.9037323,-37.7603378],[144.9049988,-37.7616997],[144.9048309,-37.7625885],[144.9033203,-37.7623978],[144.9032288,-37.7629395],[144.9035339,-37.7629776],[144.9037933,-37.7630196],[144.9037628,-37.7631302],[144.9039612,-37.7633781],[144.9039307,-37.7635803],[144.9037933,-37.7635574],[144.9036255,-37.7644806],[144.9035492,-37.7648773],[144.9021912,-37.7647285],[144.9015656,-37.7653885],[144.9014282,-37.7652893],[144.9011993,-37.7651672],[144.9008636,-37.7650108],[144.9004517,-37.7648582],[144.9000092,-37.7647285],[144.8995209,-37.7646484],[144.8991394,-37.7646294],[144.8986359,-37.7646408],[144.8981628,-37.7646484],[144.8974915,-37.7647095],[144.8969879,-37.7647972],[144.896286,-37.7649689],[144.895752,-37.7651482],[144.895462,-37.7653198],[144.8951263,-37.7655182],[144.8947601,-37.7656784],[144.8943939,-37.7657585],[144.8940887,-37.765789],[144.8937073,-37.7657394],[144.8934174,-37.7656403],[144.8931122,-37.76548],[144.8928528,-37.7653198],[144.8925934,-37.765049],[144.892395,-37.7647095],[144.8917999,-37.7641182],[144.8914795,-37.7638397],[144.8912354,-37.7636604],[144.8910522,-37.7635193],[144.8905945,-37.7631302],[144.8901672,-37.7626991],[144.88974,-37.76231],[144.8894806,-37.7620888],[144.8891754,-37.7619591],[144.8889313,-37.761898],[144.8890686,-37.7611275],[144.8891602,-37.7611809],[144.8891907,-37.7610893],[144.889267,-37.7606277],[144.8895111,-37.7592583],[144.8896027,-37.75877],[144.8899078,-37.757],[144.8899536,-37.7567101],[144.8896332,-37.756649],[144.8896179,-37.7566376],[144.8895721,-37.7566185],[144.8895111,-37.756588],[144.8894806,-37.7565575],[144.8894653,-37.7565308],[144.8894348,-37.7564774],[144.889328,-37.7562103],[144.8891144,-37.7556877],[144.8890991,-37.7556305],[144.8890839,-37.7555504],[144.8890686,-37.7554474],[144.8890839,-37.7553482],[144.8892822,-37.754158],[144.8892975,-37.7541275],[144.8893127,-37.7541008],[144.8894653,-37.7539291],[144.8895874,-37.7532806],[144.8896332,-37.7530174],[144.889801,-37.75214],[144.8899841,-37.7511787],[144.8904266,-37.7488899],[144.8904877,-37.748539],[144.8906708,-37.7475395],[144.8908234,-37.7467995],[144.8909454,-37.7460976],[144.8911133,-37.7452202],[144.8911438,-37.74506]]]}},{"type":"Feature","properties":{"SA2_NAME":"Fitzroy","polygonId":73,"SA3_NAME":"Yarra","AREASQKM":1.378,"fillColor":"#32658E","strokeColor":"#32658E","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9750061,-37.7971573],[144.9750671,-37.7967796],[144.9751434,-37.79636],[144.9752808,-37.7955589],[144.9753113,-37.7954178],[144.9753723,-37.7949791],[144.9754333,-37.7946701],[144.9754791,-37.7943497],[144.9755402,-37.7940292],[144.9756012,-37.7937202],[144.9756012,-37.7936592],[144.975708,-37.7930374],[144.9758606,-37.7931976],[144.9762726,-37.7932396],[144.9763031,-37.7932396],[144.9767609,-37.7932892],[144.9768829,-37.7933006],[144.9772644,-37.7933388],[144.9773254,-37.7933502],[144.9775543,-37.7933693],[144.9776459,-37.7933807],[144.9777222,-37.7933884],[144.9781189,-37.7934303],[144.978241,-37.7934494],[144.9786987,-37.7934875],[144.9791412,-37.7935371],[144.9792633,-37.7935486],[144.9793854,-37.7935677],[144.9798126,-37.7936096],[144.9799652,-37.7936287],[144.9800262,-37.7936287],[144.9801788,-37.7936478],[144.9802399,-37.7936592],[144.9803009,-37.7936592],[144.9804535,-37.7936783],[144.9805145,-37.7936897],[144.9813995,-37.7937775],[144.9816284,-37.793808],[144.9825745,-37.7939072],[144.9826813,-37.7939072],[144.9828033,-37.7939186],[144.983902,-37.7940407],[144.9849701,-37.7941475],[144.9850922,-37.7941589],[144.9848938,-37.7953377],[144.9847717,-37.7959709],[144.9847412,-37.7961807],[144.9846802,-37.7965698],[144.9846191,-37.7968788],[144.9845428,-37.7973595],[144.9845123,-37.7975502],[144.9843903,-37.7981606],[144.9843903,-37.7982483],[144.9842682,-37.7989502],[144.9841156,-37.7998276],[144.9840088,-37.8004303],[144.983963,-37.8006897],[144.9838715,-37.8012199],[144.9837799,-37.8017502],[144.9837341,-37.8020096],[144.9837036,-37.8021774],[144.9835968,-37.8027992],[144.9835205,-37.8032684],[144.98349,-37.8034477],[144.9833679,-37.8041382],[144.9832306,-37.8049698],[144.9829865,-37.8063698],[144.9829102,-37.8067703],[144.9827423,-37.8078308],[144.9825439,-37.808918],[144.9820404,-37.8088608],[144.9813538,-37.8087883],[144.9811401,-37.8087692],[144.9801636,-37.8086586],[144.9790039,-37.8085403],[144.9785614,-37.8084908],[144.97789,-37.8084183],[144.9767761,-37.8083],[144.9761963,-37.808239],[144.9758606,-37.8082008],[144.9756927,-37.8081779],[144.9747162,-37.8080788],[144.9740295,-37.8080101],[144.973175,-37.8079185],[144.9733734,-37.8067589],[144.9735565,-37.8057289],[144.9736023,-37.805378],[144.9738312,-37.8041077],[144.973999,-37.8031197],[144.9740601,-37.8026886],[144.9743195,-37.8012199],[144.974411,-37.8006706],[144.9744415,-37.800518],[144.9745331,-37.7999573],[144.9746094,-37.799469],[144.9747467,-37.7986908],[144.9747467,-37.7986374],[144.9748688,-37.7979507],[144.9750061,-37.7971573]]]}},{"type":"Feature","properties":{"SA2_NAME":"Fitzroy North","polygonId":74,"SA3_NAME":"Yarra","AREASQKM":2.5051,"fillColor":"#32658E","strokeColor":"#32658E","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9781036,-37.7801971],[144.9781189,-37.7800674],[144.9781494,-37.7798691],[144.9781952,-37.7795906],[144.9782104,-37.7794991],[144.9782104,-37.7794075],[144.9782104,-37.7792282],[144.978241,-37.779068],[144.9784088,-37.7780609],[144.9785614,-37.7772179],[144.978714,-37.7762489],[144.9788513,-37.7754478],[144.9788818,-37.7752991],[144.9789429,-37.7748985],[144.9790039,-37.774559],[144.979187,-37.7734909],[144.9797211,-37.7735481],[144.9803925,-37.7736206],[144.9806824,-37.7736473],[144.9808655,-37.7736702],[144.9811096,-37.7737007],[144.9815063,-37.7737389],[144.9816284,-37.7737503],[144.9824524,-37.773838],[144.9833984,-37.7739372],[144.9833832,-37.7740898],[144.9851837,-37.7743073],[144.9857635,-37.7743797],[144.9858398,-37.7743378],[144.9866028,-37.7744293],[144.9867096,-37.7743492],[144.9868622,-37.7743683],[144.9870911,-37.7746582],[144.9872437,-37.7747498],[144.9873657,-37.7748604],[144.9875793,-37.7749176],[144.9879608,-37.77491],[144.9882355,-37.774929],[144.9885101,-37.7750778],[144.9885864,-37.7751579],[144.9886627,-37.7753372],[144.9886322,-37.7757072],[144.9885559,-37.7758598],[144.9884796,-37.7760582],[144.9884796,-37.7762184],[144.9885101,-37.7763977],[144.9885712,-37.7765503],[144.9886932,-37.7767906],[144.9888,-37.7769203],[144.9890594,-37.7771072],[144.9891052,-37.7771492],[144.989212,-37.7772408],[144.9893951,-37.7773781],[144.9894562,-37.7774696],[144.9895172,-37.7775383],[144.9896393,-37.777729],[144.9897308,-37.7778702],[144.9897614,-37.7779694],[144.9898224,-37.7781601],[144.9898529,-37.7782898],[144.9898529,-37.778389],[144.9898529,-37.7784195],[144.9898834,-37.7785301],[144.9899139,-37.7790375],[144.9899292,-37.7792587],[144.9899597,-37.7793274],[144.9900208,-37.7795296],[144.990097,-37.7796478],[144.9903564,-37.7798386],[144.9906616,-37.7799377],[144.9908447,-37.7799683],[144.9912109,-37.7800179],[144.9914398,-37.7800484],[144.9917145,-37.7801208],[144.9917603,-37.7801476],[144.9918671,-37.7802391],[144.9919891,-37.780468],[144.9919891,-37.780529],[144.9919739,-37.7807007],[144.9918823,-37.7809486],[144.9918213,-37.7810593],[144.991806,-37.7812195],[144.9918365,-37.7815781],[144.9919586,-37.7820091],[144.9919586,-37.7823486],[144.9920044,-37.7825279],[144.9921112,-37.7826309],[144.9922333,-37.7826805],[144.9923706,-37.7827301],[144.9925842,-37.7828484],[144.9931793,-37.7830086],[144.9933014,-37.7830505],[144.9936829,-37.7832298],[144.9941711,-37.7835274],[144.9945526,-37.7838593],[144.994751,-37.7840004],[144.9952393,-37.7844505],[144.9955902,-37.7846909],[144.9951019,-37.7851486],[144.9951782,-37.7852287],[144.9954681,-37.7856293],[144.9956207,-37.7859993],[144.9957123,-37.7865486],[144.9956665,-37.7868385],[144.995636,-37.7869873],[144.9952698,-37.7871208],[144.9950562,-37.7871399],[144.9947205,-37.7872276],[144.9922791,-37.7880287],[144.9920502,-37.7881088],[144.9919739,-37.7881775],[144.99086,-37.7886391],[144.9889984,-37.7894173],[144.9876404,-37.789978],[144.9872437,-37.7901497],[144.9868011,-37.7903404],[144.9864197,-37.7904892],[144.985672,-37.7907982],[144.9854584,-37.7920074],[144.9853821,-37.7924004],[144.9851837,-37.7936172],[144.9850922,-37.7941589],[144.9849701,-37.7941475],[144.983902,-37.7940407],[144.9828033,-37.7939186],[144.9826813,-37.7939072],[144.9825745,-37.7939072],[144.9816284,-37.793808],[144.9813995,-37.7937775],[144.9805145,-37.7936897],[144.9804535,-37.7936783],[144.9803009,-37.7936592],[144.9802399,-37.7936592],[144.9801788,-37.7936478],[144.9800262,-37.7936287],[144.9799652,-37.7936287],[144.9798126,-37.7936096],[144.9793854,-37.7935677],[144.9792633,-37.7935486],[144.9791412,-37.7935371],[144.9786987,-37.7934875],[144.978241,-37.7934494],[144.9781189,-37.7934303],[144.9777222,-37.7933884],[144.9776459,-37.7933807],[144.9775543,-37.7933693],[144.9773254,-37.7933502],[144.9772644,-37.7933388],[144.9768829,-37.7933006],[144.9767609,-37.7932892],[144.9763031,-37.7932396],[144.9762726,-37.7932396],[144.9758606,-37.7931976],[144.975708,-37.7930374],[144.9757385,-37.7929077],[144.975769,-37.7927284],[144.9759674,-37.7916489],[144.9762421,-37.7902298],[144.9763336,-37.7897072],[144.9764099,-37.789299],[144.9765015,-37.7887878],[144.9766388,-37.7880783],[144.9767303,-37.7876472],[144.9768829,-37.7868309],[144.9769287,-37.7865181],[144.9770203,-37.7860794],[144.9770355,-37.7859688],[144.9772034,-37.7851486],[144.9774628,-37.7837105],[144.9775696,-37.7830772],[144.9776459,-37.7826385],[144.9777374,-37.7821884],[144.9778595,-37.7814674],[144.9778748,-37.7814178],[144.9779358,-37.7810898],[144.9781036,-37.7801971]]]}},{"type":"Feature","properties":{"SA2_NAME":"Flemington","polygonId":46,"SA3_NAME":"Essendon","AREASQKM":1.5808,"fillColor":"#32658E","strokeColor":"#32658E","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9220276,-37.7837105],[144.9221497,-37.7829704],[144.9221802,-37.7827492],[144.922226,-37.7825089],[144.9222717,-37.7822495],[144.9223633,-37.7816582],[144.9224091,-37.7813492],[144.9225006,-37.78088],[144.9225922,-37.7803497],[144.9229584,-37.7803879],[144.9230347,-37.7803993],[144.9231873,-37.7804108],[144.9232788,-37.7804184],[144.9232788,-37.7803879],[144.9233551,-37.7803993],[144.9232941,-37.7807198],[144.9237518,-37.7807693],[144.9238434,-37.7807693],[144.9244537,-37.7808304],[144.9244995,-37.7804909],[144.9251099,-37.7805481],[144.9251709,-37.7801971],[144.9261322,-37.7802887],[144.9264221,-37.7803192],[144.9265289,-37.7804604],[144.9265289,-37.7804604],[144.9265442,-37.7804794],[144.9265442,-37.7804794],[144.9265594,-37.7804985],[144.9265594,-37.7805099],[144.92659,-37.780529],[144.92659,-37.7805405],[144.9266052,-37.7805595],[144.9266205,-37.7805672],[144.9266205,-37.7805786],[144.9266357,-37.7805977],[144.9266663,-37.7806396],[144.9266815,-37.7806587],[144.9266968,-37.7806778],[144.9267731,-37.7806702],[144.927063,-37.7806091],[144.9275818,-37.7810898],[144.927597,-37.7809486],[144.9278107,-37.7809792],[144.9278717,-37.7809792],[144.9279938,-37.7809982],[144.9282532,-37.7810173],[144.9282532,-37.7810898],[144.928299,-37.7811089],[144.9283295,-37.7809601],[144.9284058,-37.7809677],[144.928421,-37.7808495],[144.9284973,-37.7808609],[144.9288483,-37.7808876],[144.9289551,-37.7809105],[144.9290771,-37.7809296],[144.9292755,-37.7809486],[144.9293518,-37.7809601],[144.9293365,-37.7810593],[144.9295654,-37.7810783],[144.9295502,-37.7811394],[144.9296875,-37.7811508],[144.9296722,-37.7811775],[144.9296417,-37.7814484],[144.9297638,-37.7814598],[144.930191,-37.7815094],[144.9303894,-37.7815285],[144.9304504,-37.7812576],[144.930481,-37.7810593],[144.9307404,-37.7810783],[144.9307404,-37.7811279],[144.9307709,-37.7812996],[144.931015,-37.7813187],[144.9310303,-37.7813492],[144.9311829,-37.7813606],[144.9312286,-37.7813683],[144.9312286,-37.7813492],[144.9312592,-37.7811699],[144.9316406,-37.781208],[144.9316559,-37.7812004],[144.9317169,-37.7808495],[144.932312,-37.7809105],[144.9315948,-37.7800407],[144.9312897,-37.7796593],[144.9310455,-37.7793694],[144.9306183,-37.77882],[144.9303589,-37.7784691],[144.9301453,-37.7781372],[144.9299011,-37.7777596],[144.9304047,-37.7774887],[144.9303589,-37.77742],[144.9300842,-37.7770309],[144.9302368,-37.77705],[144.9307556,-37.7771072],[144.9309235,-37.7771301],[144.9312592,-37.7771606],[144.9316101,-37.7771988],[144.9321136,-37.7772598],[144.9324799,-37.777298],[144.9330139,-37.777359],[144.9336395,-37.7774391],[144.933609,-37.7774086],[144.9348602,-37.7775574],[144.9349365,-37.7775192],[144.9356689,-37.7776108],[144.9370728,-37.7777672],[144.9377136,-37.7791405],[144.9387207,-37.7808495],[144.9389496,-37.7815704],[144.9390106,-37.7817688],[144.9391632,-37.7825775],[144.93927,-37.7833977],[144.9394836,-37.7843399],[144.939621,-37.7849388],[144.9398956,-37.7855492],[144.9401703,-37.7860985],[144.9402618,-37.786438],[144.9402771,-37.7866592],[144.9402008,-37.7868309],[144.9399109,-37.7870102],[144.9400635,-37.7872009],[144.9403534,-37.7876091],[144.9393158,-37.7881279],[144.938385,-37.7887878],[144.9381866,-37.7889709],[144.9378204,-37.7889404],[144.9370422,-37.7888489],[144.9362793,-37.7887688],[144.9360504,-37.7887497],[144.934967,-37.7886276],[144.9346008,-37.7885895],[144.9343414,-37.788559],[144.9337921,-37.7885094],[144.9331512,-37.7884407],[144.9329987,-37.7884178],[144.9322205,-37.7883377],[144.9321594,-37.7883301],[144.9320831,-37.7883377],[144.9317322,-37.7883873],[144.9314575,-37.7883606],[144.9311523,-37.7883301],[144.9296875,-37.7881775],[144.9294739,-37.7881508],[144.9291687,-37.7881203],[144.9274902,-37.7879372],[144.9273224,-37.7879181],[144.9266663,-37.7878494],[144.9266357,-37.7878494],[144.9252319,-37.7877007],[144.9243011,-37.7875977],[144.9233856,-37.7874985],[144.9225311,-37.7874107],[144.9224548,-37.7873993],[144.9212952,-37.7874489],[144.9192505,-37.7853203],[144.9185486,-37.7845879],[144.9182129,-37.7842407],[144.9176025,-37.7836075],[144.9193115,-37.783638],[144.9203339,-37.7836685],[144.9205627,-37.78368],[144.9220276,-37.7837105]]]}},{"type":"Feature","properties":{"SA2_NAME":"Flemington Racecourse","polygonId":51,"SA3_NAME":"Melbourne City","AREASQKM":1.7093,"fillColor":"#32658E","strokeColor":"#32658E","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9108429,-37.7809906],[144.9116516,-37.7805176],[144.9135742,-37.7793884],[144.9145203,-37.7803879],[144.9147339,-37.7805786],[144.9148102,-37.7806587],[144.9151001,-37.7809601],[144.9159698,-37.781868],[144.9169617,-37.7829399],[144.9173126,-37.7833099],[144.9176025,-37.7836075],[144.9182129,-37.7842407],[144.9185486,-37.7845879],[144.9192505,-37.7853203],[144.9212952,-37.7874489],[144.9217224,-37.7878799],[144.9227905,-37.7890396],[144.9229126,-37.7891388],[144.922821,-37.7891808],[144.9224091,-37.7894402],[144.9217072,-37.7898788],[144.920639,-37.7905388],[144.9204407,-37.7906685],[144.9198151,-37.791069],[144.9171906,-37.7926979],[144.9163818,-37.79319],[144.9149628,-37.7940788],[144.9138641,-37.7947578],[144.9129486,-37.7951393],[144.9129181,-37.7951584],[144.9128265,-37.7951088],[144.9124756,-37.7949295],[144.9118195,-37.7946701],[144.9112091,-37.7944603],[144.9109344,-37.7943802],[144.910553,-37.7942696],[144.9100189,-37.7941399],[144.9094849,-37.7940102],[144.9089966,-37.7938805],[144.9083862,-37.7937088],[144.9079895,-37.7935371],[144.9075928,-37.7933006],[144.9072113,-37.7931099],[144.9068146,-37.7929192],[144.9062805,-37.7926903],[144.9056244,-37.7924576],[144.9049377,-37.7921791],[144.9045715,-37.7920609],[144.904129,-37.7918777],[144.9038391,-37.7917404],[144.9035797,-37.7915802],[144.9033203,-37.7913704],[144.9030609,-37.7910576],[144.9028778,-37.7907486],[144.902771,-37.7903595],[144.90271,-37.7899475],[144.9026947,-37.7897606],[144.90271,-37.78965],[144.9035339,-37.7892799],[144.904007,-37.7889481],[144.9042511,-37.7887077],[144.9044037,-37.7884598],[144.9045563,-37.7881699],[144.9046936,-37.7879105],[144.9048004,-37.7876396],[144.9048309,-37.78759],[144.9048615,-37.787468],[144.9049377,-37.7872086],[144.904953,-37.7871475],[144.9063263,-37.7873878],[144.9064636,-37.7868385],[144.9065399,-37.7860184],[144.9066315,-37.7855492],[144.9066925,-37.7852783],[144.9067535,-37.785038],[144.9068298,-37.7847977],[144.9069366,-37.7845383],[144.9070435,-37.7842903],[144.9071655,-37.7840309],[144.9073029,-37.7837906],[144.9074554,-37.7835388],[144.9075928,-37.7833176],[144.9077606,-37.7830887],[144.9078827,-37.7829399],[144.9079895,-37.7828178],[144.9081116,-37.7826805],[144.9082184,-37.7825584],[144.9082336,-37.7825279],[144.9108429,-37.7809906]]]}},{"type":"Feature","properties":{"SA2_NAME":"Kensington (Vic.)","polygonId":52,"SA3_NAME":"Melbourne City","AREASQKM":2.147,"fillColor":"#24878E","strokeColor":"#24878E","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9217072,-37.7898788],[144.9224091,-37.7894402],[144.922821,-37.7891808],[144.9229126,-37.7891388],[144.9227905,-37.7890396],[144.9217224,-37.7878799],[144.9212952,-37.7874489],[144.9224548,-37.7873993],[144.9225311,-37.7874107],[144.9233856,-37.7874985],[144.9243011,-37.7875977],[144.9252319,-37.7877007],[144.9266357,-37.7878494],[144.9266663,-37.7878494],[144.9273224,-37.7879181],[144.9274902,-37.7879372],[144.9291687,-37.7881203],[144.9294739,-37.7881508],[144.9296875,-37.7881775],[144.9311523,-37.7883301],[144.9314575,-37.7883606],[144.9317322,-37.7883873],[144.9320831,-37.7883377],[144.9321594,-37.7883301],[144.9322205,-37.7883377],[144.9329987,-37.7884178],[144.9331512,-37.7884407],[144.9337921,-37.7885094],[144.9343414,-37.788559],[144.9346008,-37.7885895],[144.934967,-37.7886276],[144.9360504,-37.7887497],[144.9362793,-37.7887688],[144.9370422,-37.7888489],[144.9378204,-37.7889404],[144.9378052,-37.7889404],[144.9377747,-37.7889786],[144.9377594,-37.7889786],[144.9377594,-37.7889977],[144.9377289,-37.7890205],[144.9377136,-37.7890396],[144.9376984,-37.7890472],[144.9376831,-37.7890701],[144.9376526,-37.7890892],[144.9376526,-37.7891083],[144.9376373,-37.7891083],[144.9376068,-37.7891388],[144.9375916,-37.7891693],[144.9375763,-37.7891808],[144.937561,-37.7891884],[144.9375458,-37.7892075],[144.9375305,-37.7892189],[144.9375305,-37.7892303],[144.9375153,-37.789238],[144.9375,-37.7892609],[144.9374847,-37.7892799],[144.9374695,-37.7892799],[144.9374695,-37.789299],[144.937439,-37.7893105],[144.937439,-37.7893181],[144.937439,-37.7893372],[144.9374237,-37.7893372],[144.9374237,-37.78936],[144.9373932,-37.7893791],[144.9373932,-37.7893906],[144.9373932,-37.7893906],[144.9373627,-37.7894173],[144.9373627,-37.7894173],[144.9373322,-37.7894478],[144.9373322,-37.7894478],[144.9373169,-37.7894707],[144.9373169,-37.7894707],[144.9373016,-37.7894897],[144.9372711,-37.7895203],[144.9372711,-37.7895279],[144.9372406,-37.7895584],[144.9372253,-37.7895775],[144.9372101,-37.789608],[144.9372101,-37.7896194],[144.9371796,-37.7896385],[144.9371796,-37.7896576],[144.9371338,-37.7896996],[144.9371033,-37.7897377],[144.9371033,-37.7897491],[144.937088,-37.7897797],[144.9370728,-37.7897797],[144.9370728,-37.7897873],[144.9370575,-37.7898178],[144.9370422,-37.7898293],[144.9370422,-37.7898407],[144.937027,-37.7898598],[144.9370117,-37.7898674],[144.9370117,-37.7898903],[144.9369965,-37.7898979],[144.9369812,-37.7899284],[144.9369507,-37.789959],[144.9369507,-37.789959],[144.9369507,-37.7899704],[144.9369354,-37.7899895],[144.9369202,-37.7900009],[144.9369202,-37.7900085],[144.9369202,-37.7900276],[144.9368896,-37.7900505],[144.9368896,-37.7900581],[144.9368896,-37.7900696],[144.9368896,-37.7900696],[144.9368744,-37.7900772],[144.9368591,-37.7901077],[144.9368591,-37.7901192],[144.9368439,-37.7901497],[144.9368134,-37.7901993],[144.9367981,-37.7902184],[144.9367981,-37.7902298],[144.9367523,-37.7903099],[144.9367523,-37.7903175],[144.9367371,-37.7903404],[144.9367218,-37.7903595],[144.9367065,-37.79039],[144.9366913,-37.7903976],[144.9366913,-37.7904282],[144.936676,-37.7904472],[144.9366608,-37.7904778],[144.9366608,-37.7904892],[144.9366455,-37.7905197],[144.9366302,-37.7905273],[144.9366302,-37.7905502],[144.936615,-37.7905807],[144.9365997,-37.7905884],[144.9365845,-37.7906303],[144.9365845,-37.790638],[144.9365692,-37.7906685],[144.9365692,-37.7906876],[144.936554,-37.7907372],[144.9365387,-37.7907486],[144.9365234,-37.7907677],[144.9365234,-37.7907982],[144.9365082,-37.7908287],[144.9365082,-37.7908401],[144.9364929,-37.7908478],[144.9364929,-37.7908783],[144.9364777,-37.7908974],[144.9364624,-37.7909279],[144.9364624,-37.7909698],[144.9364471,-37.7910004],[144.9364319,-37.791008],[144.9364319,-37.7910385],[144.9364166,-37.7910576],[144.9364014,-37.7911072],[144.9364014,-37.7911186],[144.9364014,-37.7911377],[144.9363861,-37.7911491],[144.9363708,-37.7911873],[144.9363708,-37.7911873],[144.9363556,-37.7912483],[144.9363556,-37.7912598],[144.9363556,-37.7912674],[144.9363403,-37.7913208],[144.9363403,-37.7913399],[144.9363251,-37.7913475],[144.9363251,-37.7913589],[144.9363098,-37.7913895],[144.9363098,-37.7914085],[144.9363098,-37.79142],[144.9362946,-37.7914886],[144.9362946,-37.7915077],[144.9362793,-37.7915382],[144.9362793,-37.7915497],[144.9362793,-37.7915878],[144.9362793,-37.7915993],[144.9362488,-37.7916489],[144.9362488,-37.7916679],[144.9362488,-37.7917175],[144.9362488,-37.7917404],[144.9362335,-37.7918587],[144.9359589,-37.7933273],[144.9356689,-37.7950706],[144.9358368,-37.7950783],[144.9358063,-37.79533],[144.9358215,-37.7958794],[144.9358215,-37.7960205],[144.9358521,-37.7963295],[144.9358826,-37.7966309],[144.9359131,-37.7967987],[144.9362946,-37.7983208],[144.9363708,-37.7986908],[144.9363708,-37.7989273],[144.9362793,-37.7994003],[144.936264,-37.7994576],[144.9360352,-37.7994308],[144.9359131,-37.799408],[144.9358978,-37.7994804],[144.9358215,-37.7999992],[144.9358521,-37.8004494],[144.9359741,-37.8008385],[144.936203,-37.8013191],[144.9362488,-37.8017082],[144.9360352,-37.8020897],[144.9359741,-37.8021698],[144.9358978,-37.8022804],[144.9341888,-37.8014107],[144.9323578,-37.8008194],[144.9296417,-37.8001785],[144.9276428,-37.799839],[144.9271851,-37.7996483],[144.9260406,-37.799469],[144.9258118,-37.7994385],[144.9256592,-37.7995605],[144.9220428,-37.7990379],[144.9197235,-37.7987099],[144.9164886,-37.7982101],[144.9164734,-37.798008],[144.9163208,-37.7975998],[144.9160309,-37.7972374],[144.9156799,-37.7968979],[144.9152832,-37.7965393],[144.9151917,-37.7964783],[144.9146423,-37.7960892],[144.9139099,-37.79562],[144.9134674,-37.7953682],[144.9129181,-37.7951584],[144.9129486,-37.7951393],[144.9138641,-37.7947578],[144.9149628,-37.7940788],[144.9163818,-37.79319],[144.9171906,-37.7926979],[144.9198151,-37.791069],[144.9204407,-37.7906685],[144.920639,-37.7905388],[144.9217072,-37.7898788]]]}},{"type":"Feature","properties":{"SA2_NAME":"Melbourne","polygonId":53,"SA3_NAME":"Melbourne City","AREASQKM":2.369,"fillColor":"#1F9F88","strokeColor":"#1F9F88","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9648743,-37.8068695],[144.9651031,-37.8068886],[144.9658508,-37.8069687],[144.9673309,-37.8071289],[144.9680328,-37.8071976],[144.9688416,-37.8072891],[144.970932,-37.8075104],[144.971283,-37.8075485],[144.9713593,-37.8077202],[144.9716644,-37.8083992],[144.9721375,-37.8093987],[144.9723816,-37.8099174],[144.9724731,-37.8101082],[144.97258,-37.8103676],[144.9727325,-37.8106804],[144.9730377,-37.811348],[144.9734802,-37.8123283],[144.9736176,-37.8125992],[144.9739532,-37.8133087],[144.9740906,-37.8136406],[144.9743958,-37.8143005],[144.9744415,-37.8143692],[144.9745483,-37.8146172],[144.9746399,-37.8148308],[144.9748535,-37.8152809],[144.9747314,-37.8153076],[144.9736328,-37.8156281],[144.9723816,-37.8159981],[144.9703369,-37.8166084],[144.9698944,-37.8167305],[144.9693146,-37.8168983],[144.9674225,-37.8174477],[144.9682465,-37.8192177],[144.9679718,-37.8192406],[144.9671631,-37.8193283],[144.9664001,-37.8194504],[144.9663086,-37.819458],[144.9653778,-37.8196106],[144.9647675,-37.8197098],[144.9644165,-37.8197594],[144.9636688,-37.8199196],[144.9630127,-37.8200989],[144.96138,-37.8205109],[144.9606171,-37.8207474],[144.9599915,-37.8210373],[144.9590302,-37.8215103],[144.9580688,-37.8219681],[144.95784,-37.8220787],[144.9569092,-37.8225899],[144.9559784,-37.8230476],[144.955719,-37.8225098],[144.9553528,-37.8216896],[144.9551392,-37.8212585],[144.9550629,-37.8210907],[144.9546204,-37.8200874],[144.9543915,-37.8195992],[144.9541321,-37.8190575],[144.9539032,-37.8185501],[144.9536896,-37.8180809],[144.9532318,-37.8170891],[144.9527893,-37.8161087],[144.9523315,-37.8151283],[144.951889,-37.8141479],[144.9517975,-37.8139687],[144.9516296,-37.8136177],[144.9514313,-37.8131599],[144.951889,-37.8130302],[144.9526672,-37.812809],[144.9530792,-37.8126907],[144.9533234,-37.8126183],[144.9539185,-37.812458],[144.9542694,-37.8123589],[144.9549408,-37.8121681],[144.9564362,-37.8117485],[144.9560394,-37.8109093],[144.9559326,-37.8106689],[144.9554596,-37.8096504],[144.9553833,-37.8094788],[144.9555817,-37.8082695],[144.9556732,-37.8077202],[144.9559784,-37.8058701],[144.9571075,-37.8059998],[144.958252,-37.8061409],[144.9584503,-37.8061409],[144.9595032,-37.8062897],[144.9599304,-37.8063278],[144.9608002,-37.8064308],[144.9614105,-37.806488],[144.9618378,-37.8065376],[144.9624481,-37.8065987],[144.9628906,-37.8066483],[144.9633636,-37.8066978],[144.9643707,-37.8068085],[144.9648743,-37.8068695]]]}},{"type":"Feature","properties":{"SA2_NAME":"Moonee Ponds","polygonId":47,"SA3_NAME":"Essendon","AREASQKM":4.3551,"fillColor":"#21A685","strokeColor":"#21A685","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9048309,-37.7625885],[144.9049988,-37.7616997],[144.9037323,-37.7603378],[144.9038086,-37.7599373],[144.9043884,-37.7600098],[144.9044495,-37.7598305],[144.9047394,-37.7598686],[144.9047089,-37.7600098],[144.9047394,-37.7600479],[144.905304,-37.7601204],[144.9052429,-37.7604599],[144.9064026,-37.7605896],[144.9069824,-37.7606506],[144.907074,-37.7601509],[144.9072723,-37.7601776],[144.9072571,-37.7603188],[144.9075928,-37.7603607],[144.9075317,-37.7606201],[144.9075317,-37.7607079],[144.9086304,-37.7608185],[144.9091797,-37.7608795],[144.909256,-37.7605209],[144.9097137,-37.7605591],[144.90979,-37.7605705],[144.9098206,-37.7604408],[144.9100494,-37.7604675],[144.910202,-37.760479],[144.9103851,-37.7605095],[144.9104309,-37.7605209],[144.9109192,-37.7605705],[144.9109955,-37.7605782],[144.9115906,-37.7606583],[144.9116364,-37.7604294],[144.9132233,-37.7606277],[144.9132538,-37.7606697],[144.9133148,-37.7606697],[144.9132996,-37.7608109],[144.9140015,-37.7608871],[144.9139709,-37.7609901],[144.9143219,-37.7610283],[144.9143219,-37.7609978],[144.9145813,-37.7610207],[144.9146423,-37.7607498],[144.9148712,-37.7607803],[144.9148407,-37.7609482],[144.9151154,-37.7609787],[144.9151306,-37.7609177],[144.9153442,-37.7609482],[144.9153595,-37.7609177],[144.9155731,-37.7609482],[144.9155884,-37.7608986],[144.915863,-37.7609482],[144.9158173,-37.7611084],[144.9159698,-37.7611275],[144.9160309,-37.7607689],[144.9160614,-37.7606583],[144.916687,-37.7607193],[144.916687,-37.7607079],[144.9166718,-37.7607079],[144.9166718,-37.7607002],[144.9166718,-37.7606583],[144.9166565,-37.7606201],[144.9166565,-37.7605972],[144.9166412,-37.7605591],[144.9166412,-37.7605476],[144.9166107,-37.7604904],[144.9166107,-37.760479],[144.9166107,-37.7604675],[144.9166107,-37.7604179],[144.9165955,-37.7604103],[144.9165955,-37.7603989],[144.9165802,-37.7603607],[144.9165802,-37.7603493],[144.9165802,-37.7603378],[144.9165802,-37.7603073],[144.9165802,-37.7602882],[144.9165649,-37.7602692],[144.9165649,-37.7602692],[144.9165497,-37.7601891],[144.9165497,-37.7601776],[144.9165344,-37.7601585],[144.9165344,-37.760128],[144.9165192,-37.7601204],[144.9165192,-37.7600899],[144.9165192,-37.7600479],[144.9165039,-37.7599792],[144.9165039,-37.7599678],[144.9164886,-37.7598877],[144.9164734,-37.7598572],[144.9164734,-37.7598495],[144.9164734,-37.7598076],[144.9164734,-37.7597885],[144.9164581,-37.7597389],[144.9164429,-37.7597389],[144.9164429,-37.7597084],[144.9164429,-37.7596893],[144.9164429,-37.7596588],[144.9164276,-37.7596092],[144.9164276,-37.7595673],[144.9164124,-37.7595596],[144.9164124,-37.7595291],[144.9164124,-37.7594986],[144.9164124,-37.7594795],[144.9163971,-37.7594376],[144.9163971,-37.7594299],[144.9163971,-37.7594109],[144.9163818,-37.7593803],[144.9163818,-37.7593498],[144.9163818,-37.7593079],[144.9163818,-37.7592697],[144.9163666,-37.7592583],[144.9163666,-37.7592278],[144.9163666,-37.7592201],[144.9163666,-37.7591972],[144.9163513,-37.7591896],[144.9163513,-37.7591705],[144.9163513,-37.75914],[144.9163513,-37.759079],[144.9163513,-37.7590675],[144.9163361,-37.7590294],[144.9163361,-37.7590179],[144.9163361,-37.7589874],[144.9163361,-37.7589798],[144.9163361,-37.7589684],[144.9163208,-37.7589073],[144.9163208,-37.7588387],[144.9163055,-37.7587509],[144.9162903,-37.7586708],[144.9162903,-37.7586594],[144.9162903,-37.7586403],[144.9162903,-37.7586288],[144.9162903,-37.7585983],[144.9162903,-37.7585907],[144.9162903,-37.7585106],[144.9162903,-37.7584991],[144.9162903,-37.7584877],[144.9162445,-37.7569275],[144.9164734,-37.756958],[144.9169617,-37.757019],[144.9170532,-37.7570305],[144.9186859,-37.7572174],[144.9189911,-37.7572479],[144.9192657,-37.7572784],[144.9198151,-37.7573395],[144.9200439,-37.75737],[144.9211884,-37.7574883],[144.9226074,-37.7576485],[144.9229126,-37.757679],[144.9236908,-37.7577705],[144.9244232,-37.7578506],[144.9252014,-37.7579384],[144.9264526,-37.7580681],[144.9264526,-37.75811],[144.9276123,-37.7582397],[144.9287415,-37.758358],[144.9298248,-37.7584801],[144.9321289,-37.758728],[144.9320526,-37.7591782],[144.932663,-37.7592506],[144.9338074,-37.759388],[144.9339905,-37.7594986],[144.9340515,-37.7595596],[144.9340668,-37.7596893],[144.9340515,-37.7598076],[144.934021,-37.7598572],[144.9339294,-37.7600174],[144.9338989,-37.7601509],[144.9339294,-37.7602692],[144.9339905,-37.7603798],[144.934082,-37.760479],[144.9342194,-37.7605476],[144.9343872,-37.7605896],[144.9345398,-37.7605782],[144.9347076,-37.7605286],[144.9347839,-37.760498],[144.9352875,-37.7602081],[144.9355316,-37.760128],[144.9357758,-37.7601204],[144.9364166,-37.7601395],[144.9366608,-37.7601891],[144.9372711,-37.7603989],[144.9376678,-37.76054],[144.9379425,-37.7606392],[144.9381866,-37.7607307],[144.9383087,-37.7608109],[144.9384003,-37.7609177],[144.9384308,-37.7611008],[144.9384308,-37.761158],[144.9384155,-37.7614098],[144.9382629,-37.7627983],[144.9381561,-37.7641182],[144.9380951,-37.7649307],[144.9380798,-37.7652092],[144.9380035,-37.7662888],[144.937973,-37.7664986],[144.9378662,-37.7666893],[144.9377441,-37.7668571],[144.9377441,-37.7669106],[144.9377289,-37.7669907],[144.9376984,-37.7674904],[144.9376831,-37.7675781],[144.9377136,-37.7676697],[144.9378815,-37.7684784],[144.937851,-37.7686081],[144.937851,-37.7686272],[144.9377899,-37.7687378],[144.9376373,-37.7688789],[144.9372559,-37.7690392],[144.9370422,-37.7691307],[144.9363556,-37.7694206],[144.9361267,-37.7694893],[144.9356232,-37.7697372],[144.9354401,-37.7698898],[144.9353485,-37.7700577],[144.935318,-37.7701683],[144.9353027,-37.7702904],[144.9352112,-37.7706108],[144.9352417,-37.7707405],[144.935318,-37.7708588],[144.9354401,-37.7709503],[144.9355927,-37.771019],[144.9356689,-37.7710304],[144.9359589,-37.7710075],[144.9368896,-37.7709999],[144.9371185,-37.7709885],[144.9372253,-37.7709885],[144.9377136,-37.7709808],[144.9379425,-37.771019],[144.9381409,-37.7711182],[144.9382782,-37.7712173],[144.9383545,-37.7713394],[144.9384308,-37.7715492],[144.9384155,-37.7717209],[144.9383392,-37.7718773],[144.9378967,-37.7725105],[144.9377441,-37.7727394],[144.9376373,-37.7728386],[144.9372711,-37.7731209],[144.9368286,-37.7734604],[144.9366302,-37.7736092],[144.9365387,-37.7737083],[144.9364777,-37.7737885],[144.9357605,-37.7735786],[144.9351501,-37.7734184],[144.9349518,-37.7733803],[144.9347534,-37.7733498],[144.9345856,-37.7733307],[144.9344025,-37.7733192],[144.934021,-37.7732773],[144.9336548,-37.7732391],[144.9320831,-37.7730675],[144.9319916,-37.7730598],[144.9303284,-37.7728882],[144.9302521,-37.7728806],[144.9276428,-37.7725983],[144.9274292,-37.7725792],[144.9272614,-37.7725983],[144.9268799,-37.7726288],[144.9269257,-37.7727585],[144.9264374,-37.7728195],[144.9263153,-37.7728081],[144.9252625,-37.7726974],[144.9239197,-37.7725601],[144.9231567,-37.77248],[144.9219208,-37.7723503],[144.920639,-37.7722092],[144.9195557,-37.7720985],[144.9183502,-37.7719688],[144.9180908,-37.7719383],[144.9167328,-37.7717896],[144.9161682,-37.7717285],[144.9154816,-37.7716599],[144.9150238,-37.7715988],[144.9148102,-37.7715797],[144.913681,-37.7714577],[144.9125214,-37.771328],[144.9114227,-37.7711983],[144.9111328,-37.7711678],[144.9106598,-37.7711182],[144.9102936,-37.77108],[144.9100494,-37.7710495],[144.9091492,-37.7709503],[144.908844,-37.7709198],[144.90802,-37.7708282],[144.907486,-37.7707672],[144.9066315,-37.770668],[144.9051971,-37.7705078],[144.9040833,-37.7703781],[144.903595,-37.7703285],[144.9024963,-37.7701988],[144.9009399,-37.7700195],[144.901062,-37.769989],[144.9014282,-37.7698708],[144.9017334,-37.7697372],[144.9019318,-37.7696075],[144.9020844,-37.7694283],[144.9021912,-37.7692299],[144.9022522,-37.7689705],[144.9022675,-37.7688179],[144.9022827,-37.7686691],[144.9022064,-37.7683601],[144.9020386,-37.76754],[144.9019775,-37.7672501],[144.901947,-37.7669792],[144.901886,-37.7663879],[144.9018707,-37.7660904],[144.9018402,-37.7658501],[144.9017639,-37.7656288],[144.9016418,-37.7654381],[144.9015656,-37.7653885],[144.9021912,-37.7647285],[144.9035492,-37.7648773],[144.9036255,-37.7644806],[144.9037933,-37.7635574],[144.9039307,-37.7635803],[144.9039612,-37.7633781],[144.9037628,-37.7631302],[144.9037933,-37.7630196],[144.9035339,-37.7629776],[144.9032288,-37.7629395],[144.9033203,-37.7623978],[144.9048309,-37.7625885]]]}},{"type":"Feature","properties":{"SA2_NAME":"North Melbourne","polygonId":54,"SA3_NAME":"Melbourne City","AREASQKM":3.2492,"fillColor":"#35B779","strokeColor":"#35B779","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.936264,-37.7994576],[144.9362793,-37.7994003],[144.9363708,-37.7989273],[144.9363708,-37.7986908],[144.9362946,-37.7983208],[144.9359131,-37.7967987],[144.9358826,-37.7966309],[144.9358521,-37.7963295],[144.9358215,-37.7960205],[144.9358215,-37.7958794],[144.9358063,-37.79533],[144.9358368,-37.7950783],[144.9356689,-37.7950706],[144.9359589,-37.7933273],[144.9362335,-37.7918587],[144.9362488,-37.7917404],[144.9362488,-37.7917175],[144.9362488,-37.7916679],[144.9362488,-37.7916489],[144.9362793,-37.7915993],[144.9362793,-37.7915878],[144.9362793,-37.7915497],[144.9362793,-37.7915382],[144.9362946,-37.7915077],[144.9362946,-37.7914886],[144.9363098,-37.79142],[144.9363098,-37.7914085],[144.9363098,-37.7913895],[144.9363251,-37.7913589],[144.9363251,-37.7913475],[144.9363403,-37.7913399],[144.9363403,-37.7913208],[144.9363556,-37.7912674],[144.9363556,-37.7912598],[144.9363556,-37.7912483],[144.9363708,-37.7911873],[144.9363708,-37.7911873],[144.9363861,-37.7911491],[144.9364014,-37.7911377],[144.9364014,-37.7911186],[144.9364014,-37.7911072],[144.9364166,-37.7910576],[144.9364319,-37.7910385],[144.9364319,-37.791008],[144.9364471,-37.7910004],[144.9364624,-37.7909698],[144.9364624,-37.7909279],[144.9364777,-37.7908974],[144.9364929,-37.7908783],[144.9364929,-37.7908478],[144.9365082,-37.7908401],[144.9365082,-37.7908287],[144.9365234,-37.7907982],[144.9365234,-37.7907677],[144.9365387,-37.7907486],[144.936554,-37.7907372],[144.9365692,-37.7906876],[144.9365692,-37.7906685],[144.9365845,-37.790638],[144.9365845,-37.7906303],[144.9365997,-37.7905884],[144.936615,-37.7905807],[144.9366302,-37.7905502],[144.9366302,-37.7905273],[144.9366455,-37.7905197],[144.9366608,-37.7904892],[144.9366608,-37.7904778],[144.936676,-37.7904472],[144.9366913,-37.7904282],[144.9366913,-37.7903976],[144.9367065,-37.79039],[144.9367218,-37.7903595],[144.9367371,-37.7903404],[144.9367523,-37.7903175],[144.9367523,-37.7903099],[144.9367981,-37.7902298],[144.9367981,-37.7902184],[144.9368134,-37.7901993],[144.9368439,-37.7901497],[144.9368591,-37.7901192],[144.9368591,-37.7901077],[144.9368744,-37.7900772],[144.9368896,-37.7900696],[144.9368896,-37.7900696],[144.9368896,-37.7900581],[144.9368896,-37.7900505],[144.9369202,-37.7900276],[144.9369202,-37.7900085],[144.9369202,-37.7900009],[144.9369354,-37.7899895],[144.9369507,-37.7899704],[144.9369507,-37.789959],[144.9369507,-37.789959],[144.9369812,-37.7899284],[144.9369965,-37.7898979],[144.9370117,-37.7898903],[144.9370117,-37.7898674],[144.937027,-37.7898598],[144.9370422,-37.7898407],[144.9370422,-37.7898293],[144.9370575,-37.7898178],[144.9370728,-37.7897873],[144.9370728,-37.7897797],[144.937088,-37.7897797],[144.9371033,-37.7897491],[144.9371033,-37.7897377],[144.9371338,-37.7896996],[144.9371796,-37.7896576],[144.9371796,-37.7896385],[144.9372101,-37.7896194],[144.9372101,-37.789608],[144.9372253,-37.7895775],[144.9372406,-37.7895584],[144.9372711,-37.7895279],[144.9372711,-37.7895203],[144.9373016,-37.7894897],[144.9373169,-37.7894707],[144.9373169,-37.7894707],[144.9373322,-37.7894478],[144.9373322,-37.7894478],[144.9373627,-37.7894173],[144.9373627,-37.7894173],[144.9373932,-37.7893906],[144.9373932,-37.7893906],[144.9373932,-37.7893791],[144.9374237,-37.78936],[144.9374237,-37.7893372],[144.937439,-37.7893372],[144.937439,-37.7893181],[144.937439,-37.7893105],[144.9374695,-37.789299],[144.9374695,-37.7892799],[144.9374847,-37.7892799],[144.9375,-37.7892609],[144.9375153,-37.789238],[144.9375305,-37.7892303],[144.9375305,-37.7892189],[144.9375458,-37.7892075],[144.937561,-37.7891884],[144.9375763,-37.7891808],[144.9375916,-37.7891693],[144.9376068,-37.7891388],[144.9376373,-37.7891083],[144.9376526,-37.7891083],[144.9376526,-37.7890892],[144.9376831,-37.7890701],[144.9376984,-37.7890472],[144.9377136,-37.7890396],[144.9377289,-37.7890205],[144.9377594,-37.7889977],[144.9377594,-37.7889786],[144.9377747,-37.7889786],[144.9378052,-37.7889404],[144.9378204,-37.7889404],[144.9381866,-37.7889709],[144.938385,-37.7887878],[144.9393158,-37.7881279],[144.9403534,-37.7876091],[144.9404907,-37.7878189],[144.9408722,-37.7883606],[144.9409943,-37.7884598],[144.9417114,-37.7890396],[144.9421539,-37.7893982],[144.9428864,-37.789978],[144.9432831,-37.7902908],[144.9444427,-37.7912178],[144.9457092,-37.7922173],[144.9465027,-37.7928581],[144.9474487,-37.7936096],[144.9484253,-37.7943878],[144.9486542,-37.7945709],[144.9488678,-37.7947502],[144.9492798,-37.7950706],[144.9497986,-37.7954788],[144.9511871,-37.7965889],[144.9515839,-37.7968979],[144.9520721,-37.7972908],[144.9521027,-37.7973175],[144.952652,-37.7977486],[144.9529114,-37.7979584],[144.953598,-37.7985077],[144.9539642,-37.7987976],[144.9545135,-37.7992401],[144.9550323,-37.7996483],[144.9560852,-37.8004875],[144.9566345,-37.80093],[144.9568176,-37.8010902],[144.9570923,-37.8013687],[144.9573212,-37.801548],[144.9574432,-37.8018074],[144.9578857,-37.8027687],[144.9580536,-37.8031273],[144.9584503,-37.8040276],[144.9595032,-37.8062897],[144.9584503,-37.8061409],[144.958252,-37.8061409],[144.9571075,-37.8059998],[144.9559784,-37.8058701],[144.9556732,-37.8077202],[144.9555817,-37.8082695],[144.9553833,-37.8094788],[144.9554596,-37.8096504],[144.9559326,-37.8106689],[144.9560394,-37.8109093],[144.9564362,-37.8117485],[144.9549408,-37.8121681],[144.9542694,-37.8123589],[144.9539185,-37.812458],[144.9533234,-37.8126183],[144.9530792,-37.8126907],[144.9526672,-37.812809],[144.951889,-37.8130302],[144.9514313,-37.8131599],[144.9503174,-37.8134689],[144.9492798,-37.8125572],[144.9482422,-37.8116493],[144.9481049,-37.8115273],[144.9478149,-37.8109474],[144.9460144,-37.8116379],[144.9459686,-37.8115692],[144.9456024,-37.8111076],[144.9451904,-37.8105888],[144.9447632,-37.8100586],[144.9443359,-37.8095207],[144.9438324,-37.8088875],[144.9433594,-37.8082695],[144.9428101,-37.8075676],[144.942627,-37.8073196],[144.9420013,-37.80653],[144.9418945,-37.8063202],[144.9418335,-37.8061485],[144.9414368,-37.8058395],[144.9412994,-37.8057098],[144.9412079,-37.8055992],[144.9410248,-37.805378],[144.9394989,-37.8043404],[144.937851,-37.8030777],[144.9365234,-37.8025589],[144.9358978,-37.8022804],[144.9359741,-37.8021698],[144.9360352,-37.8020897],[144.9362488,-37.8017082],[144.936203,-37.8013191],[144.9359741,-37.8008385],[144.9358521,-37.8004494],[144.9358215,-37.7999992],[144.9358978,-37.7994804],[144.9359131,-37.799408],[144.9360352,-37.7994308],[144.936264,-37.7994576]]]}},{"type":"Feature","properties":{"SA2_NAME":"Northcote","polygonId":42,"SA3_NAME":"Darebin - South","AREASQKM":6.145,"fillColor":"#37B878","strokeColor":"#37B878","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9844666,-37.7675095],[144.9844666,-37.7673302],[144.9845123,-37.767189],[144.9847717,-37.7669792],[144.9848938,-37.7669373],[144.9851532,-37.766819],[144.9855652,-37.7664185],[144.9855499,-37.7661972],[144.9854889,-37.7660103],[144.9852142,-37.765728],[144.9848022,-37.7654076],[144.9843445,-37.7651291],[144.9842834,-37.765049],[144.9841919,-37.7649574],[144.9839783,-37.7646484],[144.9838867,-37.7641106],[144.9838257,-37.7639809],[144.9836426,-37.7638397],[144.9835205,-37.7637978],[144.983078,-37.7636604],[144.9824982,-37.7636375],[144.9822693,-37.763588],[144.9819183,-37.7633896],[144.9816895,-37.7631989],[144.9815521,-37.762989],[144.9814453,-37.7628288],[144.981369,-37.7626305],[144.981369,-37.7623787],[144.9815674,-37.7622108],[144.9818573,-37.7621384],[144.9821014,-37.7621307],[144.9824677,-37.7621574],[144.9826202,-37.7621078],[144.9828491,-37.7620506],[144.9830322,-37.7619476],[144.983139,-37.7618179],[144.9831543,-37.7615585],[144.9830322,-37.7614174],[144.9828339,-37.7612572],[144.9824982,-37.7609596],[144.9820862,-37.7606277],[144.9818573,-37.7603073],[144.9816132,-37.7599106],[144.9813843,-37.7595482],[144.9811401,-37.7591896],[144.9809418,-37.7588882],[144.9808502,-37.75877],[144.9806366,-37.7583275],[144.9804535,-37.7580376],[144.9802551,-37.7576981],[144.9802094,-37.7574196],[144.9801636,-37.7572899],[144.9806824,-37.7573509],[144.9837494,-37.7577209],[144.9844971,-37.7577972],[144.98526,-37.7578773],[144.9854126,-37.7578773],[144.9879913,-37.7581787],[144.9878082,-37.7590981],[144.9876251,-37.7600479],[144.9875031,-37.7607307],[144.987442,-37.7610779],[144.987381,-37.7613602],[144.9873657,-37.7614288],[144.992691,-37.7620506],[144.9927521,-37.7617989],[144.993454,-37.761879],[144.994339,-37.7619781],[144.9950104,-37.7620583],[144.995224,-37.7620888],[144.9956665,-37.7621384],[144.9963531,-37.7622185],[144.9969025,-37.7622795],[144.9977112,-37.7624397],[144.998764,-37.762558],[144.9992828,-37.762619],[144.9993439,-37.7626305],[144.9999084,-37.7626877],[144.9998016,-37.7632599],[145.0003052,-37.7633095],[145.0004272,-37.7633209],[145.0010223,-37.7633896],[145.0018616,-37.7634773],[145.0023193,-37.7635307],[145.0027924,-37.763588],[145.0032196,-37.7636299],[145.0042419,-37.7637482],[145.0053711,-37.7638702],[145.006546,-37.7639999],[145.0075073,-37.7641106],[145.0087585,-37.7642479],[145.0104523,-37.7644272],[145.0122528,-37.7646179],[145.015976,-37.7650185],[145.0170288,-37.7651291],[145.0168762,-37.7660179],[145.0166931,-37.7670975],[145.0177917,-37.7672081],[145.0176239,-37.7681885],[145.0175323,-37.7687073],[145.0174103,-37.7687492],[145.0170135,-37.7687073],[145.0169525,-37.7686501],[145.016861,-37.7692986],[145.0167694,-37.7698402],[145.0167389,-37.7700195],[145.0166626,-37.7704887],[145.0166016,-37.7708282],[145.0165863,-37.7709274],[145.01651,-37.7713699],[145.0164948,-37.7714081],[145.0164795,-37.7715378],[145.0164642,-37.7716179],[145.0164185,-37.7719078],[145.0163574,-37.7723083],[145.0162811,-37.7727585],[145.0162659,-37.7728081],[145.0162659,-37.7728195],[145.0162506,-37.7729073],[145.0162048,-37.7732086],[145.0161133,-37.7737198],[145.016098,-37.7738304],[145.0160675,-37.7740593],[145.015564,-37.7739983],[145.015564,-37.7740898],[145.0152588,-37.7757874],[145.0152435,-37.7758789],[145.0152435,-37.7759705],[145.0149689,-37.7773285],[145.0147247,-37.7786407],[145.0158539,-37.7787704],[145.0157776,-37.7791672],[145.0151978,-37.7791672],[145.0151672,-37.7793808],[145.0149231,-37.7807808],[145.0149231,-37.7808685],[145.0149078,-37.7809601],[145.0148315,-37.7813187],[145.0147247,-37.7820396],[145.0145874,-37.7828674],[145.0144958,-37.78339],[145.0143738,-37.7833595],[145.0143738,-37.7833786],[145.0143738,-37.7833672],[145.0142975,-37.7838287],[145.0128021,-37.7841072],[145.0125732,-37.7841492],[145.0123138,-37.7841873],[145.0122528,-37.7841873],[145.0120697,-37.7842102],[145.0118103,-37.7842293],[145.0115662,-37.7842407],[145.0113068,-37.7842407],[145.0110626,-37.7842293],[145.010849,-37.7842178],[145.0108032,-37.7842178],[145.0103607,-37.7841873],[145.0101929,-37.7841682],[145.0100403,-37.7841492],[145.009613,-37.7840691],[145.0093689,-37.7840309],[145.00914,-37.7840004],[145.0088959,-37.7839699],[145.008667,-37.7839508],[145.0083923,-37.7839279],[145.0081329,-37.7839088],[145.0078583,-37.7838974],[145.0075684,-37.7838974],[145.0072937,-37.7838974],[145.0069885,-37.7839203],[145.0066833,-37.7839394],[145.0063782,-37.7839584],[145.006073,-37.7840004],[145.0059204,-37.7840195],[145.0057831,-37.7840385],[145.0054932,-37.7840881],[145.005188,-37.7841377],[145.0047913,-37.7842293],[145.0042114,-37.784359],[145.0039978,-37.7840691],[145.0037231,-37.7837296],[145.0035095,-37.7834778],[145.0034027,-37.7833672],[145.0031433,-37.7832184],[145.0027771,-37.7830505],[145.0026093,-37.7830009],[145.0022888,-37.7829895],[145.0018005,-37.7830582],[145.0016785,-37.7831306],[145.0014191,-37.7833786],[145.0011444,-37.7837181],[145.0009308,-37.7839394],[145.0007935,-37.7841072],[145.0005798,-37.7843208],[145.0005341,-37.7843704],[145.000351,-37.7845573],[144.9999237,-37.7848396],[144.9995117,-37.7851295],[144.9989777,-37.785408],[144.9987335,-37.7854691],[144.9985199,-37.7855377],[144.9982452,-37.7856102],[144.997818,-37.7856293],[144.9975281,-37.7855682],[144.9971924,-37.7854576],[144.9964447,-37.7852402],[144.9963837,-37.7851982],[144.9963531,-37.7851906],[144.9962158,-37.7851181],[144.996048,-37.7850189],[144.9958191,-37.7848396],[144.9956207,-37.7847099],[144.9955902,-37.7846909],[144.9952393,-37.7844505],[144.994751,-37.7840004],[144.9945526,-37.7838593],[144.9941711,-37.7835274],[144.9936829,-37.7832298],[144.9933014,-37.7830505],[144.9931793,-37.7830086],[144.9925842,-37.7828484],[144.9923706,-37.7827301],[144.9922333,-37.7826805],[144.9921112,-37.7826309],[144.9920044,-37.7825279],[144.9919586,-37.7823486],[144.9919586,-37.7820091],[144.9918365,-37.7815781],[144.991806,-37.7812195],[144.9918213,-37.7810593],[144.9918823,-37.7809486],[144.9919739,-37.7807007],[144.9919891,-37.780529],[144.9919891,-37.780468],[144.9918671,-37.7802391],[144.9917603,-37.7801476],[144.9917145,-37.7801208],[144.9914398,-37.7800484],[144.9912109,-37.7800179],[144.9908447,-37.7799683],[144.9906616,-37.7799377],[144.9903564,-37.7798386],[144.990097,-37.7796478],[144.9900208,-37.7795296],[144.9899597,-37.7793274],[144.9899292,-37.7792587],[144.9899139,-37.7790375],[144.9898834,-37.7785301],[144.9898529,-37.7784195],[144.9898529,-37.778389],[144.9898529,-37.7782898],[144.9898224,-37.7781601],[144.9897614,-37.7779694],[144.9897308,-37.7778702],[144.9896393,-37.777729],[144.9895172,-37.7775383],[144.9894562,-37.7774696],[144.9893951,-37.7773781],[144.989212,-37.7772408],[144.9891052,-37.7771492],[144.9890594,-37.7771072],[144.9888,-37.7769203],[144.9886932,-37.7767906],[144.9885712,-37.7765503],[144.9885101,-37.7763977],[144.9884796,-37.7762184],[144.9884796,-37.7760582],[144.9885559,-37.7758598],[144.9886322,-37.7757072],[144.9886627,-37.7753372],[144.9885864,-37.7751579],[144.9885101,-37.7750778],[144.9882355,-37.774929],[144.9879608,-37.77491],[144.9875793,-37.7749176],[144.9873657,-37.7748604],[144.9872437,-37.7747498],[144.9870911,-37.7746582],[144.9868622,-37.7743683],[144.9868317,-37.773838],[144.9868011,-37.7737083],[144.9866333,-37.773468],[144.9864502,-37.7732277],[144.9861603,-37.7729301],[144.9857788,-37.7725983],[144.9855347,-37.7723579],[144.9854279,-37.7722473],[144.9850311,-37.7719002],[144.9848633,-37.7716789],[144.9845123,-37.7713394],[144.9844513,-37.7712288],[144.9842529,-37.7707405],[144.9841919,-37.7703285],[144.9841614,-37.7700996],[144.9841461,-37.7697983],[144.9842072,-37.7696609],[144.9842224,-37.769558],[144.9842224,-37.7694206],[144.9842529,-37.7691498],[144.9843597,-37.7685089],[144.9844055,-37.7681808],[144.9844513,-37.7677383],[144.9844666,-37.7675095]]]}},{"type":"Feature","properties":{"SA2_NAME":"Parkville","polygonId":55,"SA3_NAME":"Melbourne City","AREASQKM":4.0492,"fillColor":"#46C06F","strokeColor":"#46C06F","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9389496,-37.7815704],[144.9387207,-37.7808495],[144.9377136,-37.7791405],[144.9370728,-37.7777672],[144.9373322,-37.7778091],[144.9379425,-37.7778893],[144.9378204,-37.7775803],[144.9377289,-37.7773476],[144.9376526,-37.7771797],[144.9376984,-37.7771606],[144.9377747,-37.7770996],[144.9378357,-37.7770386],[144.937912,-37.7769699],[144.9380188,-37.7768593],[144.9381256,-37.7767372],[144.9382019,-37.7765884],[144.9382324,-37.7764778],[144.9382935,-37.7763786],[144.9383392,-37.77631],[144.9383545,-37.7762794],[144.9384003,-37.7762108],[144.9384918,-37.7761192],[144.9385223,-37.7759972],[144.9385834,-37.7757874],[144.9386139,-37.7757072],[144.9386292,-37.7756195],[144.9387512,-37.7754402],[144.9391632,-37.7754974],[144.9398041,-37.7755775],[144.9405975,-37.7756691],[144.9407959,-37.7756882],[144.9421844,-37.7758598],[144.9427032,-37.7759285],[144.9430847,-37.7759705],[144.9451294,-37.7762184],[144.9470367,-37.7764473],[144.9478912,-37.7765503],[144.9494019,-37.7767296],[144.9494324,-37.7767372],[144.949646,-37.7767601],[144.9502869,-37.7768402],[144.9516602,-37.7770081],[144.9523926,-37.7770882],[144.9531403,-37.7771873],[144.9541626,-37.7773094],[144.9551239,-37.77742],[144.9564514,-37.7775879],[144.9580841,-37.7777786],[144.959259,-37.7779198],[144.9598999,-37.7779999],[144.9602203,-37.778038],[144.9598999,-37.7805176],[144.9597473,-37.7817307],[144.959671,-37.7824173],[144.9595337,-37.7834778],[144.9593811,-37.7847176],[144.9592438,-37.7859383],[144.9592133,-37.7862206],[144.9590912,-37.7871284],[144.9590302,-37.7877007],[144.9588776,-37.7889481],[144.9587402,-37.7898674],[144.9588928,-37.7898903],[144.9590302,-37.7899208],[144.9591675,-37.789978],[144.9592743,-37.7900505],[144.9593201,-37.7901306],[144.9593811,-37.7902603],[144.9594727,-37.7903976],[144.9595642,-37.7905388],[144.959671,-37.7906685],[144.9597931,-37.7907982],[144.9599152,-37.7909584],[144.960022,-37.791069],[144.960083,-37.7911072],[144.9601898,-37.7911987],[144.9603119,-37.7912979],[144.9604797,-37.79142],[144.9606323,-37.7915077],[144.9607697,-37.7915878],[144.960968,-37.7916794],[144.9610596,-37.791729],[144.9612274,-37.79179],[144.96138,-37.7918396],[144.9615631,-37.7918892],[144.9616699,-37.7918892],[144.9620209,-37.7919083],[144.9625244,-37.7919884],[144.9628601,-37.7920685],[144.9633026,-37.7922401],[144.9633331,-37.7922478],[144.9634705,-37.7923279],[144.963623,-37.7924004],[144.9637451,-37.7924881],[144.9638824,-37.7925797],[144.963974,-37.7926483],[144.9641113,-37.7927284],[144.9640808,-37.7927399],[144.9642334,-37.7928772],[144.964386,-37.7930489],[144.9644928,-37.7931595],[144.9644928,-37.7931709],[144.9646149,-37.7933388],[144.9647064,-37.793499],[144.9647675,-37.7936172],[144.9648285,-37.7937508],[144.9648895,-37.7939301],[144.96492,-37.7940598],[144.9649506,-37.794239],[144.9649506,-37.7943802],[144.9649658,-37.7945595],[144.9647217,-37.7961578],[144.9645996,-37.7968407],[144.9643097,-37.7984772],[144.9642792,-37.7986298],[144.9642029,-37.7991104],[144.9639587,-37.8004189],[144.9624939,-37.8002586],[144.9610138,-37.8001099],[144.9598999,-37.7999802],[144.9588165,-37.7998581],[144.95755,-37.7997093],[144.9574432,-37.8005791],[144.9573212,-37.801548],[144.9570923,-37.8013687],[144.9568176,-37.8010902],[144.9566345,-37.80093],[144.9560852,-37.8004875],[144.9550323,-37.7996483],[144.9545135,-37.7992401],[144.9539642,-37.7987976],[144.953598,-37.7985077],[144.9529114,-37.7979584],[144.952652,-37.7977486],[144.9521027,-37.7973175],[144.9520721,-37.7972908],[144.9515839,-37.7968979],[144.9511871,-37.7965889],[144.9497986,-37.7954788],[144.9492798,-37.7950706],[144.9488678,-37.7947502],[144.9486542,-37.7945709],[144.9484253,-37.7943878],[144.9474487,-37.7936096],[144.9465027,-37.7928581],[144.9457092,-37.7922173],[144.9444427,-37.7912178],[144.9432831,-37.7902908],[144.9428864,-37.789978],[144.9421539,-37.7893982],[144.9417114,-37.7890396],[144.9409943,-37.7884598],[144.9408722,-37.7883606],[144.9404907,-37.7878189],[144.9403534,-37.7876091],[144.9400635,-37.7872009],[144.9399109,-37.7870102],[144.9402008,-37.7868309],[144.9402771,-37.7866592],[144.9402618,-37.786438],[144.9401703,-37.7860985],[144.9398956,-37.7855492],[144.939621,-37.7849388],[144.9394836,-37.7843399],[144.93927,-37.7833977],[144.9391632,-37.7825775],[144.9390106,-37.7817688],[144.9389496,-37.7815704]]]}},{"type":"Feature","properties":{"SA2_NAME":"Pascoe Vale South","polygonId":40,"SA3_NAME":"Brunswick - Coburg","AREASQKM":2.9887,"fillColor":"#48C16E","strokeColor":"#48C16E","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9326324,-37.74226],[144.9324951,-37.74226],[144.9319458,-37.7422676],[144.9318237,-37.7422295],[144.9316406,-37.7421608],[144.9315338,-37.7420578],[144.9302216,-37.7403297],[144.9300995,-37.7401772],[144.9299622,-37.7399673],[144.9299469,-37.7397995],[144.9299622,-37.7386208],[144.9299622,-37.7381783],[144.9298706,-37.7379494],[144.9297943,-37.7378807],[144.9296722,-37.7378387],[144.9293671,-37.7377701],[144.9291992,-37.7377281],[144.9289398,-37.7376289],[144.9288483,-37.7375107],[144.928833,-37.7373886],[144.9288025,-37.7371597],[144.9286041,-37.7355881],[144.9285431,-37.7352791],[144.9289398,-37.73526],[144.9290619,-37.7352791],[144.9290009,-37.7348976],[144.928772,-37.7336197],[144.9288635,-37.7336273],[144.9290466,-37.7336578],[144.9293976,-37.7336998],[144.9305725,-37.7338486],[144.9310913,-37.7339172],[144.9332123,-37.734169],[144.9341888,-37.7342873],[144.9351959,-37.7344093],[144.9378815,-37.7347298],[144.939209,-37.73489],[144.9411621,-37.7351189],[144.9427795,-37.7353172],[144.9447021,-37.7355499],[144.9452667,-37.7356071],[144.9455109,-37.7356377],[144.9468536,-37.7357788],[144.947937,-37.7358894],[144.9490509,-37.7360001],[144.948761,-37.737648],[144.9484711,-37.7394981],[144.9478302,-37.7394409],[144.9475098,-37.7412109],[144.9472046,-37.7430077],[144.946991,-37.7443008],[144.9468994,-37.7447701],[144.9465637,-37.7467804],[144.9470673,-37.7468491],[144.9472504,-37.7468681],[144.9472504,-37.7469101],[144.9469604,-37.7484474],[144.946701,-37.7497177],[144.9463806,-37.7496796],[144.9462433,-37.7505875],[144.9460754,-37.7514305],[144.9457397,-37.7532692],[144.9446106,-37.7531281],[144.9434204,-37.7529984],[144.9424896,-37.7528877],[144.9419556,-37.7528305],[144.9408112,-37.7526894],[144.9387207,-37.752449],[144.9382324,-37.752388],[144.9378967,-37.7523499],[144.9376678,-37.7523308],[144.937561,-37.7523193],[144.9372406,-37.7522774],[144.9365234,-37.7521973],[144.9360504,-37.75214],[144.9351807,-37.7520409],[144.9345703,-37.7519608],[144.9343109,-37.7519302],[144.9338531,-37.7518806],[144.9333649,-37.7518196],[144.9320526,-37.7516708],[144.931076,-37.7515488],[144.9301147,-37.7514381],[144.9294891,-37.7513695],[144.9291534,-37.7513275],[144.9284973,-37.7512474],[144.9277802,-37.7511673],[144.9271393,-37.7510872],[144.9269409,-37.7510681],[144.9269867,-37.7510376],[144.9270325,-37.750988],[144.9270935,-37.7509384],[144.9271088,-37.7508583],[144.9272003,-37.7507172],[144.9272614,-37.7505989],[144.9273224,-37.7505302],[144.9273529,-37.7504692],[144.9273987,-37.7503891],[144.9274445,-37.7503204],[144.9274597,-37.7502785],[144.927475,-37.7502174],[144.927475,-37.7501183],[144.927475,-37.7499809],[144.9274597,-37.7498474],[144.9274292,-37.7497673],[144.9273987,-37.7496796],[144.9273529,-37.7495995],[144.9273071,-37.7495003],[144.9273529,-37.7494087],[144.9273987,-37.7492676],[144.9274902,-37.7491608],[144.9276276,-37.7490387],[144.9277191,-37.7489891],[144.9278717,-37.74897],[144.9280396,-37.74897],[144.9281769,-37.74897],[144.9282837,-37.7489281],[144.92836,-37.748848],[144.9283905,-37.7487907],[144.9284515,-37.7486992],[144.9285126,-37.7486076],[144.9285736,-37.7485008],[144.9286194,-37.7483978],[144.9286499,-37.7483101],[144.9286804,-37.7482109],[144.9287109,-37.7481003],[144.9287872,-37.7479706],[144.9289093,-37.7478485],[144.9290314,-37.7477379],[144.9291229,-37.7476692],[144.9291992,-37.7475891],[144.9291992,-37.7475471],[144.9291992,-37.7474709],[144.929184,-37.7473907],[144.9291229,-37.7473297],[144.9289703,-37.7473297],[144.9287109,-37.7473297],[144.9285126,-37.7472878],[144.92836,-37.7472],[144.928299,-37.7471275],[144.9282837,-37.7470703],[144.9282684,-37.7469902],[144.9282684,-37.7468987],[144.9282837,-37.746788],[144.9282837,-37.7466507],[144.9283295,-37.7464676],[144.9283295,-37.7463684],[144.9283447,-37.7462387],[144.92836,-37.746048],[144.9283752,-37.7459793],[144.9283905,-37.7458801],[144.9285431,-37.7457085],[144.928772,-37.7455597],[144.9291534,-37.7454185],[144.9294128,-37.745369],[144.9296722,-37.745388],[144.9303436,-37.7454987],[144.9307709,-37.7455406],[144.9311371,-37.7455482],[144.9315643,-37.7455177],[144.9317627,-37.7454376],[144.9318542,-37.7454185],[144.9320068,-37.745369],[144.932312,-37.7454109],[144.9326019,-37.7454605],[144.9328308,-37.7454605],[144.9329681,-37.7454109],[144.9330597,-37.7453079],[144.9331055,-37.7451897],[144.9331207,-37.7451096],[144.9331512,-37.745018],[144.9331818,-37.7449188],[144.9332123,-37.7448883],[144.9332428,-37.7448387],[144.9333649,-37.7447701],[144.9335175,-37.7446976],[144.9338531,-37.7445908],[144.9339447,-37.7444687],[144.9342651,-37.7444191],[144.9344788,-37.7443581],[144.9346313,-37.7442398],[144.9347229,-37.7440491],[144.9347229,-37.7439194],[144.9345703,-37.7437096],[144.934021,-37.7431679],[144.9339294,-37.7430878],[144.933609,-37.7426109],[144.9334869,-37.7424393],[144.9333344,-37.7423477],[144.9331818,-37.7422791],[144.9330292,-37.7422485],[144.9326324,-37.74226]]]}},{"type":"Feature","properties":{"SA2_NAME":"Port Melbourne","polygonId":61,"SA3_NAME":"Port Phillip","AREASQKM":2.7894,"fillColor":"#54C568","strokeColor":"#54C568","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9169006,-37.8365402],[144.9171906,-37.8364792],[144.9198608,-37.835968],[144.9205933,-37.8358307],[144.9221497,-37.8355293],[144.9224243,-37.8354797],[144.9248199,-37.8350105],[144.9249725,-37.83498],[144.9264679,-37.8346901],[144.9275665,-37.8344803],[144.9296417,-37.8340683],[144.9309387,-37.8338203],[144.9327545,-37.8334579],[144.9351196,-37.8330193],[144.9364471,-37.8327675],[144.9374542,-37.8325806],[144.9382782,-37.8324089],[144.9385834,-37.8323593],[144.9400787,-37.832058],[144.9411774,-37.8318481],[144.9416504,-37.831749],[144.9422913,-37.8316307],[144.9441833,-37.8312607],[144.9442139,-37.8312607],[144.9444427,-37.8312607],[144.9456787,-37.8305588],[144.946167,-37.8309784],[144.9464264,-37.8311501],[144.9466858,-37.8313789],[144.9470673,-37.8317108],[144.9474335,-37.8320389],[144.9479523,-37.832489],[144.9487762,-37.8332291],[144.949646,-37.8339996],[144.9497528,-37.8340874],[144.9493561,-37.8349495],[144.9488831,-37.835968],[144.9488373,-37.8360901],[144.9487915,-37.8362007],[144.9485168,-37.83675],[144.9484711,-37.8368492],[144.9480743,-37.8376999],[144.9479828,-37.8378983],[144.9474792,-37.8389702],[144.9468994,-37.8401985],[144.9465179,-37.8410072],[144.9455719,-37.8430405],[144.9449005,-37.8437576],[144.9442749,-37.844429],[144.9440002,-37.8447304],[144.9434662,-37.8453102],[144.9432678,-37.84552],[144.942688,-37.8460884],[144.942215,-37.8459473],[144.9419403,-37.8458405],[144.9417572,-37.8457985],[144.9412842,-37.8456001],[144.9410858,-37.8455696],[144.9409637,-37.84552],[144.9406433,-37.8454285],[144.9404297,-37.8453674],[144.940094,-37.8452377],[144.9399261,-37.8451805],[144.9398804,-37.8451195],[144.9397888,-37.8449478],[144.9396973,-37.8447876],[144.9392853,-37.8445206],[144.9390869,-37.8443794],[144.9389648,-37.8443184],[144.938797,-37.8442688],[144.9386444,-37.8442078],[144.9381409,-37.8439484],[144.9380035,-37.8438988],[144.9375916,-37.8437195],[144.9375153,-37.8437805],[144.9374695,-37.8437576],[144.9373474,-37.8438797],[144.9370728,-37.843689],[144.9371033,-37.8436584],[144.9370422,-37.8436089],[144.9371185,-37.8435478],[144.9371185,-37.8433495],[144.9370728,-37.8432808],[144.9365234,-37.8429794],[144.936203,-37.8428078],[144.9360504,-37.84272],[144.9358521,-37.8426476],[144.9355927,-37.8425407],[144.935257,-37.8425102],[144.9349213,-37.8424072],[144.9347229,-37.84235],[144.9344635,-37.8423004],[144.9342804,-37.8422394],[144.934082,-37.8422089],[144.9339905,-37.8421974],[144.9333496,-37.8438301],[144.9318848,-37.8432884],[144.9315338,-37.8443489],[144.9305878,-37.847168],[144.9299927,-37.8473587],[144.9298401,-37.8473206],[144.9298248,-37.84729],[144.9309998,-37.8438683],[144.9312592,-37.8430099],[144.930542,-37.8428574],[144.9307251,-37.8423004],[144.9303894,-37.8422279],[144.929184,-37.8419685],[144.9292908,-37.841629],[144.9279175,-37.8413277],[144.9271545,-37.84132],[144.9258423,-37.8451195],[144.9252319,-37.8449783],[144.9269104,-37.8400307],[144.9267273,-37.8400002],[144.9258423,-37.8398399],[144.9249268,-37.8400879],[144.9242706,-37.8401604],[144.9238739,-37.8399887],[144.9234619,-37.8398399],[144.9233704,-37.8397102],[144.9225311,-37.8396988],[144.9217834,-37.8396606],[144.9210968,-37.8396492],[144.9204102,-37.8396301],[144.9197845,-37.8396492],[144.9190216,-37.8396606],[144.9185181,-37.8396797],[144.9183807,-37.8397408],[144.9181061,-37.8398285],[144.9172821,-37.8400803],[144.9165802,-37.8402977],[144.9158936,-37.8406372],[144.9157257,-37.8406181],[144.9157104,-37.8406296],[144.9155121,-37.8407097],[144.9152374,-37.8408203],[144.9149323,-37.8409996],[144.914856,-37.8410378],[144.9144592,-37.8413086],[144.9136963,-37.8417778],[144.9135895,-37.8418274],[144.9133911,-37.8419609],[144.9133301,-37.8420792],[144.9131927,-37.8422775],[144.9129333,-37.841938],[144.9130096,-37.8418999],[144.9127045,-37.8415108],[144.9124603,-37.8409882],[144.9152374,-37.8395004],[144.9152527,-37.8394394],[144.9149933,-37.8387184],[144.9153748,-37.8386307],[144.9154205,-37.8386192],[144.9151764,-37.8379173],[144.9149017,-37.8370209],[144.9148407,-37.8369408],[144.9169006,-37.8365402]]]}},{"type":"Feature","properties":{"SA2_NAME":"Port Melbourne Industrial","polygonId":62,"SA3_NAME":"Port Phillip","AREASQKM":6.8694,"fillColor":"#54C568","strokeColor":"#54C568","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9016571,-37.8260803],[144.9026337,-37.8253288],[144.9034729,-37.8246994],[144.9042206,-37.8241692],[144.9054108,-37.82304],[144.9055634,-37.8228798],[144.9070282,-37.8232994],[144.9082336,-37.8227272],[144.9095154,-37.8222275],[144.9098511,-37.8220406],[144.9101105,-37.8219872],[144.9104614,-37.8218307],[144.9109802,-37.8217201],[144.9113312,-37.8216095],[144.9114532,-37.8216209],[144.9116821,-37.8214874],[144.9119415,-37.8214302],[144.9120026,-37.8214378],[144.9128723,-37.8211098],[144.9128571,-37.8210373],[144.9157867,-37.82061],[144.9173889,-37.8203773],[144.9197693,-37.8200302],[144.9203644,-37.8200302],[144.9247894,-37.8199806],[144.9251251,-37.8200073],[144.9251404,-37.8199806],[144.9255524,-37.8200188],[144.9255524,-37.8200607],[144.9263458,-37.8201408],[144.9263611,-37.8201103],[144.9268036,-37.8201599],[144.9268036,-37.8201904],[144.9269257,-37.8202095],[144.9269409,-37.820179],[144.9271393,-37.8201981],[144.9271393,-37.8202286],[144.9279785,-37.8203201],[144.9279633,-37.8204002],[144.9309387,-37.8207207],[144.9309692,-37.8206406],[144.931427,-37.8206902],[144.9314117,-37.8207893],[144.9318237,-37.8208275],[144.9314728,-37.8217888],[144.9327087,-37.8220482],[144.9364929,-37.8228378],[144.9367828,-37.8228989],[144.9371338,-37.8229408],[144.937851,-37.8230896],[144.9376984,-37.8236694],[144.9395447,-37.8252602],[144.9397736,-37.8254585],[144.9400787,-37.8257294],[144.9403381,-37.8257294],[144.9405212,-37.8257294],[144.9414368,-37.8257904],[144.941391,-37.8259773],[144.9412994,-37.8260689],[144.9411621,-37.8261185],[144.9410248,-37.8261795],[144.9407959,-37.8263397],[144.9408112,-37.8263588],[144.941864,-37.8272705],[144.9425201,-37.8278275],[144.9438629,-37.8289795],[144.944809,-37.8298073],[144.9450989,-37.8300591],[144.9456787,-37.8305588],[144.9444427,-37.8312607],[144.9442139,-37.8312607],[144.9441833,-37.8312607],[144.9422913,-37.8316307],[144.9416504,-37.831749],[144.9411774,-37.8318481],[144.9400787,-37.832058],[144.9385834,-37.8323593],[144.9382782,-37.8324089],[144.9374542,-37.8325806],[144.9364471,-37.8327675],[144.9351196,-37.8330193],[144.9327545,-37.8334579],[144.9309387,-37.8338203],[144.9296417,-37.8340683],[144.9275665,-37.8344803],[144.9264679,-37.8346901],[144.9249725,-37.83498],[144.9248199,-37.8350105],[144.9224243,-37.8354797],[144.9221497,-37.8355293],[144.9205933,-37.8358307],[144.9198608,-37.835968],[144.9171906,-37.8364792],[144.9169006,-37.8365402],[144.9148407,-37.8369408],[144.9149017,-37.8370209],[144.9151764,-37.8379173],[144.9154205,-37.8386192],[144.9153748,-37.8386307],[144.9149933,-37.8387184],[144.9152527,-37.8394394],[144.9152374,-37.8395004],[144.9124603,-37.8409882],[144.9127045,-37.8415108],[144.9130096,-37.8418999],[144.9129333,-37.841938],[144.9131927,-37.8422775],[144.9133301,-37.8420792],[144.9133759,-37.8422508],[144.913681,-37.8428307],[144.914032,-37.843338],[144.914093,-37.8434105],[144.9141846,-37.8435783],[144.9141846,-37.84375],[144.9141846,-37.8439407],[144.9142609,-37.8441086],[144.9143829,-37.8441887],[144.9144745,-37.8442078],[144.9145813,-37.8442383],[144.9147034,-37.8443184],[144.9147034,-37.8444405],[144.9145508,-37.8445091],[144.9143524,-37.8446503],[144.914032,-37.8448181],[144.9138031,-37.8449478],[144.9135132,-37.8450775],[144.9133453,-37.84515],[144.9133606,-37.8451576],[144.9131927,-37.8452377],[144.9129944,-37.8453484],[144.9128113,-37.8453979],[144.912735,-37.8454704],[144.912674,-37.8455887],[144.9126129,-37.8456497],[144.9125671,-37.845829],[144.9127045,-37.8460579],[144.9129639,-37.8463783],[144.9133911,-37.8469391],[144.9135284,-37.8470573],[144.9138336,-37.8474808],[144.9141693,-37.8479805],[144.9143372,-37.8482094],[144.9144897,-37.8484192],[144.914505,-37.8484802],[144.9144592,-37.8485909],[144.9140625,-37.8488007],[144.9138336,-37.8488998],[144.91362,-37.8490105],[144.9134216,-37.8490906],[144.9133301,-37.8491478],[144.9131317,-37.8492203],[144.9129791,-37.8492775],[144.912674,-37.8494301],[144.9125519,-37.8494186],[144.9124908,-37.8494492],[144.9120941,-37.8489304],[144.9119415,-37.848999],[144.9103851,-37.8469391],[144.9088287,-37.8448677],[144.9085846,-37.8449898],[144.9085388,-37.8449898],[144.9085236,-37.8449783],[144.9082489,-37.8445206],[144.9078369,-37.8432007],[144.9075928,-37.8432579],[144.9074707,-37.8432007],[144.906723,-37.8419609],[144.9065704,-37.8420105],[144.9065399,-37.8420105],[144.9064026,-37.8417778],[144.9064331,-37.8417282],[144.9061279,-37.8417091],[144.9062042,-37.8412781],[144.9064789,-37.8413086],[144.9064941,-37.8411903],[144.9061127,-37.840538],[144.9059906,-37.84058],[144.9057312,-37.8401489],[144.9055634,-37.8401985],[144.9055634,-37.840168],[144.905426,-37.8401794],[144.905304,-37.8402176],[144.9049072,-37.8403206],[144.9046783,-37.8404007],[144.9039764,-37.8407097],[144.9035797,-37.8409081],[144.9033966,-37.8411484],[144.9032898,-37.8412285],[144.9032135,-37.8412971],[144.9032135,-37.8413887],[144.9032745,-37.8415985],[144.9034882,-37.8419304],[144.9038239,-37.8425674],[144.9041748,-37.8431702],[144.9043121,-37.8434677],[144.9044189,-37.8436508],[144.9046173,-37.8438492],[144.9046326,-37.8439178],[144.9047546,-37.844059],[144.9048615,-37.8442307],[144.904953,-37.8444786],[144.9050598,-37.8446884],[144.9051514,-37.8448105],[144.9052734,-37.8450089],[144.9055481,-37.8455009],[144.905777,-37.8458672],[144.9058533,-37.8460388],[144.9062042,-37.8466606],[144.9063263,-37.8467903],[144.9063416,-37.8469009],[144.9062805,-37.8469772],[144.9057312,-37.8473282],[144.9055786,-37.8474388],[144.9054871,-37.847538],[144.9055023,-37.8476601],[144.9056396,-37.8478203],[144.9057922,-37.8479004],[144.9059296,-37.8481102],[144.9064484,-37.848629],[144.9069977,-37.8491592],[144.9072418,-37.8494301],[144.9072418,-37.8494987],[144.9072113,-37.8495178],[144.907135,-37.8494797],[144.9068604,-37.8492393],[144.9064331,-37.8487701],[144.9060974,-37.8484497],[144.9056396,-37.8480072],[144.9051666,-37.847538],[144.9048157,-37.8471603],[144.9044037,-37.8467674],[144.9039917,-37.8463478],[144.9036407,-37.8460197],[144.9034576,-37.8458176],[144.903183,-37.8455582],[144.9023132,-37.8446274],[144.9020844,-37.8443909],[144.9019623,-37.8441505],[144.9016113,-37.8436394],[144.9009247,-37.8426971],[144.9008331,-37.8425903],[144.9002991,-37.8423576],[144.9001923,-37.8421707],[144.9000244,-37.8419991],[144.8999023,-37.8418007],[144.899704,-37.8415375],[144.8996582,-37.8414078],[144.8995972,-37.8412895],[144.8994904,-37.8411598],[144.8993225,-37.8410988],[144.8993835,-37.8409691],[144.8993683,-37.8407974],[144.8992615,-37.840519],[144.8991547,-37.8403893],[144.8983612,-37.841198],[144.8981171,-37.8407707],[144.897644,-37.8397408],[144.8974304,-37.8390198],[144.8972015,-37.8383408],[144.89711,-37.8375206],[144.8970795,-37.836338],[144.89711,-37.8349495],[144.89711,-37.8336792],[144.8971252,-37.8328094],[144.8971405,-37.8326302],[144.8972321,-37.8320198],[144.8973846,-37.8314095],[144.8976898,-37.8307877],[144.8983612,-37.829689],[144.89888,-37.8288689],[144.8996429,-37.8279305],[144.9005432,-37.8270683],[144.9016571,-37.8260803]]]}},{"type":"Feature","properties":{"SA2_NAME":"Prahran - Windsor","polygonId":67,"SA3_NAME":"Stonnington - West","AREASQKM":2.9054,"fillColor":"#56C667","strokeColor":"#56C667","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[145.00914,-37.8488693],[145.009201,-37.8488808],[145.0097809,-37.8489494],[145.0103607,-37.8490295],[145.0122833,-37.8492699],[145.0123138,-37.8492775],[145.0122986,-37.849369],[145.0122223,-37.8498688],[145.0121613,-37.8502274],[145.0120239,-37.8511696],[145.0119324,-37.851799],[145.0119171,-37.8518791],[145.0117493,-37.8529472],[145.0116577,-37.8535805],[145.0116119,-37.8539085],[145.0115509,-37.8543091],[145.0114899,-37.8546906],[145.0112457,-37.85606],[145.0109711,-37.8576508],[145.0109406,-37.8577805],[145.0108795,-37.85812],[145.0108643,-37.8582001],[145.0106964,-37.8591805],[145.0105133,-37.860218],[145.0101166,-37.8601685],[145.0095825,-37.8600998],[145.0093842,-37.8600693],[145.0088806,-37.8600006],[145.0087128,-37.8599777],[145.0083313,-37.8599281],[145.0078583,-37.8598709],[145.0070343,-37.8597603],[145.0068207,-37.8597298],[145.0059357,-37.8596077],[145.0056915,-37.8595772],[145.0051575,-37.8595085],[145.0048676,-37.8594704],[145.0041504,-37.8593674],[145.0040436,-37.8593597],[145.0028534,-37.8591995],[145.001358,-37.8589973],[145.0009918,-37.8589478],[145.0006256,-37.8588982],[145.0002441,-37.8588486],[144.9999237,-37.8588104],[144.999649,-37.8587685],[144.9993286,-37.8587189],[144.9986267,-37.8586273],[144.9981689,-37.8585701],[144.9980927,-37.8585587],[144.9973907,-37.8584595],[144.9967957,-37.8583794],[144.9958954,-37.8582573],[144.9953156,-37.8581772],[144.9937897,-37.8579788],[144.9932709,-37.8578987],[144.9929962,-37.8578491],[144.9927521,-37.8577995],[144.9924927,-37.8577194],[144.9922638,-37.8576393],[144.9920807,-37.8575706],[144.9919434,-37.8575096],[144.9918213,-37.85746],[144.9916077,-37.857338],[144.9909668,-37.8569603],[144.9908142,-37.8568687],[144.9906616,-37.8568001],[144.9904938,-37.8567276],[144.9903412,-37.8566589],[144.9901123,-37.8565903],[144.9898834,-37.8565292],[144.9896698,-37.8564873],[144.9876709,-37.8562279],[144.9865723,-37.8560791],[144.9859009,-37.8559875],[144.9854431,-37.8559303],[144.9833221,-37.855648],[144.9834595,-37.8547592],[144.98349,-37.8546791],[144.9835815,-37.8541298],[144.9837036,-37.8535004],[144.9838257,-37.8527489],[144.9839478,-37.8520699],[144.9840698,-37.8513603],[144.9840698,-37.8513184],[144.9841919,-37.8506584],[144.9843292,-37.8498383],[144.9845734,-37.8483391],[144.9847107,-37.8474083],[144.9847412,-37.8472481],[144.9847717,-37.8470497],[144.9849396,-37.8461189],[144.9850159,-37.8456802],[144.9860382,-37.8458099],[144.9869385,-37.8459282],[144.98703,-37.8459396],[144.9877167,-37.8460274],[144.9880219,-37.8460693],[144.9881592,-37.8460884],[144.9885559,-37.846138],[144.9887543,-37.8461685],[144.9893799,-37.8462486],[144.9895935,-37.8462677],[144.9900665,-37.8463287],[144.9904633,-37.8463898],[144.9914703,-37.8465195],[144.9917297,-37.84655],[144.9923401,-37.8466301],[144.99263,-37.8466682],[144.992981,-37.8467102],[144.9932709,-37.8467484],[144.9941254,-37.846859],[144.994751,-37.8469391],[144.9949951,-37.8469772],[144.9962311,-37.8471489],[144.9967194,-37.8472176],[144.9975433,-37.8473282],[144.9979095,-37.8473778],[144.998642,-37.8474808],[144.9989929,-37.8475189],[144.9993896,-37.84758],[145.0004425,-37.8477173],[145.0012054,-37.8478279],[145.0017548,-37.8479004],[145.0024109,-37.8479881],[145.0031738,-37.8480988],[145.0037689,-37.8481789],[145.0044556,-37.848259],[145.0053101,-37.8483696],[145.0062256,-37.8484879],[145.0067749,-37.8485603],[145.0071564,-37.8486099],[145.0074158,-37.8486481],[145.0078583,-37.8486977],[145.0086975,-37.8488083],[145.00914,-37.8488693]]]}},{"type":"Feature","properties":{"SA2_NAME":"Richmond (Vic.)","polygonId":75,"SA3_NAME":"Yarra","AREASQKM":6.2125,"fillColor":"#62CB5F","strokeColor":"#62CB5F","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9909363,-37.8120308],[144.9909363,-37.8120193],[144.9910736,-37.8112488],[144.9911194,-37.8109398],[144.9911804,-37.8106194],[144.9913483,-37.8097305],[144.9919739,-37.8097191],[144.9923706,-37.8097191],[144.9925995,-37.8097382],[144.9928436,-37.8097572],[144.9937744,-37.8098488],[144.9938507,-37.8098602],[144.9945374,-37.8099289],[144.9952545,-37.810009],[144.9960327,-37.8100891],[144.9965668,-37.8101387],[144.9971619,-37.8102074],[144.997757,-37.8102684],[144.9983521,-37.8103294],[144.9990692,-37.8103981],[144.9995422,-37.8104477],[145.0006409,-37.8105583],[145.0023193,-37.81073],[145.0029449,-37.8107986],[145.0041199,-37.8109093],[145.0046844,-37.8109703],[145.0051117,-37.8110085],[145.0054626,-37.811039],[145.0062714,-37.8111191],[145.0064087,-37.8111305],[145.0070801,-37.8111992],[145.0073547,-37.8112297],[145.0084839,-37.8113403],[145.0096436,-37.8114471],[145.0097656,-37.8114395],[145.0101013,-37.8113976],[145.012207,-37.8116302],[145.0130005,-37.8117104],[145.0133057,-37.8117905],[145.0141449,-37.8120003],[145.0150757,-37.8120995],[145.0153809,-37.8121376],[145.0153961,-37.8121376],[145.0153503,-37.8122597],[145.015274,-37.8125305],[145.0151672,-37.8128586],[145.0150604,-37.8132477],[145.0149994,-37.8135185],[145.0149384,-37.8137589],[145.0149231,-37.8137779],[145.0148315,-37.8140602],[145.0147095,-37.81427],[145.0146179,-37.8144379],[145.0146027,-37.8144798],[145.0145111,-37.8146896],[145.0144501,-37.8148804],[145.0144196,-37.8151588],[145.0143738,-37.8154373],[145.0143738,-37.8154793],[145.0143738,-37.8155289],[145.0143738,-37.8155708],[145.0143738,-37.8156204],[145.0143738,-37.8157005],[145.014389,-37.8157387],[145.014389,-37.8158073],[145.0143738,-37.8159485],[145.0143738,-37.815979],[145.0143738,-37.8160172],[145.0143738,-37.81604],[145.0143738,-37.8160591],[145.0143738,-37.8160973],[145.0143738,-37.8161583],[145.0143738,-37.8161774],[145.014389,-37.8163185],[145.014389,-37.8164978],[145.0144196,-37.8166008],[145.0144501,-37.8168907],[145.0144958,-37.8172874],[145.0145111,-37.817379],[145.0145111,-37.8174095],[145.0145264,-37.8174286],[145.0145416,-37.8174896],[145.0145416,-37.8175392],[145.0145721,-37.8176003],[145.0146027,-37.8177185],[145.0146332,-37.8177795],[145.0146484,-37.8178596],[145.0146637,-37.8178978],[145.014679,-37.8179398],[145.014679,-37.8179703],[145.014679,-37.8179893],[145.0147095,-37.8180275],[145.01474,-37.8181076],[145.0147552,-37.8181686],[145.0147705,-37.8182182],[145.0147705,-37.8182907],[145.0147858,-37.8182983],[145.0147858,-37.8183098],[145.0147858,-37.8183708],[145.0147858,-37.8183975],[145.014801,-37.8184776],[145.0148163,-37.8185577],[145.0148315,-37.8186188],[145.0148468,-37.8187599],[145.0148621,-37.8188286],[145.0148621,-37.8188782],[145.0148773,-37.8189278],[145.0149078,-37.8190079],[145.0149384,-37.8191185],[145.0150146,-37.8194008],[145.0150299,-37.8194389],[145.0150299,-37.8194885],[145.0150299,-37.819519],[145.0150452,-37.8195572],[145.0150604,-37.8195877],[145.0150757,-37.8196297],[145.0151062,-37.8196983],[145.0151367,-37.8197594],[145.0151367,-37.8197708],[145.0152435,-37.8200989],[145.0152588,-37.8201675],[145.0153046,-37.8202705],[145.0154419,-37.8206291],[145.0154419,-37.8206406],[145.0154572,-37.8206673],[145.0155029,-37.820858],[145.0155334,-37.8209572],[145.015564,-37.8210487],[145.0156097,-37.8211899],[145.0156403,-37.8212585],[145.0157013,-37.8214874],[145.0157166,-37.8215179],[145.0157318,-37.8215485],[145.0157318,-37.8215599],[145.0157318,-37.8215675],[145.0157318,-37.8215904],[145.0157318,-37.8216286],[145.0157318,-37.8216476],[145.0157623,-37.8217697],[145.0157928,-37.821888],[145.0157928,-37.8220596],[145.0158081,-37.8221779],[145.0158081,-37.8222084],[145.0158234,-37.822258],[145.0158234,-37.8222694],[145.0158234,-37.8222809],[145.0158234,-37.8222885],[145.0158234,-37.8223],[145.0158234,-37.8223076],[145.0158234,-37.8223686],[145.0158386,-37.8223877],[145.0158386,-37.8224106],[145.0158386,-37.8224297],[145.0158386,-37.8224487],[145.0158539,-37.8224907],[145.0158691,-37.8225784],[145.0158691,-37.8225975],[145.0158691,-37.822628],[145.0158997,-37.8227882],[145.0158997,-37.8228607],[145.0159149,-37.8228989],[145.0159302,-37.822998],[145.0159302,-37.8230591],[145.0159302,-37.8230705],[145.0159302,-37.8230896],[145.0159302,-37.8231201],[145.0159302,-37.8231392],[145.0159454,-37.8231888],[145.0159607,-37.8232384],[145.0159607,-37.8232498],[145.0159607,-37.823288],[145.0159607,-37.8233109],[145.0160217,-37.8236885],[145.0160217,-37.8238106],[145.0160217,-37.8238373],[145.016037,-37.8239479],[145.0160522,-37.8240585],[145.0160522,-37.8240891],[145.0160675,-37.8241501],[145.0160675,-37.8242073],[145.0160828,-37.8243408],[145.016098,-37.824398],[145.0161133,-37.8244591],[145.0161285,-37.8244972],[145.0161285,-37.8245087],[145.0161591,-37.8245697],[145.0162354,-37.824688],[145.0162506,-37.8247108],[145.0163727,-37.8248787],[145.0164795,-37.8250198],[145.01651,-37.8250809],[145.0165405,-37.8251076],[145.016571,-37.8251495],[145.0166016,-37.8251686],[145.0166321,-37.8252106],[145.0166779,-37.8252487],[145.0167389,-37.8253174],[145.016861,-37.825428],[145.0170441,-37.8255806],[145.0172424,-37.8257179],[145.0173035,-37.8257675],[145.0173187,-37.8257904],[145.0174103,-37.8258476],[145.0174561,-37.8258781],[145.0175323,-37.8259277],[145.0177002,-37.8260193],[145.0177307,-37.8260307],[145.0177307,-37.8260307],[145.0177612,-37.8260498],[145.0177765,-37.8260498],[145.0177765,-37.8260574],[145.0178528,-37.826088],[145.0178833,-37.8260994],[145.0179138,-37.8261108],[145.0179291,-37.8261108],[145.0179901,-37.8261299],[145.0180206,-37.826149],[145.0181427,-37.8261681],[145.0181732,-37.8261795],[145.0182495,-37.8261986],[145.0183105,-37.82621],[145.0183411,-37.82621],[145.0183563,-37.82621],[145.0183716,-37.82621],[145.0184326,-37.82621],[145.0185242,-37.8261909],[145.0185394,-37.8261909],[145.0185699,-37.8261795],[145.0186462,-37.8261604],[145.0187531,-37.8261185],[145.0187683,-37.8261108],[145.0187988,-37.826088],[145.0188751,-37.8260574],[145.0189209,-37.8260384],[145.0189514,-37.8260307],[145.019104,-37.8259583],[145.0191803,-37.8259277],[145.0192108,-37.8259087],[145.0193939,-37.8258286],[145.0195923,-37.8257179],[145.0196228,-37.8256989],[145.0196533,-37.8256874],[145.0197601,-37.8256302],[145.0198822,-37.8255577],[145.0199432,-37.8255272],[145.02005,-37.8254776],[145.0201111,-37.8254395],[145.0201569,-37.825428],[145.0201874,-37.8254089],[145.0202484,-37.8253899],[145.0202789,-37.8253784],[145.0203552,-37.8253593],[145.0204315,-37.8253288],[145.0204468,-37.8253288],[145.0204773,-37.8253174],[145.0206146,-37.8252602],[145.0206604,-37.8252487],[145.0207214,-37.8252296],[145.0207672,-37.8252182],[145.020813,-37.8252106],[145.0210114,-37.8251686],[145.0211639,-37.8251572],[145.0213318,-37.8251801],[145.0214233,-37.8252296],[145.0218201,-37.8254204],[145.0218506,-37.8254509],[145.0219421,-37.8255081],[145.0219574,-37.8255196],[145.0219727,-37.8255272],[145.0220032,-37.8255501],[145.0220642,-37.8256607],[145.0221558,-37.825798],[145.022171,-37.8258286],[145.0221863,-37.8258476],[145.0222626,-37.8259773],[145.0222626,-37.8259888],[145.0223236,-37.826088],[145.0223389,-37.8261108],[145.0223694,-37.8261795],[145.0223999,-37.8262177],[145.0223999,-37.8262291],[145.0224304,-37.8262596],[145.0224609,-37.8263397],[145.0224762,-37.8263779],[145.0224762,-37.8263893],[145.0224915,-37.8264389],[145.0225067,-37.826519],[145.0225067,-37.8265305],[145.0225067,-37.8265381],[145.0225067,-37.8265495],[145.022522,-37.8265686],[145.022522,-37.8266602],[145.022522,-37.8266983],[145.022522,-37.8267174],[145.0225372,-37.8267593],[145.0225372,-37.8267975],[145.022583,-37.8269691],[145.0226135,-37.8270302],[145.0226898,-37.8272781],[145.0227203,-37.8273773],[145.0228271,-37.8276291],[145.0228577,-37.8276901],[145.0228729,-37.8277206],[145.022934,-37.8277893],[145.022934,-37.8278008],[145.0229492,-37.8278084],[145.0229645,-37.8278389],[145.0229797,-37.8278503],[145.0229797,-37.827858],[145.0229797,-37.8278694],[145.0230103,-37.8279076],[145.0230103,-37.827919],[145.0230255,-37.8279381],[145.023056,-37.82798],[145.0230713,-37.8279991],[145.0230865,-37.8280106],[145.0231323,-37.8280373],[145.0231628,-37.8280678],[145.0231628,-37.8280678],[145.0231781,-37.8280792],[145.0231934,-37.8280907],[145.0233154,-37.8281403],[145.0233917,-37.8281898],[145.0234375,-37.8282089],[145.0235138,-37.8282394],[145.0235748,-37.82827],[145.0235901,-37.8282776],[145.0236969,-37.8283386],[145.0237427,-37.8283577],[145.0237732,-37.8283806],[145.0238647,-37.8284187],[145.0239105,-37.8284302],[145.0239868,-37.8284798],[145.0240173,-37.8284988],[145.0241089,-37.8285408],[145.0246735,-37.8288879],[145.0247498,-37.8289375],[145.024765,-37.828949],[145.0247803,-37.8289604],[145.0248413,-37.8289909],[145.0249329,-37.8290482],[145.0250244,-37.8290901],[145.0251007,-37.8291283],[145.0252838,-37.8292198],[145.0254517,-37.8292999],[145.0259552,-37.8295288],[145.0259857,-37.8295403],[145.0260468,-37.8295708],[145.0260925,-37.8295898],[145.0261383,-37.8296089],[145.0261688,-37.829628],[145.0263519,-37.8297195],[145.0265198,-37.8298073],[145.0266418,-37.8298607],[145.0267639,-37.8299408],[145.0268402,-37.8299789],[145.0269165,-37.8300285],[145.0270538,-37.8301086],[145.0271301,-37.8301582],[145.0271912,-37.8301888],[145.0273438,-37.8302803],[145.0273895,-37.8303108],[145.0277252,-37.8305397],[145.0279694,-37.830719],[145.0280304,-37.8307495],[145.0280609,-37.83078],[145.028183,-37.8308792],[145.0281982,-37.8308907],[145.0282135,-37.8309097],[145.0282288,-37.8309288],[145.0282898,-37.8309784],[145.0282898,-37.8309898],[145.0283203,-37.8310089],[145.0283356,-37.8310394],[145.0283356,-37.8310394],[145.0283356,-37.8310509],[145.0283508,-37.831089],[145.0283508,-37.8311386],[145.0283508,-37.8311501],[145.0283508,-37.8311691],[145.0283508,-37.8311996],[145.0283508,-37.8312073],[145.0282898,-37.8313179],[145.0282288,-37.83144],[145.0281372,-37.8315506],[145.0281219,-37.8315582],[145.0279236,-37.8318176],[145.0278625,-37.8318672],[145.0277405,-37.8320274],[145.0275269,-37.8322296],[145.027298,-37.832489],[145.0270691,-37.8327293],[145.0270233,-37.8327675],[145.0269623,-37.8328209],[145.0269318,-37.8328476],[145.026886,-37.8328896],[145.0268402,-37.8329201],[145.0268402,-37.8329277],[145.0267029,-37.8330498],[145.0265045,-37.8332291],[145.026413,-37.8333092],[145.0263367,-37.8333702],[145.0263214,-37.8333893],[145.0262451,-37.8334503],[145.0261536,-37.833519],[145.025589,-37.8339272],[145.0253601,-37.8341103],[145.0252991,-37.8341599],[145.0252686,-37.8341789],[145.025238,-37.834198],[145.0252075,-37.8342094],[145.0251617,-37.8342285],[145.0251312,-37.8342476],[145.0249939,-37.8343201],[145.0249329,-37.8343506],[145.0248718,-37.8343773],[145.0247955,-37.8344078],[145.0246735,-37.8344574],[145.0246124,-37.8344879],[145.0245514,-37.8344994],[145.0244293,-37.8344879],[145.0239563,-37.8344307],[145.0235596,-37.8343697],[145.0232086,-37.8342896],[145.0229034,-37.8341675],[145.0226898,-37.8339996],[145.022522,-37.8337402],[145.0224304,-37.8334999],[145.0223694,-37.83321],[145.0222931,-37.8329773],[145.0222015,-37.8327675],[145.022171,-37.8326797],[145.0217133,-37.8323402],[145.0211639,-37.8321304],[145.0209961,-37.832058],[145.0207214,-37.8319893],[145.0202789,-37.8318787],[145.0200806,-37.8318176],[145.0198059,-37.8317375],[145.0194244,-37.8316574],[145.019165,-37.8316193],[145.0189056,-37.8316193],[145.0185699,-37.8316498],[145.0183105,-37.8317108],[145.0179596,-37.8318596],[145.0175629,-37.8320389],[145.0172729,-37.8321609],[145.0170288,-37.8322372],[145.0168152,-37.8322487],[145.0166473,-37.8322105],[145.0163422,-37.8320084],[145.016098,-37.8318901],[145.015686,-37.8316879],[145.0154114,-37.8315392],[145.0151215,-37.8313484],[145.01474,-37.8311386],[145.0143738,-37.8309402],[145.0141907,-37.8308601],[145.0139313,-37.8307495],[145.0137329,-37.8306999],[145.0134583,-37.8306198],[145.0131378,-37.8305397],[145.0129089,-37.8304977],[145.0127106,-37.8305092],[145.012619,-37.8305206],[145.0125122,-37.8305397],[145.0122833,-37.8306007],[145.0119629,-37.8307381],[145.0113831,-37.8310585],[145.0110168,-37.8312798],[145.0108337,-37.831459],[145.0106812,-37.8316879],[145.0106201,-37.8319397],[145.0105591,-37.8323898],[145.0105133,-37.8326607],[145.0104523,-37.8328705],[145.0102997,-37.8330688],[145.0100708,-37.8332672],[145.0098724,-37.8334198],[145.0096893,-37.833519],[145.0095367,-37.8335381],[145.0093384,-37.8335075],[145.00914,-37.8334389],[145.0090027,-37.8333282],[145.0088654,-37.833168],[145.0086212,-37.8327484],[145.0084991,-37.8325386],[145.0083618,-37.8323708],[145.0081635,-37.8321991],[145.0079041,-37.8320198],[145.0076752,-37.8318672],[145.007431,-37.8317909],[145.0071716,-37.8317299],[145.0067596,-37.8316574],[145.0064392,-37.8315697],[145.0062714,-37.8315277],[145.0061493,-37.8314896],[145.0061188,-37.8314705],[145.0057831,-37.8313599],[145.0054474,-37.8312607],[145.0051575,-37.8311882],[145.0048828,-37.8311691],[145.0045929,-37.8311691],[145.004364,-37.8312187],[145.0041199,-37.8313293],[145.003952,-37.83144],[145.00383,-37.8315697],[145.0037842,-37.8317795],[145.0038605,-37.832119],[145.0040283,-37.8326302],[145.0041504,-37.8330078],[145.0042419,-37.8333702],[145.0042572,-37.8336983],[145.0042419,-37.83395],[145.0041809,-37.8341675],[145.0040588,-37.8343086],[145.003891,-37.8344193],[145.0036621,-37.8344803],[145.0033417,-37.8345108],[145.0030212,-37.8344307],[145.0028839,-37.8342781],[145.0027313,-37.8341293],[145.002533,-37.8339806],[145.0021057,-37.8337898],[145.0014954,-37.8335991],[145.0010529,-37.8334885],[145.0006714,-37.8334579],[145.000351,-37.833519],[144.999939,-37.8336906],[144.9997406,-37.8337593],[144.9995117,-37.8338394],[144.9992065,-37.8339195],[144.9987335,-37.8339806],[144.9979706,-37.8340988],[144.9973602,-37.8342209],[144.996933,-37.8342705],[144.9966736,-37.8342972],[144.996582,-37.8342896],[144.9964142,-37.8342705],[144.9960632,-37.8342094],[144.995575,-37.8340302],[144.9949036,-37.8337898],[144.994339,-37.8335991],[144.9934235,-37.8334007],[144.9932709,-37.8333702],[144.9931793,-37.8333702],[144.993103,-37.8333588],[144.993042,-37.8333473],[144.992981,-37.8333473],[144.9927216,-37.8333206],[144.9924927,-37.8333092],[144.9922638,-37.8332787],[144.9920654,-37.8332672],[144.9918518,-37.8332481],[144.9916534,-37.8332176],[144.9914703,-37.8331795],[144.9913635,-37.833149],[144.9911957,-37.8330803],[144.9911346,-37.8330498],[144.9909058,-37.8328972],[144.9906311,-37.8325882],[144.9905701,-37.8325195],[144.9904938,-37.8323975],[144.9904327,-37.8323288],[144.990387,-37.8322296],[144.9903412,-37.8321304],[144.9902496,-37.8320198],[144.9901428,-37.8318596],[144.990036,-37.8317375],[144.9898529,-37.8315086],[144.9896698,-37.8312798],[144.9896088,-37.8311882],[144.9893951,-37.8309898],[144.9888153,-37.8303986],[144.9886017,-37.8301697],[144.9883728,-37.8299599],[144.987915,-37.8296204],[144.9879913,-37.829258],[144.9880524,-37.8289375],[144.9881287,-37.8285484],[144.9882355,-37.8279572],[144.988327,-37.8274994],[144.9883423,-37.8273697],[144.9884491,-37.8267899],[144.9886932,-37.8252983],[144.9887238,-37.8252373],[144.9888306,-37.8246193],[144.9889374,-37.8240395],[144.9890289,-37.8233986],[144.98909,-37.8231087],[144.9891357,-37.8227997],[144.9893341,-37.8216476],[144.989563,-37.8202782],[144.9896851,-37.8195572],[144.9897156,-37.8193779],[144.9897156,-37.8193398],[144.9897614,-37.8190575],[144.9898834,-37.818409],[144.9899597,-37.8178902],[144.9899902,-37.817688],[144.9900055,-37.8175507],[144.9900208,-37.8172798],[144.9900665,-37.8169594],[144.9900818,-37.8168678],[144.9902039,-37.8162575],[144.9902802,-37.8157883],[144.990448,-37.8148079],[144.9904785,-37.8146782],[144.9906311,-37.8137703],[144.9906616,-37.813549],[144.9907837,-37.81287],[144.99086,-37.8124199],[144.9909363,-37.8120308]]]}},{"type":"Feature","properties":{"SA2_NAME":"South Melbourne","polygonId":63,"SA3_NAME":"Port Phillip","AREASQKM":2.4948,"fillColor":"#86D549","strokeColor":"#86D549","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.949646,-37.8339996],[144.9487762,-37.8332291],[144.9479523,-37.832489],[144.9474335,-37.8320389],[144.9470673,-37.8317108],[144.9466858,-37.8313789],[144.9464264,-37.8311501],[144.946167,-37.8309784],[144.9456787,-37.8305588],[144.9450989,-37.8300591],[144.944809,-37.8298073],[144.9438629,-37.8289795],[144.9425201,-37.8278275],[144.941864,-37.8272705],[144.9408112,-37.8263588],[144.9407959,-37.8263397],[144.9410248,-37.8261795],[144.9411621,-37.8261185],[144.9412994,-37.8260689],[144.941391,-37.8259773],[144.9414368,-37.8257904],[144.9422913,-37.8258705],[144.9429626,-37.8259583],[144.9445801,-37.8262405],[144.9449921,-37.8263092],[144.945694,-37.8264008],[144.9461212,-37.8264503],[144.9465332,-37.826519],[144.9468689,-37.8265877],[144.9470215,-37.8266296],[144.9472504,-37.8266792],[144.9474945,-37.8267479],[144.9475861,-37.8267403],[144.9477234,-37.8267403],[144.9478607,-37.8267479],[144.9483032,-37.8268394],[144.9485779,-37.8268776],[144.9490204,-37.8269501],[144.9496002,-37.8270378],[144.950119,-37.8271179],[144.9512329,-37.8273201],[144.9518585,-37.8274193],[144.952179,-37.8274689],[144.9524841,-37.8275108],[144.9529724,-37.8275986],[144.9534149,-37.8276787],[144.9535217,-37.8276978],[144.9539795,-37.8277893],[144.9547119,-37.8279572],[144.9549866,-37.8280182],[144.9551697,-37.8280602],[144.9555206,-37.8281288],[144.9557953,-37.8281898],[144.9561005,-37.8282585],[144.9564667,-37.8283195],[144.9570465,-37.8283997],[144.9571838,-37.8284073],[144.9572601,-37.8284187],[144.9577789,-37.8284378],[144.9582062,-37.8284378],[144.9584503,-37.8284302],[144.9590759,-37.8283806],[144.9595184,-37.8283195],[144.9597931,-37.8282585],[144.9598389,-37.8283997],[144.9599457,-37.8283806],[144.9603119,-37.8283005],[144.9607849,-37.8281784],[144.9610291,-37.8281174],[144.9611206,-37.8281097],[144.96138,-37.8280602],[144.9616241,-37.8280602],[144.9617004,-37.8280792],[144.961853,-37.8280983],[144.9619751,-37.8281403],[144.9620514,-37.8281708],[144.9622803,-37.8282509],[144.9627228,-37.8285904],[144.9627838,-37.8285675],[144.9631805,-37.8288002],[144.9638367,-37.8294601],[144.9642029,-37.8298302],[144.964859,-37.8304977],[144.9651489,-37.83078],[144.9658356,-37.8314781],[144.9673462,-37.8310394],[144.9682922,-37.8307571],[144.9694061,-37.8304405],[144.9702148,-37.8302078],[144.9704132,-37.8301506],[144.9713135,-37.8298874],[144.9713287,-37.8301582],[144.9713287,-37.8304291],[144.9713593,-37.8306808],[144.9713593,-37.8307495],[144.9713898,-37.8310699],[144.971405,-37.8312187],[144.9714355,-37.8313789],[144.9714813,-37.8315277],[144.9715271,-37.8316803],[144.9715729,-37.8318405],[144.9716492,-37.8319778],[144.9717102,-37.8321304],[144.9717865,-37.8322792],[144.9716034,-37.8323288],[144.9716339,-37.832428],[144.9716644,-37.8325195],[144.9716949,-37.8326187],[144.9717102,-37.8327179],[144.9717407,-37.83284],[144.9717407,-37.8329697],[144.971756,-37.8330879],[144.971756,-37.8332901],[144.9717255,-37.8335304],[144.9717102,-37.8336678],[144.9716339,-37.8339081],[144.9716797,-37.834259],[144.9710693,-37.8351288],[144.970932,-37.8353195],[144.9707642,-37.8354988],[144.9706421,-37.8356285],[144.9705963,-37.8356781],[144.9703979,-37.8358688],[144.9701996,-37.8360405],[144.969986,-37.8362083],[144.9697723,-37.8363686],[144.9695435,-37.8365288],[144.9693146,-37.8366699],[144.969101,-37.8367805],[144.9688721,-37.8368988],[144.9686432,-37.8370094],[144.9684601,-37.8370895],[144.9682617,-37.8371696],[144.9680939,-37.8372383],[144.9678802,-37.8373108],[144.9676514,-37.8373795],[144.9667206,-37.8376579],[144.9658661,-37.8379707],[144.9657135,-37.8380394],[144.9655914,-37.838089],[144.965271,-37.8382072],[144.964859,-37.8383904],[144.9642639,-37.8386688],[144.9640045,-37.8387985],[144.9633789,-37.8391075],[144.9631348,-37.8392296],[144.9628754,-37.8393784],[144.9626312,-37.8395309],[144.9623718,-37.8396797],[144.9621277,-37.8398285],[144.9618835,-37.8399887],[144.9616394,-37.8401489],[144.9613953,-37.8403206],[144.9611969,-37.8404694],[144.9608002,-37.8407898],[144.9604492,-37.8410797],[144.9597321,-37.8416977],[144.9595032,-37.8418999],[144.959198,-37.8421593],[144.9586792,-37.8410492],[144.9581604,-37.8399773],[144.957901,-37.8393898],[144.9576263,-37.8387985],[144.9571686,-37.8378181],[144.9568939,-37.8372307],[144.954422,-37.8379478],[144.9524841,-37.8385086],[144.9523926,-37.8385506],[144.952301,-37.8386078],[144.9522095,-37.8386497],[144.9521332,-37.8386993],[144.9520416,-37.838768],[144.9519501,-37.8388405],[144.951889,-37.8389091],[144.9518433,-37.8389778],[144.9517822,-37.8390503],[144.9517517,-37.8391304],[144.9517212,-37.8392296],[144.9516907,-37.8393288],[144.9516907,-37.8394089],[144.9516907,-37.839489],[144.9517059,-37.8395882],[144.9517212,-37.8396683],[144.9517517,-37.8397484],[144.9518433,-37.8399277],[144.9510803,-37.8401489],[144.95047,-37.8403282],[144.9500427,-37.8404579],[144.9492188,-37.8406906],[144.9488525,-37.8407974],[144.947052,-37.84132],[144.9465179,-37.8410072],[144.9468994,-37.8401985],[144.9474792,-37.8389702],[144.9479828,-37.8378983],[144.9480743,-37.8376999],[144.9484711,-37.8368492],[144.9485168,-37.83675],[144.9487915,-37.8362007],[144.9488373,-37.8360901],[144.9488831,-37.835968],[144.9493561,-37.8349495],[144.9497528,-37.8340874],[144.949646,-37.8339996]]]}},{"type":"Feature","properties":{"SA2_NAME":"South Yarra - East","polygonId":68,"SA3_NAME":"Stonnington - West","AREASQKM":2.5172,"fillColor":"#89D548","strokeColor":"#89D548","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9869843,-37.8360481],[144.9870148,-37.8359184],[144.9870911,-37.8354988],[144.9871063,-37.8354683],[144.9872131,-37.8349609],[144.9872589,-37.8347588],[144.987381,-37.8341408],[144.9874268,-37.8338509],[144.9875183,-37.8334084],[144.9875793,-37.8330574],[144.9877014,-37.832489],[144.9877472,-37.8322487],[144.9878387,-37.8317184],[144.987915,-37.831398],[144.9879303,-37.8313179],[144.9879303,-37.8312378],[144.9879303,-37.8311691],[144.9879303,-37.831089],[144.9879303,-37.8310089],[144.987915,-37.8309479],[144.987915,-37.8309288],[144.9878998,-37.8308487],[144.9878845,-37.8307686],[144.9878693,-37.830719],[144.9878387,-37.8306274],[144.9878082,-37.8304787],[144.987793,-37.83041],[144.987793,-37.8303185],[144.987793,-37.8302498],[144.9878235,-37.8301201],[144.9878235,-37.8300781],[144.987915,-37.82967],[144.987915,-37.8296204],[144.9883728,-37.8299599],[144.9886017,-37.8301697],[144.9888153,-37.8303986],[144.9893951,-37.8309898],[144.9896088,-37.8311882],[144.9896698,-37.8312798],[144.9898529,-37.8315086],[144.990036,-37.8317375],[144.9901428,-37.8318596],[144.9902496,-37.8320198],[144.9903412,-37.8321304],[144.990387,-37.8322296],[144.9904327,-37.8323288],[144.9904938,-37.8323975],[144.9905701,-37.8325195],[144.9906311,-37.8325882],[144.9909058,-37.8328972],[144.9911346,-37.8330498],[144.9911957,-37.8330803],[144.9913635,-37.833149],[144.9914703,-37.8331795],[144.9916534,-37.8332176],[144.9918518,-37.8332481],[144.9920654,-37.8332672],[144.9922638,-37.8332787],[144.9924927,-37.8333092],[144.9927216,-37.8333206],[144.992981,-37.8333473],[144.993042,-37.8333473],[144.993103,-37.8333588],[144.9931793,-37.8333702],[144.9932709,-37.8333702],[144.9934235,-37.8334007],[144.994339,-37.8335991],[144.9949036,-37.8337898],[144.995575,-37.8340302],[144.9960632,-37.8342094],[144.9964142,-37.8342705],[144.996582,-37.8342896],[144.9966736,-37.8342972],[144.996933,-37.8342705],[144.9973602,-37.8342209],[144.9979706,-37.8340988],[144.9987335,-37.8339806],[144.9992065,-37.8339195],[144.9995117,-37.8338394],[144.9997406,-37.8337593],[144.999939,-37.8336906],[145.000351,-37.833519],[145.0006714,-37.8334579],[145.0010529,-37.8334885],[145.0014954,-37.8335991],[145.0021057,-37.8337898],[145.002533,-37.8339806],[145.0027313,-37.8341293],[145.0028839,-37.8342781],[145.0030212,-37.8344307],[145.0033417,-37.8345108],[145.0036621,-37.8344803],[145.003891,-37.8344193],[145.0040588,-37.8343086],[145.0041809,-37.8341675],[145.0042419,-37.83395],[145.0042572,-37.8336983],[145.0042419,-37.8333702],[145.0041504,-37.8330078],[145.0040283,-37.8326302],[145.0038605,-37.832119],[145.0037842,-37.8317795],[145.00383,-37.8315697],[145.003952,-37.83144],[145.0041199,-37.8313293],[145.004364,-37.8312187],[145.0045929,-37.8311691],[145.0048828,-37.8311691],[145.0051575,-37.8311882],[145.0054474,-37.8312607],[145.0057831,-37.8313599],[145.0061188,-37.8314705],[145.0061493,-37.8314896],[145.0062714,-37.8315277],[145.0064392,-37.8315697],[145.0063629,-37.8320007],[145.0062561,-37.8324776],[145.0061188,-37.833168],[145.0061035,-37.8332787],[145.005722,-37.8353195],[145.0054321,-37.8367996],[145.0053253,-37.8373108],[145.005249,-37.8377075],[145.0050812,-37.8385391],[145.0050507,-37.8386192],[145.0049133,-37.8394203],[145.0048065,-37.8400002],[145.004715,-37.8404999],[145.0046844,-37.8405876],[145.0046692,-37.8406677],[145.0045929,-37.8410797],[145.0045471,-37.8413086],[145.0045166,-37.8414307],[145.0044708,-37.8416977],[145.0044403,-37.8417892],[145.0043793,-37.8420792],[145.0043182,-37.8424797],[145.0042572,-37.8427582],[145.0042114,-37.8429985],[145.0040741,-37.843708],[145.0040131,-37.8440094],[145.0039215,-37.8444481],[145.0039215,-37.8445206],[145.0038605,-37.84478],[145.0037689,-37.8452072],[145.0037384,-37.8453979],[145.0035706,-37.8461876],[145.003479,-37.8466606],[145.0033722,-37.8471298],[145.0032806,-37.8476105],[145.0031738,-37.8480988],[145.0024109,-37.8479881],[145.0017548,-37.8479004],[145.0012054,-37.8478279],[145.0004425,-37.8477173],[144.9993896,-37.84758],[144.9989929,-37.8475189],[144.998642,-37.8474808],[144.9979095,-37.8473778],[144.9975433,-37.8473282],[144.9967194,-37.8472176],[144.9962311,-37.8471489],[144.9949951,-37.8469772],[144.994751,-37.8469391],[144.9941254,-37.846859],[144.9932709,-37.8467484],[144.992981,-37.8467102],[144.99263,-37.8466682],[144.9923401,-37.8466301],[144.9917297,-37.84655],[144.9914703,-37.8465195],[144.9904633,-37.8463898],[144.9900665,-37.8463287],[144.9895935,-37.8462677],[144.9893799,-37.8462486],[144.9887543,-37.8461685],[144.9885559,-37.846138],[144.9881592,-37.8460884],[144.9880219,-37.8460693],[144.9877167,-37.8460274],[144.98703,-37.8459396],[144.9869385,-37.8459282],[144.9860382,-37.8458099],[144.9850159,-37.8456802],[144.9852295,-37.8446083],[144.9852905,-37.8443489],[144.9854126,-37.8437805],[144.9854126,-37.8437004],[144.9855499,-37.8430672],[144.9855652,-37.8429794],[144.9856873,-37.8423882],[144.9858398,-37.8416672],[144.9858704,-37.8414879],[144.9859772,-37.8410072],[144.986084,-37.8404694],[144.986145,-37.8401375],[144.9863129,-37.8393173],[144.9863281,-37.8392677],[144.9864502,-37.8386307],[144.9865112,-37.8383179],[144.9866028,-37.8379478],[144.9866333,-37.83778],[144.9867401,-37.8372688],[144.9867706,-37.8371086],[144.9868469,-37.8367195],[144.9869843,-37.8360481]]]}},{"type":"Feature","properties":{"SA2_NAME":"South Yarra - West","polygonId":56,"SA3_NAME":"Melbourne City","AREASQKM":1.5027,"fillColor":"#89D548","strokeColor":"#89D548","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9745331,-37.8346672],[144.9744415,-37.8345604],[144.9741821,-37.8342705],[144.9741058,-37.8341904],[144.973999,-37.8341179],[144.9736328,-37.8338776],[144.973465,-37.8337593],[144.9734039,-37.8337173],[144.9728088,-37.8332901],[144.972641,-37.8331795],[144.9725037,-37.8330574],[144.9723663,-37.8329391],[144.9722443,-37.8328094],[144.9788971,-37.8336678],[144.9799194,-37.8337975],[144.9807129,-37.8339081],[144.9812775,-37.8339806],[144.9825134,-37.8341408],[144.9833527,-37.8342476],[144.9836731,-37.8342896],[144.9837952,-37.8336678],[144.9838715,-37.8332596],[144.9840851,-37.8321991],[144.9844208,-37.8305092],[144.9844818,-37.8301392],[144.9845734,-37.8297501],[144.9846191,-37.8294601],[144.9847107,-37.828968],[144.984848,-37.8283386],[144.9850006,-37.8283882],[144.9851837,-37.8284492],[144.9853516,-37.8285294],[144.9855042,-37.8286095],[144.9856567,-37.8286972],[144.9858093,-37.8287888],[144.9859467,-37.8288994],[144.9860687,-37.82901],[144.9865417,-37.8293686],[144.9872894,-37.8300781],[144.9875488,-37.8303185],[144.9877777,-37.8305473],[144.9878387,-37.8306274],[144.9878693,-37.830719],[144.9878845,-37.8307686],[144.9878998,-37.8308487],[144.987915,-37.8309288],[144.987915,-37.8309479],[144.9879303,-37.8310089],[144.9879303,-37.831089],[144.9879303,-37.8311691],[144.9879303,-37.8312378],[144.9879303,-37.8313179],[144.987915,-37.831398],[144.9878387,-37.8317184],[144.9877472,-37.8322487],[144.9877014,-37.832489],[144.9875793,-37.8330574],[144.9875183,-37.8334084],[144.9874268,-37.8338509],[144.987381,-37.8341408],[144.9872589,-37.8347588],[144.9872131,-37.8349609],[144.9871063,-37.8354683],[144.9870911,-37.8354988],[144.9870148,-37.8359184],[144.9869843,-37.8360481],[144.9868469,-37.8367195],[144.9867706,-37.8371086],[144.9867401,-37.8372688],[144.9866333,-37.83778],[144.9866028,-37.8379478],[144.9865112,-37.8383179],[144.9864502,-37.8386307],[144.9863281,-37.8392677],[144.9863129,-37.8393173],[144.986145,-37.8401375],[144.986084,-37.8404694],[144.9859772,-37.8410072],[144.9858704,-37.8414879],[144.9858398,-37.8416672],[144.9856873,-37.8423882],[144.9855652,-37.8429794],[144.9855499,-37.8430672],[144.9854126,-37.8437004],[144.9854126,-37.8437805],[144.9852905,-37.8443489],[144.9852295,-37.8446083],[144.9850159,-37.8456802],[144.9849396,-37.8461189],[144.9847717,-37.8470497],[144.9847412,-37.8472481],[144.9847107,-37.8474083],[144.9845734,-37.8483391],[144.9843292,-37.8498383],[144.9841919,-37.8506584],[144.9830322,-37.8505096],[144.9823303,-37.8504295],[144.9806366,-37.8502083],[144.9804382,-37.849659],[144.9803314,-37.8493881],[144.9801483,-37.8488579],[144.9797211,-37.8477173],[144.9795074,-37.8471107],[144.9794159,-37.8468704],[144.9790802,-37.8459702],[144.9786835,-37.8448486],[144.9785614,-37.8445473],[144.9783936,-37.8440475],[144.9782715,-37.843708],[144.9781342,-37.8433609],[144.9779968,-37.8429909],[144.9779205,-37.8427582],[144.9778137,-37.8424797],[144.9777222,-37.8422279],[144.9775391,-37.8417282],[144.9774017,-37.8413391],[144.9772797,-37.8410187],[144.9770813,-37.8404694],[144.9769897,-37.8402176],[144.9768829,-37.8399506],[144.9767914,-37.8396797],[144.9765778,-37.8390694],[144.9764404,-37.8387184],[144.9763489,-37.8384476],[144.9762573,-37.8381996],[144.976059,-37.8376694],[144.9758606,-37.8371506],[144.9755249,-37.8362083],[144.9754791,-37.8360672],[144.9754333,-37.835968],[144.9753418,-37.8358307],[144.9751892,-37.8355675],[144.9750366,-37.8353195],[144.9749756,-37.8351974],[144.9749298,-37.8351173],[144.9748688,-37.8350487],[144.9745331,-37.8346672]]]}},{"type":"Feature","properties":{"SA2_NAME":"Southbank","polygonId":57,"SA3_NAME":"Melbourne City","AREASQKM":3.0743,"fillColor":"#89D548","strokeColor":"#89D548","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9397736,-37.8254585],[144.9395447,-37.8252602],[144.9376984,-37.8236694],[144.937851,-37.8230896],[144.9398651,-37.8235207],[144.940506,-37.823658],[144.9420013,-37.8239708],[144.9423523,-37.8241005],[144.942627,-37.8243179],[144.9430237,-37.8246078],[144.9430389,-37.8246307],[144.9433136,-37.8248291],[144.9433594,-37.8248596],[144.9434204,-37.8248978],[144.9434814,-37.8249207],[144.9435425,-37.8249474],[144.9436035,-37.8249702],[144.9436798,-37.8249779],[144.9437408,-37.8249893],[144.944458,-37.8250694],[144.9451904,-37.8251381],[144.9459991,-37.8252296],[144.9462128,-37.8252373],[144.946991,-37.8252907],[144.9472504,-37.8252983],[144.9473419,-37.8252983],[144.9475555,-37.8252907],[144.9477234,-37.8252487],[144.9478607,-37.8252296],[144.9479675,-37.8252296],[144.9480896,-37.824749],[144.9481201,-37.8245583],[144.9480896,-37.8244476],[144.9480591,-37.8243103],[144.9480286,-37.8241997],[144.9479218,-37.8237572],[144.9479218,-37.8233795],[144.948349,-37.8233681],[144.9491882,-37.8234596],[144.9498138,-37.8235283],[144.9521942,-37.823719],[144.9533234,-37.8237],[144.9543915,-37.8235474],[144.9552612,-37.8233376],[144.9559784,-37.8230476],[144.9569092,-37.8225899],[144.95784,-37.8220787],[144.9580688,-37.8219681],[144.9590302,-37.8215103],[144.9599915,-37.8210373],[144.9606171,-37.8207474],[144.96138,-37.8205109],[144.9630127,-37.8200989],[144.9636688,-37.8199196],[144.9644165,-37.8197594],[144.9647675,-37.8197098],[144.9653778,-37.8196106],[144.9663086,-37.819458],[144.9664001,-37.8194504],[144.9671631,-37.8193283],[144.9679718,-37.8192406],[144.9682465,-37.8192177],[144.9682922,-37.8193283],[144.968338,-37.8194199],[144.9684296,-37.8196182],[144.9702301,-37.8195076],[144.9716187,-37.8194084],[144.9730988,-37.8198204],[144.9746399,-37.8208885],[144.976059,-37.8225975],[144.9766388,-37.8231888],[144.9774017,-37.823288],[144.9784393,-37.8244781],[144.9793243,-37.8255081],[144.9800568,-37.8260994],[144.9811249,-37.8267975],[144.9825134,-37.8272285],[144.9839325,-37.8274689],[144.9849243,-37.8276482],[144.9850311,-37.8276787],[144.9857635,-37.8278809],[144.986496,-37.8283081],[144.9870911,-37.8288574],[144.987915,-37.82967],[144.9878235,-37.8300781],[144.9878235,-37.8301201],[144.987793,-37.8302498],[144.987793,-37.8303185],[144.987793,-37.83041],[144.9878082,-37.8304787],[144.9878387,-37.8306274],[144.9877777,-37.8305473],[144.9875488,-37.8303185],[144.9872894,-37.8300781],[144.9865417,-37.8293686],[144.9860687,-37.82901],[144.9859467,-37.8288994],[144.9858093,-37.8287888],[144.9856567,-37.8286972],[144.9855042,-37.8286095],[144.9853516,-37.8285294],[144.9851837,-37.8284492],[144.9850006,-37.8283882],[144.984848,-37.8283386],[144.9847107,-37.828968],[144.9846191,-37.8294601],[144.9845734,-37.8297501],[144.9844818,-37.8301392],[144.9844208,-37.8305092],[144.9840851,-37.8321991],[144.9838715,-37.8332596],[144.9837952,-37.8336678],[144.9836731,-37.8342896],[144.9833527,-37.8342476],[144.9825134,-37.8341408],[144.9812775,-37.8339806],[144.9807129,-37.8339081],[144.9799194,-37.8337975],[144.9788971,-37.8336678],[144.9722443,-37.8328094],[144.9721222,-37.8326797],[144.9720612,-37.8326073],[144.9719238,-37.8324394],[144.9718323,-37.8323174],[144.9717865,-37.8322792],[144.9717102,-37.8321304],[144.9716492,-37.8319778],[144.9715729,-37.8318405],[144.9715271,-37.8316803],[144.9714813,-37.8315277],[144.9714355,-37.8313789],[144.971405,-37.8312187],[144.9713898,-37.8310699],[144.9713593,-37.8307495],[144.9713593,-37.8306808],[144.9713287,-37.8304291],[144.9713287,-37.8301582],[144.9713135,-37.8298874],[144.9704132,-37.8301506],[144.9702148,-37.8302078],[144.9694061,-37.8304405],[144.9682922,-37.8307571],[144.9673462,-37.8310394],[144.9658356,-37.8314781],[144.9651489,-37.83078],[144.964859,-37.8304977],[144.9642029,-37.8298302],[144.9638367,-37.8294601],[144.9631805,-37.8288002],[144.9627838,-37.8285675],[144.9627228,-37.8285904],[144.9622803,-37.8282509],[144.9620514,-37.8281708],[144.9619751,-37.8281403],[144.961853,-37.8280983],[144.9617004,-37.8280792],[144.9616241,-37.8280602],[144.96138,-37.8280602],[144.9611206,-37.8281097],[144.9610291,-37.8281174],[144.9607849,-37.8281784],[144.9603119,-37.8283005],[144.9599457,-37.8283806],[144.9598389,-37.8283997],[144.9597931,-37.8282585],[144.9595184,-37.8283195],[144.9590759,-37.8283806],[144.9584503,-37.8284302],[144.9582062,-37.8284378],[144.9577789,-37.8284378],[144.9572601,-37.8284187],[144.9571838,-37.8284073],[144.9570465,-37.8283997],[144.9564667,-37.8283195],[144.9561005,-37.8282585],[144.9557953,-37.8281898],[144.9555206,-37.8281288],[144.9551697,-37.8280602],[144.9549866,-37.8280182],[144.9547119,-37.8279572],[144.9539795,-37.8277893],[144.9535217,-37.8276978],[144.9534149,-37.8276787],[144.9529724,-37.8275986],[144.9524841,-37.8275108],[144.952179,-37.8274689],[144.9518585,-37.8274193],[144.9512329,-37.8273201],[144.950119,-37.8271179],[144.9496002,-37.8270378],[144.9490204,-37.8269501],[144.9485779,-37.8268776],[144.9483032,-37.8268394],[144.9478607,-37.8267479],[144.9477234,-37.8267403],[144.9475861,-37.8267403],[144.9474945,-37.8267479],[144.9472504,-37.8266792],[144.9470215,-37.8266296],[144.9468689,-37.8265877],[144.9465332,-37.826519],[144.9461212,-37.8264503],[144.945694,-37.8264008],[144.9449921,-37.8263092],[144.9445801,-37.8262405],[144.9429626,-37.8259583],[144.9422913,-37.8258705],[144.9414368,-37.8257904],[144.9405212,-37.8257294],[144.9403381,-37.8257294],[144.9400787,-37.8257294],[144.9397736,-37.8254585]]]}},{"type":"Feature","properties":{"SA2_NAME":"St Kilda","polygonId":64,"SA3_NAME":"Port Phillip","AREASQKM":3.901,"fillColor":"#90D743","strokeColor":"#90D743","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9702911,-37.8607788],[144.9701691,-37.8607101],[144.9699554,-37.8605576],[144.9699402,-37.860508],[144.9698792,-37.8604393],[144.9696808,-37.8602982],[144.9692993,-37.8600998],[144.9691315,-37.8599777],[144.9687958,-37.8597374],[144.9685822,-37.8596306],[144.9686127,-37.8595772],[144.9687195,-37.8595581],[144.9688416,-37.8594704],[144.9689331,-37.8593178],[144.9689026,-37.8592987],[144.9687653,-37.8593788],[144.9685822,-37.8594894],[144.9682922,-37.8594894],[144.9680328,-37.8594475],[144.9678192,-37.8593674],[144.9676819,-37.8592186],[144.9676361,-37.8591309],[144.9675598,-37.8589897],[144.967392,-37.8588104],[144.9671631,-37.8586998],[144.9668121,-37.858429],[144.9663239,-37.8580208],[144.9659119,-37.8577385],[144.9656677,-37.8574982],[144.9662476,-37.8568077],[144.9664917,-37.8565292],[144.9668884,-37.8560371],[144.9672699,-37.8555908],[144.9680634,-37.8546371],[144.9682617,-37.8543892],[144.968399,-37.8543472],[144.9689484,-37.8541603],[144.9701691,-37.8537292],[144.9706421,-37.85355],[144.9742889,-37.8521881],[144.9743652,-37.8521805],[144.9753571,-37.8536682],[144.9754791,-37.8537788],[144.9756775,-37.8538589],[144.9758911,-37.8538895],[144.97612,-37.8538704],[144.9783325,-37.8531876],[144.9785156,-37.8530807],[144.9785309,-37.8529091],[144.9790344,-37.8527603],[144.9788513,-37.8522186],[144.9785767,-37.851429],[144.9783478,-37.8507309],[144.9794159,-37.8504906],[144.9806366,-37.8502083],[144.9823303,-37.8504295],[144.9830322,-37.8505096],[144.9841919,-37.8506584],[144.9840698,-37.8513184],[144.9840698,-37.8513603],[144.9839478,-37.8520699],[144.9838257,-37.8527489],[144.9837036,-37.8535004],[144.9835815,-37.8541298],[144.98349,-37.8546791],[144.9834595,-37.8547592],[144.9833221,-37.855648],[144.9854431,-37.8559303],[144.9859009,-37.8559875],[144.9865723,-37.8560791],[144.9876709,-37.8562279],[144.9896698,-37.8564873],[144.9898834,-37.8565292],[144.9901123,-37.8565903],[144.9903412,-37.8566589],[144.9904938,-37.8567276],[144.9906616,-37.8568001],[144.9908142,-37.8568687],[144.9909668,-37.8569603],[144.9916077,-37.857338],[144.9918213,-37.85746],[144.9919434,-37.8575096],[144.9920807,-37.8575706],[144.9922638,-37.8576393],[144.9924927,-37.8577194],[144.9927521,-37.8577995],[144.9929962,-37.8578491],[144.9932709,-37.8578987],[144.9932098,-37.8581772],[144.9930725,-37.8590775],[144.9927826,-37.8605804],[144.9927216,-37.86092],[144.99263,-37.8614998],[144.9926147,-37.8615875],[144.9920502,-37.8615189],[144.9915924,-37.8614578],[144.9915314,-37.8617706],[144.9914703,-37.8620796],[144.9914703,-37.8621597],[144.9914093,-37.8624382],[144.991333,-37.8628883],[144.9913025,-37.8630409],[144.9912567,-37.8633308],[144.9912415,-37.86343],[144.9910889,-37.8642502],[144.9909058,-37.8653183],[144.9907227,-37.8663406],[144.9906158,-37.866848],[144.990509,-37.8674583],[144.9904938,-37.8675575],[144.9903412,-37.8683586],[144.9902191,-37.8690109],[144.9902039,-37.8691673],[144.9900818,-37.8697472],[144.989975,-37.8703079],[144.9896545,-37.8703804],[144.9888611,-37.8706894],[144.9887695,-37.870739],[144.988678,-37.8707809],[144.9879913,-37.8710403],[144.9873657,-37.8712807],[144.9873199,-37.8712997],[144.9867401,-37.8715172],[144.9859619,-37.8718185],[144.9848328,-37.8722496],[144.9843292,-37.8724403],[144.9836884,-37.8726883],[144.983551,-37.8727379],[144.9830627,-37.8729286],[144.9824219,-37.8731689],[144.981369,-37.8735886],[144.9798737,-37.8741684],[144.9779663,-37.8749084],[144.9775543,-37.8750687],[144.9768677,-37.8753395],[144.9745026,-37.8762703],[144.9744873,-37.8762207],[144.9744415,-37.8760681],[144.974411,-37.8759308],[144.974411,-37.8757591],[144.974411,-37.8755989],[144.974411,-37.8754387],[144.974411,-37.8752785],[144.9744415,-37.8751106],[144.9744415,-37.8747787],[144.9744415,-37.8746185],[144.9744263,-37.8744392],[144.9743805,-37.8742676],[144.97435,-37.8740807],[144.9743195,-37.8738899],[144.9742889,-37.8736992],[144.9742737,-37.8735275],[144.9742737,-37.8735008],[144.9742432,-37.8734589],[144.9741821,-37.8733788],[144.9741211,-37.8732796],[144.9741211,-37.8732605],[144.9738007,-37.8729591],[144.9736023,-37.8726883],[144.9733124,-37.8724785],[144.9731293,-37.872509],[144.9730988,-37.8724785],[144.9732819,-37.8723602],[144.9733124,-37.8722496],[144.9732819,-37.8721275],[144.9732971,-37.8719788],[144.9733429,-37.8719482],[144.9734192,-37.8719292],[144.973465,-37.8719597],[144.9736023,-37.8720703],[144.9737701,-37.8721581],[144.9739532,-37.8723297],[144.9741211,-37.8721886],[144.9740601,-37.8721199],[144.9740601,-37.8720894],[144.9742126,-37.8720284],[144.9744415,-37.8719902],[144.9747162,-37.8719177],[144.9748688,-37.8718796],[144.975174,-37.871769],[144.975235,-37.8717384],[144.9753418,-37.8717079],[144.9754639,-37.8716087],[144.9755096,-37.8715591],[144.975647,-37.8711586],[144.9756775,-37.8710899],[144.9756775,-37.8706894],[144.9756775,-37.8705902],[144.9756317,-37.8703995],[144.9756012,-37.8702583],[144.9755096,-37.8700905],[144.9754791,-37.8700104],[144.9753723,-37.8698273],[144.9752197,-37.8696709],[144.9751434,-37.8695908],[144.9745483,-37.8688087],[144.9741974,-37.8684578],[144.9738007,-37.8679771],[144.9734497,-37.8675995],[144.973053,-37.86726],[144.9726868,-37.8669281],[144.9724274,-37.8667603],[144.9721527,-37.8665581],[144.9718018,-37.86623],[144.9715118,-37.8659706],[144.9712677,-37.8657303],[144.9710541,-37.8656082],[144.9705963,-37.8652802],[144.9703827,-37.8651009],[144.9703217,-37.8650398],[144.9700317,-37.8648491],[144.9697266,-37.8646584],[144.9696808,-37.8645782],[144.9697113,-37.8645172],[144.970108,-37.8644676],[144.9704895,-37.8644409],[144.9707336,-37.8644104],[144.9709015,-37.8643608],[144.9709167,-37.8643379],[144.9710236,-37.8637505],[144.9710846,-37.8634682],[144.9710999,-37.8633575],[144.9710999,-37.8633385],[144.9711304,-37.8632507],[144.9711304,-37.862999],[144.9711304,-37.8628502],[144.9710999,-37.8627396],[144.9710846,-37.862648],[144.9710388,-37.8625298],[144.9709625,-37.8622894],[144.9707642,-37.8618698],[144.9707031,-37.8618889],[144.9706573,-37.8618889],[144.9706421,-37.8618774],[144.9706116,-37.8618584],[144.9705963,-37.8618279],[144.9706421,-37.8617897],[144.9707336,-37.8617592],[144.9703217,-37.8608284],[144.9702911,-37.8607788]]]}},{"type":"Feature","properties":{"SA2_NAME":"St Kilda East","polygonId":65,"SA3_NAME":"Port Phillip","AREASQKM":2.4135,"fillColor":"#90D743","strokeColor":"#90D743","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9973907,-37.8584595],[144.9980927,-37.8585587],[144.9981689,-37.8585701],[144.9986267,-37.8586273],[144.9993286,-37.8587189],[144.999649,-37.8587685],[144.9999237,-37.8588104],[145.0002441,-37.8588486],[145.0006256,-37.8588982],[145.0009918,-37.8589478],[145.001358,-37.8589973],[145.0028534,-37.8591995],[145.0040436,-37.8593597],[145.0041504,-37.8593674],[145.0048676,-37.8594704],[145.0051575,-37.8595085],[145.0056915,-37.8595772],[145.0059357,-37.8596077],[145.0068207,-37.8597298],[145.0070343,-37.8597603],[145.0078583,-37.8598709],[145.0083313,-37.8599281],[145.0087128,-37.8599777],[145.0088806,-37.8600006],[145.0093842,-37.8600693],[145.0095825,-37.8600998],[145.0101166,-37.8601685],[145.0105133,-37.860218],[145.0104218,-37.8607674],[145.0103607,-37.8610497],[145.0103149,-37.8613586],[145.0102539,-37.8616982],[145.0102081,-37.8619385],[145.0101776,-37.8620872],[145.0101318,-37.8623505],[145.0100708,-37.8626099],[145.0100403,-37.8628273],[145.0100098,-37.8629379],[145.0098724,-37.863739],[145.0097809,-37.8642387],[145.0097198,-37.8645592],[145.0095978,-37.8652191],[145.0095825,-37.8652992],[145.0094604,-37.8659592],[145.0093231,-37.8667603],[145.0092926,-37.8668175],[145.0092468,-37.8670998],[145.0091553,-37.867588],[145.0075531,-37.8673897],[145.006897,-37.8673096],[145.0057068,-37.8671494],[145.0051117,-37.8670807],[145.0046082,-37.8670197],[145.0040588,-37.8669472],[145.00354,-37.8668785],[145.0027008,-37.8667793],[145.0018005,-37.8666687],[145.001709,-37.8666573],[145.0015869,-37.8666382],[145.0000305,-37.8664474],[144.9998932,-37.8671989],[144.9997406,-37.8678894],[144.9997253,-37.8679886],[144.9996033,-37.8686905],[144.9995575,-37.8688889],[144.9994354,-37.8695107],[144.999115,-37.8711395],[144.9989929,-37.8718185],[144.9988098,-37.8727608],[144.9986267,-37.8736572],[144.9985199,-37.8741608],[144.9984589,-37.8744774],[144.9983673,-37.8750191],[144.9983215,-37.8752098],[144.9981995,-37.8758698],[144.9981689,-37.8760109],[144.9980011,-37.8769073],[144.9979248,-37.8772888],[144.997757,-37.8781509],[144.9977264,-37.8782997],[144.9976196,-37.8788681],[144.997406,-37.8799782],[144.9973602,-37.8802376],[144.9973297,-37.8803596],[144.9971313,-37.8814392],[144.9970703,-37.8817902],[144.996994,-37.8821182],[144.9969635,-37.8823204],[144.9967346,-37.8834991],[144.9959412,-37.8821487],[144.9957581,-37.8818588],[144.9953918,-37.8812599],[144.995224,-37.8810196],[144.9949188,-37.8805389],[144.9946747,-37.8801384],[144.9945221,-37.879879],[144.9942932,-37.8795395],[144.9940338,-37.8791199],[144.9937439,-37.8786697],[144.9936523,-37.8785286],[144.9935913,-37.8784409],[144.9934998,-37.8782883],[144.9933014,-37.8779678],[144.993103,-37.8776398],[144.992691,-37.8769989],[144.9922333,-37.8762474],[144.9918213,-37.8755875],[144.9915771,-37.8752098],[144.991272,-37.8747177],[144.9911499,-37.8745193],[144.9908752,-37.8740807],[144.9907227,-37.8738289],[144.990509,-37.8735199],[144.9900513,-37.8727798],[144.9898529,-37.8724594],[144.9896393,-37.8721199],[144.9894409,-37.871788],[144.9887695,-37.870739],[144.9888611,-37.8706894],[144.9896545,-37.8703804],[144.989975,-37.8703079],[144.9900818,-37.8697472],[144.9902039,-37.8691673],[144.9902191,-37.8690109],[144.9903412,-37.8683586],[144.9904938,-37.8675575],[144.990509,-37.8674583],[144.9906158,-37.866848],[144.9907227,-37.8663406],[144.9909058,-37.8653183],[144.9910889,-37.8642502],[144.9912415,-37.86343],[144.9912567,-37.8633308],[144.9913025,-37.8630409],[144.991333,-37.8628883],[144.9914093,-37.8624382],[144.9914703,-37.8621597],[144.9914703,-37.8620796],[144.9915314,-37.8617706],[144.9915924,-37.8614578],[144.9920502,-37.8615189],[144.9926147,-37.8615875],[144.99263,-37.8614998],[144.9927216,-37.86092],[144.9927826,-37.8605804],[144.9930725,-37.8590775],[144.9932098,-37.8581772],[144.9932709,-37.8578987],[144.9937897,-37.8579788],[144.9953156,-37.8581772],[144.9958954,-37.8582573],[144.9967957,-37.8583794],[144.9973907,-37.8584595]]]}},{"type":"Feature","properties":{"SA2_NAME":"Thornbury","polygonId":43,"SA3_NAME":"Darebin - South","AREASQKM":4.9972,"fillColor":"#ACDC30","strokeColor":"#ACDC30","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9812622,-37.7525673],[144.981369,-37.7524872],[144.9815674,-37.7523804],[144.981781,-37.7521896],[144.9818115,-37.7520981],[144.981781,-37.7518806],[144.9817657,-37.7517509],[144.9816437,-37.7514877],[144.9815063,-37.7513504],[144.9813232,-37.7510376],[144.9812927,-37.7509499],[144.9812622,-37.7508087],[144.9812012,-37.7506981],[144.9811401,-37.7506104],[144.9809418,-37.7504387],[144.980835,-37.7502708],[144.983551,-37.7505302],[144.9835358,-37.7505989],[144.9836426,-37.7506104],[144.9843292,-37.750679],[144.9855499,-37.7507973],[144.9859314,-37.7508392],[144.9874725,-37.7509995],[144.987854,-37.7510376],[144.9880066,-37.7510376],[144.9881134,-37.751049],[144.9892426,-37.7511597],[144.990036,-37.7512474],[144.9911499,-37.751358],[144.9925842,-37.7515106],[144.9938965,-37.7516479],[144.9949188,-37.7517586],[144.9955292,-37.7516708],[144.9987183,-37.7519798],[144.9990692,-37.752018],[144.9993439,-37.7520485],[144.9996338,-37.752079],[145.0010834,-37.7522278],[145.0011139,-37.7522278],[145.0016479,-37.7522888],[145.0022125,-37.7523499],[145.0026398,-37.7523994],[145.0026703,-37.7523994],[145.0031281,-37.7524605],[145.0036621,-37.7525177],[145.0041504,-37.7525673],[145.0053101,-37.7527084],[145.0056152,-37.752739],[145.0063934,-37.7528305],[145.0075226,-37.7529602],[145.0085907,-37.7530899],[145.0087738,-37.753109],[145.0102997,-37.7532883],[145.0108948,-37.7533607],[145.0124512,-37.7535286],[145.0131073,-37.7535973],[145.0140991,-37.7537193],[145.0156555,-37.7538872],[145.0163574,-37.7539673],[145.018631,-37.7542191],[145.0188446,-37.7542381],[145.0205994,-37.7544289],[145.023056,-37.7546883],[145.0240631,-37.7547989],[145.0247803,-37.754879],[145.0258331,-37.7549973],[145.0267181,-37.7550888],[145.0285492,-37.7552872],[145.0285339,-37.7554474],[145.0301514,-37.7556076],[145.0313568,-37.7557297],[145.0314331,-37.7558098],[145.0314789,-37.7558594],[145.0315399,-37.7558899],[145.0317078,-37.7559891],[145.0317993,-37.7560501],[145.0320129,-37.7561989],[145.032135,-37.756321],[145.0322418,-37.7564507],[145.0322571,-37.7565994],[145.0322418,-37.7567787],[145.0321808,-37.7568474],[145.0321503,-37.7569084],[145.0318146,-37.7571373],[145.031723,-37.7572098],[145.031662,-37.7572479],[145.0314789,-37.75737],[145.0313721,-37.7574196],[145.0312195,-37.7574692],[145.0306549,-37.7574577],[145.0303192,-37.7574196],[145.0301514,-37.7574196],[145.0297699,-37.7574806],[145.02948,-37.7575493],[145.0293427,-37.7575989],[145.0292206,-37.7576904],[145.0290985,-37.7577896],[145.0290222,-37.7580299],[145.0290985,-37.7581787],[145.0291748,-37.7584076],[145.0293121,-37.7587395],[145.0293427,-37.7588997],[145.0294189,-37.7590904],[145.0295105,-37.7591972],[145.0295563,-37.7592506],[145.0296478,-37.7594185],[145.0297241,-37.7595978],[145.0298615,-37.7598076],[145.029953,-37.7600288],[145.0299225,-37.7602272],[145.0298004,-37.7604103],[145.0296326,-37.7605591],[145.0292511,-37.7607689],[145.029007,-37.7609177],[145.028717,-37.7611275],[145.0285492,-37.7612877],[145.0285034,-37.7613487],[145.0284119,-37.7614975],[145.0283813,-37.7616272],[145.028183,-37.7619209],[145.0279999,-37.7622986],[145.0279388,-37.7623901],[145.0279236,-37.7625084],[145.0279083,-37.7625999],[145.0278931,-37.7626801],[145.0278931,-37.7627678],[145.0278931,-37.7628784],[145.0278625,-37.7630577],[145.0278625,-37.7631607],[145.0278625,-37.7632904],[145.0278473,-37.7633781],[145.027832,-37.7634697],[145.027832,-37.763588],[145.027832,-37.7637405],[145.027832,-37.7637901],[145.0278168,-37.7638206],[145.0278778,-37.7639999],[145.0280304,-37.7640991],[145.0283508,-37.7642097],[145.0284729,-37.7642479],[145.028595,-37.7642708],[145.028717,-37.7642975],[145.0287933,-37.7643204],[145.0288696,-37.7643509],[145.0289612,-37.7643776],[145.029068,-37.7644005],[145.0291748,-37.7644386],[145.0293579,-37.7644997],[145.0294189,-37.7645302],[145.02948,-37.7645607],[145.029541,-37.7645798],[145.0296326,-37.7645988],[145.0297546,-37.7646294],[145.0298462,-37.7646599],[145.029953,-37.7646904],[145.0300598,-37.7647285],[145.0301971,-37.7647781],[145.030304,-37.7648201],[145.0304108,-37.7648506],[145.0305328,-37.7649078],[145.0306091,-37.7649574],[145.0307007,-37.7650299],[145.0307617,-37.76511],[145.0308228,-37.7651978],[145.030899,-37.7653885],[145.0309448,-37.7654991],[145.0309906,-37.7656288],[145.0310211,-37.7657585],[145.0311127,-37.7659988],[145.0311432,-37.7661095],[145.0311584,-37.7662086],[145.0311737,-37.7662888],[145.031189,-37.7663803],[145.031189,-37.766468],[145.0312042,-37.7665596],[145.031189,-37.7666283],[145.0305939,-37.7665596],[145.0285492,-37.7663498],[145.0274048,-37.7662277],[145.0264893,-37.7661285],[145.0246124,-37.7659302],[145.0215149,-37.7655983],[145.0203705,-37.76548],[145.0192413,-37.765358],[145.0181122,-37.7652397],[145.0170288,-37.7651291],[145.015976,-37.7650185],[145.0122528,-37.7646179],[145.0104523,-37.7644272],[145.0087585,-37.7642479],[145.0075073,-37.7641106],[145.006546,-37.7639999],[145.0053711,-37.7638702],[145.0042419,-37.7637482],[145.0032196,-37.7636299],[145.0027924,-37.763588],[145.0023193,-37.7635307],[145.0018616,-37.7634773],[145.0010223,-37.7633896],[145.0004272,-37.7633209],[145.0003052,-37.7633095],[144.9998016,-37.7632599],[144.9999084,-37.7626877],[144.9993439,-37.7626305],[144.9992828,-37.762619],[144.998764,-37.762558],[144.9977112,-37.7624397],[144.9969025,-37.7622795],[144.9963531,-37.7622185],[144.9956665,-37.7621384],[144.995224,-37.7620888],[144.9950104,-37.7620583],[144.994339,-37.7619781],[144.993454,-37.761879],[144.9927521,-37.7617989],[144.992691,-37.7620506],[144.9873657,-37.7614288],[144.987381,-37.7613602],[144.987442,-37.7610779],[144.9875031,-37.7607307],[144.9876251,-37.7600479],[144.9878082,-37.7590981],[144.9879913,-37.7581787],[144.9854126,-37.7578773],[144.98526,-37.7578773],[144.9844971,-37.7577972],[144.9837494,-37.7577209],[144.9806824,-37.7573509],[144.9801636,-37.7572899],[144.9798737,-37.7564583],[144.9797821,-37.7562599],[144.9796906,-37.7556496],[144.979599,-37.7553673],[144.9795532,-37.7552109],[144.9794922,-37.7550697],[144.9794617,-37.7550087],[144.9794617,-37.7549706],[144.9795074,-37.7548676],[144.9796295,-37.7547684],[144.9796448,-37.7547073],[144.9795685,-37.7546196],[144.9795074,-37.7545509],[144.9792938,-37.7543678],[144.9792328,-37.7542191],[144.9792938,-37.7539978],[144.9793396,-37.7539101],[144.9794312,-37.7537575],[144.9797516,-37.7533493],[144.97995,-37.7531586],[144.9801178,-37.7530403],[144.9802246,-37.7530098],[144.9804535,-37.7529488],[144.9804993,-37.7529182],[144.9806213,-37.7528305],[144.9807739,-37.7526894],[144.9808197,-37.7526779],[144.9810791,-37.7526894],[144.9811401,-37.7526588],[144.9812164,-37.7525978],[144.9812622,-37.7525673]]]}},{"type":"Feature","properties":{"SA2_NAME":"Toorak","polygonId":69,"SA3_NAME":"Stonnington - West","AREASQKM":4.3233,"fillColor":"#B1DD2F","strokeColor":"#B1DD2F","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[145.0046844,-37.8405876],[145.004715,-37.8404999],[145.0048065,-37.8400002],[145.0049133,-37.8394203],[145.0050507,-37.8386192],[145.0050812,-37.8385391],[145.005249,-37.8377075],[145.0053253,-37.8373108],[145.0054321,-37.8367996],[145.005722,-37.8353195],[145.0061035,-37.8332787],[145.0061188,-37.833168],[145.0062561,-37.8324776],[145.0063629,-37.8320007],[145.0064392,-37.8315697],[145.0067596,-37.8316574],[145.0071716,-37.8317299],[145.007431,-37.8317909],[145.0076752,-37.8318672],[145.0079041,-37.8320198],[145.0081635,-37.8321991],[145.0083618,-37.8323708],[145.0084991,-37.8325386],[145.0086212,-37.8327484],[145.0088654,-37.833168],[145.0090027,-37.8333282],[145.00914,-37.8334389],[145.0093384,-37.8335075],[145.0095367,-37.8335381],[145.0096893,-37.833519],[145.0098724,-37.8334198],[145.0100708,-37.8332672],[145.0102997,-37.8330688],[145.0104523,-37.8328705],[145.0105133,-37.8326607],[145.0105591,-37.8323898],[145.0106201,-37.8319397],[145.0106812,-37.8316879],[145.0108337,-37.831459],[145.0110168,-37.8312798],[145.0113831,-37.8310585],[145.0119629,-37.8307381],[145.0122833,-37.8306007],[145.0125122,-37.8305397],[145.012619,-37.8305206],[145.0127106,-37.8305092],[145.0129089,-37.8304977],[145.0131378,-37.8305397],[145.0134583,-37.8306198],[145.0137329,-37.8306999],[145.0139313,-37.8307495],[145.0141907,-37.8308601],[145.0143738,-37.8309402],[145.01474,-37.8311386],[145.0151215,-37.8313484],[145.0154114,-37.8315392],[145.015686,-37.8316879],[145.016098,-37.8318901],[145.0163422,-37.8320084],[145.0166473,-37.8322105],[145.0168152,-37.8322487],[145.0170288,-37.8322372],[145.0172729,-37.8321609],[145.0175629,-37.8320389],[145.0179596,-37.8318596],[145.0183105,-37.8317108],[145.0185699,-37.8316498],[145.0189056,-37.8316193],[145.019165,-37.8316193],[145.0194244,-37.8316574],[145.0198059,-37.8317375],[145.0200806,-37.8318176],[145.0202789,-37.8318787],[145.0207214,-37.8319893],[145.0209961,-37.832058],[145.0211639,-37.8321304],[145.0217133,-37.8323402],[145.022171,-37.8326797],[145.0222015,-37.8327675],[145.0222931,-37.8329773],[145.0223694,-37.83321],[145.0224304,-37.8334999],[145.022522,-37.8337402],[145.0226898,-37.8339996],[145.0229034,-37.8341675],[145.0232086,-37.8342896],[145.0235596,-37.8343697],[145.0239563,-37.8344307],[145.0244293,-37.8344879],[145.0245514,-37.8344994],[145.0246124,-37.8344879],[145.0247498,-37.8346672],[145.0249023,-37.8347893],[145.0250092,-37.8348885],[145.0251312,-37.8350182],[145.0252991,-37.8352203],[145.0254059,-37.8353081],[145.0254974,-37.8353996],[145.025589,-37.8354874],[145.0257721,-37.835659],[145.0258789,-37.8357697],[145.0264587,-37.8363075],[145.0266571,-37.8365173],[145.0269012,-37.8367386],[145.0270233,-37.8368492],[145.0271912,-37.836998],[145.0273132,-37.8371086],[145.0274048,-37.8371696],[145.0276337,-37.8373489],[145.027832,-37.8375282],[145.0279083,-37.8376007],[145.0280609,-37.8376694],[145.0284119,-37.83778],[145.0284729,-37.8377876],[145.0291595,-37.8378181],[145.0298157,-37.8378372],[145.029892,-37.8378372],[145.0304108,-37.8378105],[145.0307617,-37.8377495],[145.0309753,-37.8376808],[145.0310974,-37.8376274],[145.031189,-37.8375778],[145.0312653,-37.8375282],[145.0313873,-37.8374481],[145.0314789,-37.8373909],[145.0316162,-37.8373375],[145.0316925,-37.8373108],[145.0317688,-37.8372879],[145.0318909,-37.8372803],[145.0321045,-37.8372803],[145.0323181,-37.8373108],[145.0325317,-37.8373299],[145.0326691,-37.8373489],[145.0325317,-37.8382072],[145.0322723,-37.8396683],[145.0322418,-37.8398285],[145.0317535,-37.839798],[145.031601,-37.8406372],[145.0315399,-37.8409805],[145.0315094,-37.8409805],[145.0315094,-37.8410378],[145.0314484,-37.8413696],[145.0314636,-37.8414497],[145.0314484,-37.8415108],[145.0313568,-37.8419609],[145.0313568,-37.8419685],[145.0313416,-37.8420105],[145.0311432,-37.8431702],[145.0310516,-37.8436394],[145.0310516,-37.8437195],[145.0314178,-37.8437576],[145.0315247,-37.8437805],[145.0313568,-37.8446999],[145.031189,-37.8455772],[145.0309601,-37.8467407],[145.0309296,-37.8469009],[145.0306702,-37.8482704],[145.0306091,-37.848629],[145.0303802,-37.8498077],[145.0302429,-37.8505974],[145.0302124,-37.850708],[145.0300446,-37.8516197],[145.0296631,-37.8515701],[145.02948,-37.8515472],[145.0285645,-37.851429],[145.0279083,-37.8513374],[145.0275574,-37.8512878],[145.026886,-37.8512077],[145.0254364,-37.8510208],[145.0248413,-37.8509407],[145.0241394,-37.8508377],[145.0237274,-37.8507881],[145.0225983,-37.8506393],[145.0214386,-37.8504906],[145.020462,-37.8503609],[145.0202942,-37.850338],[145.0197296,-37.8502693],[145.0188751,-37.8501587],[145.0182648,-37.8500786],[145.0177765,-37.8500099],[145.016861,-37.8498878],[145.0154877,-37.8497086],[145.0124207,-37.8492889],[145.0123138,-37.8492775],[145.0122833,-37.8492699],[145.0103607,-37.8490295],[145.0097809,-37.8489494],[145.009201,-37.8488808],[145.00914,-37.8488693],[145.0086975,-37.8488083],[145.0078583,-37.8486977],[145.0074158,-37.8486481],[145.0071564,-37.8486099],[145.0067749,-37.8485603],[145.0062256,-37.8484879],[145.0053101,-37.8483696],[145.0044556,-37.848259],[145.0037689,-37.8481789],[145.0031738,-37.8480988],[145.0032806,-37.8476105],[145.0033722,-37.8471298],[145.003479,-37.8466606],[145.0035706,-37.8461876],[145.0037384,-37.8453979],[145.0037689,-37.8452072],[145.0038605,-37.84478],[145.0039215,-37.8445206],[145.0039215,-37.8444481],[145.0040131,-37.8440094],[145.0040741,-37.843708],[145.0042114,-37.8429985],[145.0042572,-37.8427582],[145.0043182,-37.8424797],[145.0043793,-37.8420792],[145.0044403,-37.8417892],[145.0044708,-37.8416977],[145.0045166,-37.8414307],[145.0045471,-37.8413086],[145.0045929,-37.8410797],[145.0046692,-37.8406677],[145.0046844,-37.8405876]]]}},{"type":"Feature","properties":{"SA2_NAME":"West Melbourne","polygonId":58,"SA3_NAME":"Melbourne City","AREASQKM":6.1992,"fillColor":"#DEE318","strokeColor":"#DEE318","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[144.9075775,-37.8061295],[144.9076691,-37.8059082],[144.9082184,-37.8045998],[144.908432,-37.8041496],[144.9085999,-37.8037605],[144.908905,-37.8031273],[144.9092712,-37.8024101],[144.9095917,-37.8017998],[144.9101105,-37.8010483],[144.910202,-37.8009186],[144.9104004,-37.8006287],[144.910675,-37.8003387],[144.9109802,-37.8000984],[144.9113464,-37.7998695],[144.9116974,-37.7997284],[144.9120636,-37.7996292],[144.9124146,-37.7995682],[144.9127655,-37.7995682],[144.9131165,-37.7996101],[144.9134827,-37.7997398],[144.9137573,-37.7999802],[144.9140625,-37.8001785],[144.9144135,-37.8002472],[144.9147949,-37.8002281],[144.9150696,-37.8001099],[144.9154663,-37.7998276],[144.9158783,-37.7994576],[144.9161987,-37.7990799],[144.9163818,-37.7987595],[144.9165039,-37.7983589],[144.9164886,-37.7982101],[144.9197235,-37.7987099],[144.9220428,-37.7990379],[144.9256592,-37.7995605],[144.9258118,-37.7994385],[144.9260406,-37.799469],[144.9271851,-37.7996483],[144.9276428,-37.799839],[144.9296417,-37.8001785],[144.9323578,-37.8008194],[144.9341888,-37.8014107],[144.9358978,-37.8022804],[144.9365234,-37.8025589],[144.937851,-37.8030777],[144.9394989,-37.8043404],[144.9410248,-37.805378],[144.9412079,-37.8055992],[144.9412994,-37.8057098],[144.9414368,-37.8058395],[144.9418335,-37.8061485],[144.9418945,-37.8063202],[144.9420013,-37.80653],[144.942627,-37.8073196],[144.9428101,-37.8075676],[144.9433594,-37.8082695],[144.9438324,-37.8088875],[144.9443359,-37.8095207],[144.9447632,-37.8100586],[144.9451904,-37.8105888],[144.9456024,-37.8111076],[144.9459686,-37.8115692],[144.9460144,-37.8116379],[144.9454346,-37.8118591],[144.9452362,-37.812088],[144.9450836,-37.8120575],[144.944931,-37.8120499],[144.9447021,-37.8120689],[144.9437103,-37.812458],[144.943512,-37.8125191],[144.9433289,-37.8125381],[144.9431763,-37.8125381],[144.9430237,-37.8125],[144.9428711,-37.8124504],[144.9420166,-37.8119507],[144.9413605,-37.8115997],[144.9408112,-37.8113289],[144.940094,-37.8109703],[144.9391022,-37.8105087],[144.9385071,-37.8102684],[144.937912,-37.8100471],[144.9372253,-37.8098373],[144.9367828,-37.8097191],[144.9359589,-37.8095703],[144.9354248,-37.8095093],[144.9350128,-37.8094482],[144.9347229,-37.8101501],[144.9346924,-37.8103104],[144.9346619,-37.8105278],[144.9346924,-37.8119087],[144.934433,-37.8126678],[144.9342499,-37.8129005],[144.9341278,-37.8137093],[144.934082,-37.8138885],[144.934021,-37.8143578],[144.9339447,-37.8146973],[144.9338379,-37.8151398],[144.9337311,-37.8155098],[144.9334259,-37.8164673],[144.9328613,-37.8180199],[144.932373,-37.8192673],[144.9321594,-37.8198586],[144.931839,-37.8207283],[144.9318237,-37.8208275],[144.9314117,-37.8207893],[144.931427,-37.8206902],[144.9309692,-37.8206406],[144.9309387,-37.8207207],[144.9279633,-37.8204002],[144.9279785,-37.8203201],[144.9271393,-37.8202286],[144.9271393,-37.8201981],[144.9269409,-37.820179],[144.9269257,-37.8202095],[144.9268036,-37.8201904],[144.9268036,-37.8201599],[144.9263611,-37.8201103],[144.9263458,-37.8201408],[144.9255524,-37.8200607],[144.9255524,-37.8200188],[144.9251404,-37.8199806],[144.9251251,-37.8200073],[144.9247894,-37.8199806],[144.9203644,-37.8200302],[144.9197693,-37.8200302],[144.9173889,-37.8203773],[144.9157867,-37.82061],[144.9128571,-37.8210373],[144.9128723,-37.8211098],[144.9120026,-37.8214378],[144.9119415,-37.8214302],[144.9116821,-37.8214874],[144.9114532,-37.8216209],[144.9113312,-37.8216095],[144.9109802,-37.8217201],[144.9104614,-37.8218307],[144.9101105,-37.8219872],[144.9098511,-37.8220406],[144.9095154,-37.8222275],[144.9082336,-37.8227272],[144.9070282,-37.8232994],[144.9055634,-37.8228798],[144.9061279,-37.8222504],[144.9065094,-37.8215904],[144.9066315,-37.8210182],[144.906601,-37.8201675],[144.9064789,-37.819149],[144.9062347,-37.818119],[144.905838,-37.8167877],[144.9055939,-37.8158989],[144.9054718,-37.8153801],[144.9054413,-37.8152885],[144.9054413,-37.8142395],[144.9054565,-37.813488],[144.9055634,-37.8127708],[144.9057159,-37.8118706],[144.9059296,-37.8111382],[144.9061127,-37.8104897],[144.9062195,-37.8101196],[144.9062805,-37.8097878],[144.906311,-37.8095093],[144.9063721,-37.8091583],[144.9064331,-37.8088379],[144.9066925,-37.8082809],[144.9069519,-37.8076286],[144.907196,-37.8070183],[144.9075775,-37.8061295]]]}},{"type":"Feature","properties":{"SA2_NAME":"Yarra - North","polygonId":76,"SA3_NAME":"Yarra","AREASQKM":5.2089,"fillColor":"#F7E620","strokeColor":"#F7E620","strokeWeight":1},"geometry":{"type":"Polygon","coordinates":[[[145.0279388,-37.7813606],[145.0286713,-37.7812195],[145.0300598,-37.7809601],[145.0311432,-37.7807579],[145.0322571,-37.7805481],[145.0334167,-37.7803307],[145.0339203,-37.7802391],[145.0344391,-37.780098],[145.0345612,-37.7800598],[145.0346832,-37.7800179],[145.0347748,-37.7799683],[145.0348816,-37.7799187],[145.0349731,-37.7798576],[145.0350647,-37.7798004],[145.0351562,-37.7797279],[145.0352325,-37.7796478],[145.0358124,-37.7790489],[145.035965,-37.7788773],[145.0360718,-37.7788887],[145.0361328,-37.7789078],[145.0361786,-37.7789307],[145.0362549,-37.7789688],[145.0363312,-37.7790108],[145.036377,-37.7790375],[145.0364227,-37.77911],[145.0364838,-37.7791901],[145.0365295,-37.7794189],[145.0365601,-37.7794876],[145.0365906,-37.7795181],[145.0366669,-37.7795601],[145.0367584,-37.7795982],[145.03685,-37.7796288],[145.0370026,-37.7796402],[145.0371399,-37.7796402],[145.0372314,-37.7796478],[145.0373077,-37.7796478],[145.0373535,-37.7796288],[145.037384,-37.7796288],[145.0373993,-37.7796173],[145.0374451,-37.7796097],[145.0375214,-37.7795677],[145.0375519,-37.7795601],[145.0375824,-37.7795486],[145.0376434,-37.7795296],[145.0376892,-37.7795105],[145.037735,-37.77948],[145.0378113,-37.7793884],[145.0378571,-37.7793274],[145.0379028,-37.7792778],[145.0379791,-37.7792282],[145.0380402,-37.7792091],[145.0381012,-37.7791786],[145.0381317,-37.7791672],[145.0381775,-37.7791672],[145.0382233,-37.7791786],[145.0382843,-37.7791977],[145.0383911,-37.7792282],[145.0384979,-37.7792778],[145.0385742,-37.7793274],[145.03862,-37.779438],[145.03862,-37.7795486],[145.0385895,-37.7796898],[145.0385742,-37.7798195],[145.0385742,-37.7798691],[145.0385437,-37.7799606],[145.0384979,-37.7800407],[145.0384827,-37.7800903],[145.0384521,-37.7801895],[145.0384216,-37.7802696],[145.0384216,-37.7803001],[145.0384216,-37.7803574],[145.0384064,-37.7804108],[145.0383606,-37.7804375],[145.038269,-37.7804985],[145.0382233,-37.780529],[145.0381775,-37.7805405],[145.0381012,-37.7805481],[145.0379791,-37.7805595],[145.0379028,-37.7805786],[145.0378723,-37.7805977],[145.0378418,-37.7806282],[145.0378418,-37.7806702],[145.0378418,-37.7807198],[145.0378418,-37.7807503],[145.0378876,-37.7808189],[145.0379333,-37.78088],[145.0379639,-37.7809181],[145.0380096,-37.7809982],[145.0380402,-37.7810707],[145.0380707,-37.7812004],[145.0380554,-37.7812691],[145.0380096,-37.7813492],[145.0379639,-37.7813873],[145.0379028,-37.7814674],[145.037735,-37.781559],[145.0377045,-37.7815781],[145.0376892,-37.7815895],[145.037674,-37.7815895],[145.0376129,-37.7816086],[145.0375519,-37.78162],[145.0374451,-37.7816086],[145.0373535,-37.7815895],[145.0372925,-37.781559],[145.0372009,-37.7815399],[145.0371552,-37.7815285],[145.0370789,-37.7815208],[145.0370178,-37.7815208],[145.0369873,-37.7815208],[145.0369415,-37.7815475],[145.0368958,-37.7816086],[145.0368805,-37.7816696],[145.0368652,-37.7817574],[145.03685,-37.7818375],[145.03685,-37.7819176],[145.03685,-37.7819672],[145.0368652,-37.7820206],[145.0368805,-37.7820587],[145.0369568,-37.7821503],[145.0369873,-37.7821999],[145.0370331,-37.7822495],[145.0370636,-37.7822876],[145.0371094,-37.7823181],[145.0371704,-37.7823372],[145.0372009,-37.7823486],[145.037262,-37.7823792],[145.0373383,-37.7823982],[145.0373993,-37.7824097],[145.0374603,-37.7824097],[145.0375214,-37.7823982],[145.0375824,-37.7823982],[145.037674,-37.7823982],[145.0377502,-37.7824402],[145.037796,-37.7824974],[145.0378113,-37.7825775],[145.0378418,-37.7826576],[145.0378418,-37.7827187],[145.0378571,-37.7827682],[145.0378876,-37.7828178],[145.0378723,-37.7828598],[145.0378723,-37.782959],[145.0378876,-37.7830276],[145.0379181,-37.7831078],[145.0379181,-37.7831497],[145.0379181,-37.7831879],[145.0379333,-37.7832375],[145.0379639,-37.7832985],[145.0381165,-37.7834473],[145.0381775,-37.7835007],[145.038269,-37.7835503],[145.0383606,-37.7835693],[145.0384521,-37.7835693],[145.0385132,-37.7835693],[145.03862,-37.7835693],[145.0388336,-37.7835693],[145.0389404,-37.7835884],[145.0390472,-37.7836075],[145.0391388,-37.7836494],[145.0392303,-37.78368],[145.0393372,-37.7837296],[145.0394897,-37.7837906],[145.0397339,-37.7839279],[145.0397797,-37.7839699],[145.0399475,-37.7840881],[145.0400238,-37.7841377],[145.0401001,-37.7841873],[145.0401917,-37.7842178],[145.0400543,-37.784729],[145.0400696,-37.7849083],[145.0400848,-37.785038],[145.0401459,-37.7851486],[145.0402374,-37.7852402],[145.0403595,-37.7853088],[145.0404663,-37.7853584],[145.0405884,-37.7854004],[145.040802,-37.7854385],[145.0409393,-37.7854576],[145.0410614,-37.7854576],[145.0411835,-37.7854195],[145.0412903,-37.7853584],[145.0414429,-37.7852898],[145.0415497,-37.7851791],[145.0416565,-37.7850876],[145.0417633,-37.7850189],[145.0418701,-37.7849808],[145.0422363,-37.7848701],[145.0425262,-37.7847977],[145.0429077,-37.7847099],[145.0431519,-37.7846603],[145.043335,-37.7846107],[145.0435944,-37.7845306],[145.0437927,-37.7844582],[145.0439758,-37.7843781],[145.0441589,-37.7842674],[145.044281,-37.7841797],[145.0444031,-37.7840996],[145.0445404,-37.7840309],[145.0447083,-37.7839584],[145.0448303,-37.7839279],[145.0449524,-37.7839203],[145.0450287,-37.7839203],[145.0450897,-37.7839394],[145.0451813,-37.783989],[145.0452423,-37.7840691],[145.0452728,-37.7841988],[145.0452728,-37.7843208],[145.0452271,-37.78442],[145.0451508,-37.7845497],[145.0450287,-37.784729],[145.0449219,-37.7848778],[145.0447998,-37.7849884],[145.044693,-37.78508],[145.0444946,-37.7852898],[145.0443115,-37.7855186],[145.0441437,-37.7857399],[145.0439301,-37.7860184],[145.0437012,-37.7863388],[145.0435791,-37.7865105],[145.0435181,-37.7866096],[145.0433502,-37.7867889],[145.0432434,-37.7868881],[145.0431213,-37.7869606],[145.0429993,-37.7869873],[145.0428467,-37.7869987],[145.0427094,-37.7869682],[145.042572,-37.7869072],[145.04245,-37.7868309],[145.0423431,-37.7867279],[145.0422516,-37.7866402],[145.0421906,-37.7865372],[145.0421295,-37.7863808],[145.0420837,-37.7862206],[145.0419922,-37.7860985],[145.0419006,-37.7859993],[145.0417633,-37.7859383],[145.041626,-37.7859192],[145.0415192,-37.7859306],[145.0414124,-37.7859573],[145.0413361,-37.7860107],[145.0412445,-37.7860985],[145.0411377,-37.7862396],[145.0410461,-37.7863579],[145.0409698,-37.786499],[145.0409393,-37.7865982],[145.0409241,-37.7867088],[145.0409393,-37.7868195],[145.0409851,-37.7869377],[145.0410309,-37.7870407],[145.0411377,-37.7871475],[145.0412598,-37.7872696],[145.0415192,-37.7875404],[145.0416107,-37.7876892],[145.0416718,-37.7878609],[145.0417175,-37.7880974],[145.0417175,-37.7882195],[145.041687,-37.7883072],[145.0416412,-37.7884598],[145.0415955,-37.7886505],[145.0415344,-37.7888184],[145.0414124,-37.7890587],[145.0413055,-37.7892685],[145.0411835,-37.7894402],[145.0410156,-37.7895889],[145.040863,-37.789669],[145.0406189,-37.7897301],[145.0406036,-37.7897301],[145.0404205,-37.7897606],[145.0401001,-37.7897682],[145.0396729,-37.7897606],[145.0391388,-37.7897606],[145.0378876,-37.7897301],[145.0373383,-37.7897491],[145.0367126,-37.7897491],[145.0358429,-37.7897491],[145.0354614,-37.7897682],[145.0350037,-37.7897987],[145.0336609,-37.7898674],[145.0334167,-37.7898903],[145.0330963,-37.7899208],[145.0327911,-37.7899475],[145.0323792,-37.789959],[145.0321045,-37.789959],[145.0319672,-37.7899399],[145.0318909,-37.7899284],[145.031662,-37.7898903],[145.0315094,-37.7898178],[145.031311,-37.7897186],[145.0310974,-37.7896004],[145.0308533,-37.7894402],[145.0306396,-37.7893372],[145.0304718,-37.789238],[145.030304,-37.7891197],[145.0298157,-37.7888374],[145.0298004,-37.7888298],[145.0296021,-37.7886772],[145.02948,-37.788578],[145.0294037,-37.7884903],[145.0293121,-37.7883606],[145.0292206,-37.7881775],[145.029007,-37.787838],[145.0288391,-37.78759],[145.0287323,-37.7874107],[145.0286102,-37.7871704],[145.0285339,-37.7870598],[145.0283508,-37.7869606],[145.028183,-37.7868881],[145.0279388,-37.78685],[145.027771,-37.78685],[145.0276337,-37.7868576],[145.0273895,-37.7868996],[145.0270691,-37.7869492],[145.0265198,-37.7869797],[145.0262604,-37.7869682],[145.026062,-37.7869377],[145.0258179,-37.7868881],[145.0255432,-37.7868004],[145.0254517,-37.7867584],[145.025238,-37.7867203],[145.0248718,-37.7866173],[145.0246124,-37.7865372],[145.0243835,-37.7864876],[145.0241394,-37.7864685],[145.0239105,-37.7864609],[145.0236359,-37.7864685],[145.0233307,-37.7864685],[145.0231476,-37.7864685],[145.0230408,-37.7864685],[145.0225067,-37.7864799],[145.0222626,-37.7865601],[145.0220642,-37.7866592],[145.0218811,-37.7867775],[145.0217438,-37.78685],[145.0215912,-37.7868881],[145.0213013,-37.7869301],[145.0211182,-37.7869492],[145.0209198,-37.7869606],[145.0207214,-37.7869186],[145.0205231,-37.7868576],[145.0203247,-37.7867699],[145.0202637,-37.7867508],[145.0200195,-37.7866478],[145.0197754,-37.7865677],[145.0195312,-37.786499],[145.0192108,-37.7864189],[145.0189667,-37.7863808],[145.0187225,-37.7863503],[145.0185089,-37.7863274],[145.0184174,-37.7863007],[145.0178528,-37.7861595],[145.0174103,-37.786068],[145.0169373,-37.7859879],[145.0167999,-37.7859688],[145.0161591,-37.7858505],[145.0153503,-37.7857285],[145.0146027,-37.7856483],[145.013916,-37.7855797],[145.0138855,-37.7855797],[145.0136108,-37.7855797],[145.013504,-37.7855682],[145.0133209,-37.7855873],[145.0131683,-37.7856598],[145.013092,-37.7857399],[145.0130615,-37.7858582],[145.0131226,-37.7860298],[145.0132294,-37.7861977],[145.013382,-37.7863693],[145.0136871,-37.7865181],[145.0140228,-37.7867088],[145.0143127,-37.786869],[145.014679,-37.7871475],[145.0149994,-37.7874184],[145.0154724,-37.7877884],[145.0158844,-37.7881584],[145.0161743,-37.7884178],[145.0163879,-37.7886009],[145.0166626,-37.7888985],[145.0169373,-37.7892494],[145.0171967,-37.7896881],[145.0173492,-37.7898979],[145.0175476,-37.7901077],[145.0177765,-37.7903709],[145.0179596,-37.7905502],[145.0181122,-37.7907104],[145.0184631,-37.7910576],[145.0188293,-37.7913895],[145.019104,-37.7916489],[145.0193481,-37.7919006],[145.0195007,-37.7921181],[145.0195923,-37.7922974],[145.0196228,-37.7925072],[145.0195923,-37.7926674],[145.019516,-37.792778],[145.0193634,-37.7928505],[145.0191345,-37.7928696],[145.0188599,-37.7928581],[145.0185394,-37.7928085],[145.0182037,-37.7927399],[145.0179596,-37.7926903],[145.0177612,-37.7926903],[145.0171814,-37.7926407],[145.0169067,-37.7926102],[145.0164948,-37.7925606],[145.0160522,-37.792469],[145.0156097,-37.7923393],[145.0148468,-37.7921104],[145.0145569,-37.7920799],[145.014328,-37.7920799],[145.0141296,-37.7921104],[145.0140228,-37.7921791],[145.013916,-37.7923203],[145.0138702,-37.7925377],[145.0138702,-37.7929382],[145.0138397,-37.7933578],[145.0138397,-37.7935982],[145.0139008,-37.7938385],[145.0139771,-37.7939796],[145.0140991,-37.7941284],[145.0142212,-37.7942505],[145.0144196,-37.7943306],[145.0148468,-37.7945099],[145.0151215,-37.7946472],[145.0154419,-37.7947998],[145.0157928,-37.7949409],[145.0161743,-37.7950706],[145.0166321,-37.7951889],[145.0170288,-37.7952576],[145.0174103,-37.79533],[145.0176086,-37.7954102],[145.0177307,-37.7954903],[145.017868,-37.795639],[145.0179138,-37.7957687],[145.0179291,-37.7959099],[145.0178528,-37.7960587],[145.0176697,-37.7962303],[145.0174713,-37.7964973],[145.0174103,-37.7966995],[145.0174408,-37.7969894],[145.0175476,-37.7971878],[145.0177002,-37.7972984],[145.0180511,-37.7974205],[145.0182648,-37.7975082],[145.0185394,-37.7976379],[145.0188599,-37.7977486],[145.0195007,-37.7979584],[145.0198669,-37.7980309],[145.0201874,-37.7980804],[145.0204468,-37.7981186],[145.0206299,-37.7981987],[145.020752,-37.7982788],[145.0208588,-37.7984085],[145.0209045,-37.7985306],[145.0209045,-37.7986488],[145.0208588,-37.7987976],[145.0207214,-37.7989197],[145.0205078,-37.7990494],[145.0202332,-37.7991905],[145.0197296,-37.7993889],[145.0192871,-37.7995605],[145.0189819,-37.7996902],[145.0187683,-37.7998085],[145.0185852,-37.7999687],[145.0185547,-37.8000183],[145.0185089,-37.8000984],[145.0185089,-37.8002396],[145.0185547,-37.8003807],[145.018692,-37.8005409],[145.0188293,-37.8006592],[145.0190582,-37.800808],[145.0193634,-37.8010406],[145.0196533,-37.8012772],[145.0201111,-37.8016586],[145.0205688,-37.8021088],[145.0207367,-37.8022499],[145.0208435,-37.8023605],[145.0209808,-37.8024788],[145.0210571,-37.8026199],[145.0210876,-37.8027496],[145.0210724,-37.8028603],[145.0209503,-37.80299],[145.0206757,-37.8031883],[145.0203094,-37.8033791],[145.0199738,-37.8035393],[145.0196533,-37.8036194],[145.0194702,-37.8036575],[145.0193329,-37.8036575],[145.0190125,-37.8035889],[145.018692,-37.8034973],[145.0183563,-37.8034096],[145.0181427,-37.8033791],[145.0179596,-37.80336],[145.0177612,-37.8033485],[145.0172424,-37.8032608],[145.0167694,-37.8031197],[145.0163422,-37.802948],[145.0159607,-37.8027077],[145.0157166,-37.8025703],[145.0155792,-37.8024483],[145.0154724,-37.8023109],[145.0154114,-37.8021202],[145.0153351,-37.8017502],[145.0152893,-37.8013802],[145.0151978,-37.8009491],[145.0151062,-37.8006172],[145.0150299,-37.8004379],[145.0148926,-37.800209],[145.0147858,-37.8000984],[145.0144958,-37.7999001],[145.0142212,-37.7997093],[145.0140076,-37.7995987],[145.0136719,-37.7994499],[145.013382,-37.7993393],[145.0128937,-37.7992287],[145.0123444,-37.7991295],[145.0118713,-37.7990685],[145.0113983,-37.7990074],[145.0111389,-37.7990189],[145.0109253,-37.7990608],[145.0107117,-37.7991676],[145.0105438,-37.7993393],[145.010376,-37.79953],[145.0101776,-37.7996979],[145.009903,-37.7998695],[145.0095062,-37.8000603],[145.0090179,-37.8002892],[145.0084991,-37.800499],[145.0080109,-37.8006897],[145.0076904,-37.800808],[145.00737,-37.8009109],[145.0071259,-37.80093],[145.0069733,-37.8009109],[145.0067902,-37.800808],[145.0066376,-37.8006783],[145.0065002,-37.800499],[145.0064392,-37.8003006],[145.006424,-37.8001099],[145.0064392,-37.7998009],[145.0064545,-37.7995377],[145.0065002,-37.7992401],[145.0065613,-37.7989693],[145.0066833,-37.7987785],[145.006897,-37.7985306],[145.0070648,-37.7984009],[145.0072327,-37.7983093],[145.0074768,-37.7982407],[145.0077667,-37.7981186],[145.0081482,-37.7979088],[145.0084381,-37.797718],[145.008667,-37.7975807],[145.0089111,-37.7974586],[145.0091705,-37.7973175],[145.0093536,-37.7971802],[145.009491,-37.7970276],[145.0096283,-37.7968597],[145.0096741,-37.7967072],[145.0096283,-37.7965393],[145.009491,-37.7964096],[145.0092621,-37.7963181],[145.0090332,-37.7962799],[145.0087738,-37.7962494],[145.0084991,-37.7962494],[145.008255,-37.7962685],[145.0080566,-37.796299],[145.0078583,-37.7963676],[145.0077057,-37.7964783],[145.00737,-37.79673],[145.007019,-37.7969475],[145.006485,-37.7972183],[145.0060425,-37.7974777],[145.005661,-37.7977409],[145.0053253,-37.7979507],[145.0050507,-37.7980576],[145.0048218,-37.7980995],[145.0045929,-37.798069],[145.0044403,-37.7980003],[145.004303,-37.7978973],[145.0042114,-37.7977486],[145.0041504,-37.7975388],[145.0041351,-37.7973175],[145.0041199,-37.7970505],[145.0040894,-37.7966576],[145.0040588,-37.7963676],[145.0039825,-37.7961273],[145.00383,-37.7959595],[145.0036011,-37.7958107],[145.0033569,-37.7957497],[145.0031738,-37.7957382],[145.0028534,-37.7957802],[145.0026093,-37.7958603],[145.0023804,-37.79599],[145.0021973,-37.7961998],[145.0020294,-37.7964897],[145.0019379,-37.7966499],[145.0015717,-37.7961998],[145.0015717,-37.7961884],[145.0015717,-37.7961693],[145.0015717,-37.7961578],[145.0015564,-37.7961502],[145.0015564,-37.7961502],[145.0015564,-37.7961197],[145.0015564,-37.7961006],[145.0015411,-37.7960777],[145.0015411,-37.7960701],[145.0015411,-37.7960472],[145.0015411,-37.7960396],[145.0015411,-37.7960205],[145.0015411,-37.7960091],[145.0015411,-37.7959976],[145.0014954,-37.7959976],[145.0014954,-37.795948],[145.0014954,-37.7959404],[145.0014801,-37.7958984],[145.0014343,-37.7958679],[145.0014191,-37.7958679],[145.0013885,-37.7958488],[145.0013733,-37.7958488],[145.001358,-37.7958488],[145.0013428,-37.7958374],[145.0013428,-37.7958374],[145.0013123,-37.7958298],[145.0013123,-37.7958183],[145.001297,-37.7958107],[145.001297,-37.7957993],[145.0012817,-37.7957878],[145.0012817,-37.7957687],[145.0012817,-37.7957497],[145.0012817,-37.7957191],[145.0012817,-37.7957077],[145.0012817,-37.7956772],[145.0012817,-37.7956696],[145.0012817,-37.7956581],[145.0012817,-37.7956505],[145.0012817,-37.79562],[145.0012817,-37.7955894],[145.0010529,-37.795639],[145.0010681,-37.7957497],[145.0010071,-37.7958488],[145.0009308,-37.7959099],[145.0007629,-37.79599],[145.0005951,-37.7960091],[145.0000916,-37.7960396],[144.9991913,-37.7960701],[144.9980011,-37.7961082],[144.9976654,-37.7961006],[144.9976196,-37.7964172],[144.9954834,-37.7962074],[144.9954834,-37.7961197],[144.9953613,-37.7961082],[144.9950714,-37.7960281],[144.9949951,-37.7960205],[144.9949188,-37.7960091],[144.9948273,-37.7960091],[144.9944611,-37.7960472],[144.994339,-37.7960396],[144.9940643,-37.7960205],[144.9938812,-37.7960205],[144.9935913,-37.7960472],[144.9936066,-37.7959709],[144.9934845,-37.7958183],[144.9933319,-37.7956696],[144.9931641,-37.795578],[144.992981,-37.7955284],[144.9922028,-37.7953873],[144.9919891,-37.7953377],[144.991806,-37.7952881],[144.9916077,-37.7952309],[144.9914246,-37.7951584],[144.9909821,-37.7949677],[144.9906616,-37.794838],[144.9904633,-37.7947693],[144.9902802,-37.7947197],[144.9901276,-37.7946892],[144.9900208,-37.7947006],[144.9899292,-37.7946892],[144.9898834,-37.7946777],[144.9898834,-37.7946701],[144.9897919,-37.7946472],[144.98909,-37.7945786],[144.9889832,-37.7945709],[144.9886322,-37.794529],[144.9882507,-37.7944984],[144.9880219,-37.7944794],[144.9880066,-37.7944679],[144.9877472,-37.7944374],[144.9876862,-37.7944298],[144.9874725,-37.7944107],[144.9869232,-37.7943573],[144.9860687,-37.7942581],[144.9857178,-37.7942276],[144.9852142,-37.794178],[144.9850922,-37.7941589],[144.9851837,-37.7936172],[144.9853821,-37.7924004],[144.9854584,-37.7920074],[144.985672,-37.7907982],[144.9864197,-37.7904892],[144.9868011,-37.7903404],[144.9872437,-37.7901497],[144.9876404,-37.789978],[144.9889984,-37.7894173],[144.99086,-37.7886391],[144.9919739,-37.7881775],[144.9920502,-37.7881088],[144.9922791,-37.7880287],[144.9947205,-37.7872276],[144.9950562,-37.7871399],[144.9952698,-37.7871208],[144.995636,-37.7869873],[144.9956665,-37.7868385],[144.9957123,-37.7865486],[144.9956207,-37.7859993],[144.9954681,-37.7856293],[144.9951782,-37.7852287],[144.9951019,-37.7851486],[144.9955902,-37.7846909],[144.9956207,-37.7847099],[144.9958191,-37.7848396],[144.996048,-37.7850189],[144.9962158,-37.7851181],[144.9963531,-37.7851906],[144.9963837,-37.7851982],[144.9964447,-37.7852402],[144.9971924,-37.7854576],[144.9975281,-37.7855682],[144.997818,-37.7856293],[144.9982452,-37.7856102],[144.9985199,-37.7855377],[144.9987335,-37.7854691],[144.9989777,-37.785408],[144.9995117,-37.7851295],[144.9999237,-37.7848396],[145.000351,-37.7845573],[145.0005341,-37.7843704],[145.0005798,-37.7843208],[145.0007935,-37.7841072],[145.0009308,-37.7839394],[145.0011444,-37.7837181],[145.0014191,-37.7833786],[145.0016785,-37.7831306],[145.0018005,-37.7830582],[145.0022888,-37.7829895],[145.0026093,-37.7830009],[145.0027771,-37.7830505],[145.0031433,-37.7832184],[145.0034027,-37.7833672],[145.0035095,-37.7834778],[145.0037231,-37.7837296],[145.0039978,-37.7840691],[145.0042114,-37.784359],[145.0047913,-37.7842293],[145.005188,-37.7841377],[145.0054932,-37.7840881],[145.0057831,-37.7840385],[145.0059204,-37.7840195],[145.006073,-37.7840004],[145.0063782,-37.7839584],[145.0066833,-37.7839394],[145.0069885,-37.7839203],[145.0072937,-37.7838974],[145.0075684,-37.7838974],[145.0078583,-37.7838974],[145.0081329,-37.7839088],[145.0083923,-37.7839279],[145.008667,-37.7839508],[145.0088959,-37.7839699],[145.00914,-37.7840004],[145.0093689,-37.7840309],[145.009613,-37.7840691],[145.0100403,-37.7841492],[145.0101929,-37.7841682],[145.0103607,-37.7841873],[145.0108032,-37.7842178],[145.010849,-37.7842178],[145.0110626,-37.7842293],[145.0113068,-37.7842407],[145.0115662,-37.7842407],[145.0118103,-37.7842293],[145.0120697,-37.7842102],[145.0122528,-37.7841873],[145.0123138,-37.7841873],[145.0125732,-37.7841492],[145.0128021,-37.7841072],[145.0142975,-37.7838287],[145.0144806,-37.7837906],[145.0148315,-37.7837906],[145.0149994,-37.7837601],[145.0161896,-37.7835579],[145.0173798,-37.7833595],[145.0176544,-37.7833595],[145.0184174,-37.7832108],[145.0185699,-37.7831802],[145.0191345,-37.7830696],[145.0197601,-37.7829399],[145.0209198,-37.7827072],[145.0220032,-37.7824898],[145.0232849,-37.782238],[145.0234222,-37.7822189],[145.0240936,-37.7820473],[145.0245667,-37.7819405],[145.0250244,-37.781868],[145.0257416,-37.7817688],[145.027298,-37.7814789],[145.0279388,-37.7813606]]]}}]} diff --git a/tests/testthat/geojson/geometry-collection.json b/tests/testthat/geojson/geometry-collection.json new file mode 100644 index 0000000..6bbcf58 --- /dev/null +++ b/tests/testthat/geojson/geometry-collection.json @@ -0,0 +1,188 @@ +{ + "type": "GeometryCollection", + "geometries": [ + { + "type": "Point", + "coordinates": [ + -80.660805, + 35.049392 + ] + }, + { + "type": "Polygon", + "coordinates": [ + [ + [ + -80.664582, + 35.044965 + ], + [ + -80.663874, + 35.04428 + ], + [ + -80.662586, + 35.04558 + ], + [ + -80.663444, + 35.046036 + ], + [ + -80.664582, + 35.044965 + ] + ] + ] + }, + { + "type": "LineString", + "coordinates": [ + [ + -80.662372, + 35.059509 + ], + [ + -80.662693, + 35.059263 + ], + [ + -80.662844, + 35.05893 + ], + [ + -80.66308, + 35.058332 + ], + [ + -80.663595, + 35.057753 + ], + [ + -80.663874, + 35.057401 + ], + [ + -80.66441, + 35.057033 + ], + [ + -80.664861, + 35.056787 + ], + [ + -80.665419, + 35.056506 + ], + [ + -80.665633, + 35.056312 + ], + [ + -80.666019, + 35.055891 + ], + [ + -80.666191, + 35.055452 + ], + [ + -80.666191, + 35.055171 + ], + [ + -80.666255, + 35.05489 + ], + [ + -80.666213, + 35.054222 + ], + [ + -80.666213, + 35.053924 + ], + [ + -80.665955, + 35.052905 + ], + [ + -80.665698, + 35.052044 + ], + [ + -80.665504, + 35.051482 + ], + [ + -80.665762, + 35.050481 + ], + [ + -80.66617, + 35.049725 + ], + [ + -80.666513, + 35.049286 + ], + [ + -80.666921, + 35.048531 + ], + [ + -80.667006, + 35.048215 + ], + [ + -80.667071, + 35.047775 + ], + [ + -80.667049, + 35.047389 + ], + [ + -80.666964, + 35.046985 + ], + [ + -80.666813, + 35.046353 + ], + [ + -80.666599, + 35.045966 + ], + [ + -80.666406, + 35.045615 + ], + [ + -80.665998, + 35.045193 + ], + [ + -80.665526, + 35.044877 + ], + [ + -80.664989, + 35.044543 + ], + [ + -80.664496, + 35.044174 + ], + [ + -80.663852, + 35.043876 + ], + [ + -80.663037, + 35.043717 + ] + ] + } + ] +} diff --git a/tests/testthat/geojson/holding/coord-class-multipoint-xyz1.json b/tests/testthat/geojson/holding/coord-class-multipoint-xyz1.json new file mode 100644 index 0000000..47618f3 --- /dev/null +++ b/tests/testthat/geojson/holding/coord-class-multipoint-xyz1.json @@ -0,0 +1 @@ +{"type":"MultiPoint","coordinates":[[0.0,0.0,0.0],[1.0,1.0]]} diff --git a/tests/testthat/geojson/holding/coord-class-multipoint-xyz2.json b/tests/testthat/geojson/holding/coord-class-multipoint-xyz2.json new file mode 100644 index 0000000..9b68f9f --- /dev/null +++ b/tests/testthat/geojson/holding/coord-class-multipoint-xyz2.json @@ -0,0 +1 @@ +{"type":"MultiPoint","coordinates":[[0.0,0.0],[1.0,1.0,1.0]]} diff --git a/tests/testthat/geojson/holding/coord-class-multipoint-xyzm1.json b/tests/testthat/geojson/holding/coord-class-multipoint-xyzm1.json new file mode 100644 index 0000000..a5893a3 --- /dev/null +++ b/tests/testthat/geojson/holding/coord-class-multipoint-xyzm1.json @@ -0,0 +1 @@ +{"type":"MultiPoint","coordinates":[[0.0,0.0,0.0,0.0],[1.0,1.0]]} diff --git a/tests/testthat/geojson/holding/property-empty-object.json b/tests/testthat/geojson/holding/property-empty-object.json new file mode 100644 index 0000000..670eaf4 --- /dev/null +++ b/tests/testthat/geojson/holding/property-empty-object.json @@ -0,0 +1 @@ +{"type":"Feature","properties":{"id":{}},"geometry":{"type":"Point","coordinates":[0,0]}} diff --git a/tests/testthat/geojson/holding/property-mixed-type2.json b/tests/testthat/geojson/holding/property-mixed-type2.json new file mode 100644 index 0000000..90ababc --- /dev/null +++ b/tests/testthat/geojson/holding/property-mixed-type2.json @@ -0,0 +1,2 @@ +[{"type":"Feature","properties":{"id":1},"geometry":{"type":"Point","coordinates":[0,0]}}, + {"type" : "Feature","properties" : { "id" : true},"geometry" : { "type" : "Point", "coordinates" : [2,2] }}] diff --git a/tests/testthat/geojson/holding/property-mixed-type3.json b/tests/testthat/geojson/holding/property-mixed-type3.json new file mode 100644 index 0000000..be896a9 --- /dev/null +++ b/tests/testthat/geojson/holding/property-mixed-type3.json @@ -0,0 +1,2 @@ +[{"type" : "Feature","properties" : { "id" : null},"geometry" : { "type" : "Point", "coordinates" : [1,0] }}, + {"type" : "Feature","properties" : { "id" : null},"geometry" : { "type" : "Point", "coordinates" : [0,0] }}] diff --git a/tests/testthat/geojson/holding/property-mixed-type4.json b/tests/testthat/geojson/holding/property-mixed-type4.json new file mode 100644 index 0000000..4a01fe0 --- /dev/null +++ b/tests/testthat/geojson/holding/property-mixed-type4.json @@ -0,0 +1,2 @@ +[{"type" : "Feature","properties" : { "id" : "a"},"geometry" : { "type" : "Point", "coordinates" : [0,1] }}, + {"type" : "Feature","properties" : { "id" : 1},"geometry" : { "type" : "Point", "coordinates" : [0,0] }}] diff --git a/tests/testthat/geojson/holding/property-mixed-type5.json b/tests/testthat/geojson/holding/property-mixed-type5.json new file mode 100644 index 0000000..c943d05 --- /dev/null +++ b/tests/testthat/geojson/holding/property-mixed-type5.json @@ -0,0 +1 @@ +{"type": "Feature","properties":{"id":[1,2,3],"name":{"foo":"bar"}},"geometry":{"type":"LineString","coordinates":[[101.0,0.0],[102.0,1.0]]}} diff --git a/tests/testthat/geojson/holding/property-mixed-type6.json b/tests/testthat/geojson/holding/property-mixed-type6.json new file mode 100644 index 0000000..f81d343 --- /dev/null +++ b/tests/testthat/geojson/holding/property-mixed-type6.json @@ -0,0 +1,2 @@ +[{"type" : "Feature","properties" : { "id" : 1 },"geometry" : { "type" : "Point", "coordinates" : [0,1] }}, + {"type" : "Feature","properties" : { "id" : {"a":"b"}},"geometry" : { "type" : "Point", "coordinates" : [0,0] }}] diff --git a/tests/testthat/geojson/linestring00.json b/tests/testthat/geojson/linestring00.json new file mode 100644 index 0000000..744703e --- /dev/null +++ b/tests/testthat/geojson/linestring00.json @@ -0,0 +1,13 @@ +{ + "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0] + ] + }, + "properties": { + "name": "Dinagat Islands" + } +} + diff --git a/tests/testthat/geojson/multilinestring00.json b/tests/testthat/geojson/multilinestring00.json new file mode 100644 index 0000000..706696c --- /dev/null +++ b/tests/testthat/geojson/multilinestring00.json @@ -0,0 +1,92 @@ +{ + "type": "Feature", + "geometry": { + "type": "MultiLineString", + "coordinates": [ + [ + [ + -105.0214433670044, + 39.57805759162015 + ], + [ + -105.02150774002075, + 39.57780951131517 + ], + [ + -105.02157211303711, + 39.57749527498758 + ], + [ + -105.02157211303711, + 39.57716449836683 + ], + [ + -105.02157211303711, + 39.57703218727656 + ], + [ + -105.02152919769287, + 39.57678410330158 + ] + ], + [ + [ + -105.01989841461182, + 39.574997872470774 + ], + [ + -105.01959800720215, + 39.57489863607502 + ], + [ + -105.01906156539916, + 39.57478286010041 + ] + ], + [ + [ + -105.01717329025269, + 39.5744024519653 + ], + [ + -105.01698017120361, + 39.574385912433804 + ], + [ + -105.0166368484497, + 39.574385912433804 + ], + [ + -105.01650810241699, + 39.5744024519653 + ], + [ + -105.0159502029419, + 39.574270135602866 + ] + ], + [ + [ + -105.0142765045166, + 39.57397242286402 + ], + [ + -105.01412630081175, + 39.57403858136094 + ], + [ + -105.0138258934021, + 39.57417089816531 + ], + [ + -105.01331090927124, + 39.57445207053608 + ] + ] + ] + }, + "properties": { + "name": "Dinagat Islands" + } +} + diff --git a/tests/testthat/geojson/multipoint00.json b/tests/testthat/geojson/multipoint00.json new file mode 100644 index 0000000..49a62bd --- /dev/null +++ b/tests/testthat/geojson/multipoint00.json @@ -0,0 +1,7 @@ +{ +"type": "MultiPoint", +"coordinates": [ + [100.0, 0.0], [101.0, 1.0] +] +} + diff --git a/tests/testthat/geojson/multipoint01.json b/tests/testthat/geojson/multipoint01.json new file mode 100644 index 0000000..22e6f25 --- /dev/null +++ b/tests/testthat/geojson/multipoint01.json @@ -0,0 +1,13 @@ +{ + "type": "Feature", + "geometry": { +"type": "MultiPoint", +"coordinates": [ + [100.0, 0.0], [101.0, 1.0] +] + }, + "properties": { + "name": "Dinagat Islands" + } +} + diff --git a/tests/testthat/geojson/multipolygon.json b/tests/testthat/geojson/multipolygon.json new file mode 100644 index 0000000..604baff --- /dev/null +++ b/tests/testthat/geojson/multipolygon.json @@ -0,0 +1,61 @@ +{ + "type": "Feature", + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + 107, + 7 + ], + [ + 108, + 7 + ], + [ + 108, + 8 + ], + [ + 107, + 8 + ], + [ + 107, + 7 + ] + ] + ], + [ + [ + [ + 100, + 0 + ], + [ + 101, + 0 + ], + [ + 101, + 1 + ], + [ + 100, + 1 + ], + [ + 100, + 0 + ] + ] + ] + ] + + }, + "properties": { + "name": "Dinagat Islands" + } +} + diff --git a/tests/testthat/geojson/point00.json b/tests/testthat/geojson/point00.json new file mode 100644 index 0000000..2736257 --- /dev/null +++ b/tests/testthat/geojson/point00.json @@ -0,0 +1,5 @@ +{ + "type": "Point", + "coordinates": [125.6, 10.1] +} + diff --git a/tests/testthat/geojson/point01.json b/tests/testthat/geojson/point01.json new file mode 100644 index 0000000..6fadff1 --- /dev/null +++ b/tests/testthat/geojson/point01.json @@ -0,0 +1,11 @@ +{ + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [125.6, 10.1] + }, + "properties": { + "name": "Dinagat Islands" + } +} + diff --git a/tests/testthat/geojson/polygon.json b/tests/testthat/geojson/polygon.json new file mode 100644 index 0000000..0229392 --- /dev/null +++ b/tests/testthat/geojson/polygon.json @@ -0,0 +1,16 @@ +{ + "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], + [100.0, 1.0], [100.0, 0.0] ], + [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], + [100.0, 1.0], [100.0, 0.0] ] + ] + }, + "properties": { + "name": "Dinagat Islands" + } +} + diff --git a/tests/testthat/geojson/property-empty-object.json b/tests/testthat/geojson/property-empty-object.json new file mode 100644 index 0000000..670eaf4 --- /dev/null +++ b/tests/testthat/geojson/property-empty-object.json @@ -0,0 +1 @@ +{"type":"Feature","properties":{"id":{}},"geometry":{"type":"Point","coordinates":[0,0]}} diff --git a/tests/testthat/geojson/property-empty.json b/tests/testthat/geojson/property-empty.json new file mode 100644 index 0000000..6013ab2 --- /dev/null +++ b/tests/testthat/geojson/property-empty.json @@ -0,0 +1 @@ +{"type":"Feature","properties":{"id":null},"geometry":{"type":"Point","coordinates":[0,0]}} diff --git a/tests/testthat/geojson/property-logical.json b/tests/testthat/geojson/property-logical.json new file mode 100644 index 0000000..1ff9d1f --- /dev/null +++ b/tests/testthat/geojson/property-logical.json @@ -0,0 +1 @@ +{"type":"Feature","properties":{"id":true},"geometry":{"type":"Point","coordinates":[0,0]}} diff --git a/tests/testthat/geojson/property-mixed-type.json b/tests/testthat/geojson/property-mixed-type.json new file mode 100644 index 0000000..9e51d1d --- /dev/null +++ b/tests/testthat/geojson/property-mixed-type.json @@ -0,0 +1,2 @@ +{"type":"FeatureCollection","features":[{"type":"Feature","properties":{"id":1},"geometry":{"type":"Point","coordinates":[0,0]}}, +{"type":"Feature","properties":{"id":"a"},"geometry":{"type":"Point","coordinates":[1,1]}}]} diff --git a/tests/testthat/geojson/property-mixed-type2.json b/tests/testthat/geojson/property-mixed-type2.json new file mode 100644 index 0000000..90ababc --- /dev/null +++ b/tests/testthat/geojson/property-mixed-type2.json @@ -0,0 +1,2 @@ +[{"type":"Feature","properties":{"id":1},"geometry":{"type":"Point","coordinates":[0,0]}}, + {"type" : "Feature","properties" : { "id" : true},"geometry" : { "type" : "Point", "coordinates" : [2,2] }}] diff --git a/tests/testthat/geojson/property-mixed-type3.json b/tests/testthat/geojson/property-mixed-type3.json new file mode 100644 index 0000000..be896a9 --- /dev/null +++ b/tests/testthat/geojson/property-mixed-type3.json @@ -0,0 +1,2 @@ +[{"type" : "Feature","properties" : { "id" : null},"geometry" : { "type" : "Point", "coordinates" : [1,0] }}, + {"type" : "Feature","properties" : { "id" : null},"geometry" : { "type" : "Point", "coordinates" : [0,0] }}] diff --git a/tests/testthat/geojson/property-mixed-type4.json b/tests/testthat/geojson/property-mixed-type4.json new file mode 100644 index 0000000..4a01fe0 --- /dev/null +++ b/tests/testthat/geojson/property-mixed-type4.json @@ -0,0 +1,2 @@ +[{"type" : "Feature","properties" : { "id" : "a"},"geometry" : { "type" : "Point", "coordinates" : [0,1] }}, + {"type" : "Feature","properties" : { "id" : 1},"geometry" : { "type" : "Point", "coordinates" : [0,0] }}] diff --git a/tests/testthat/geojson/property-mixed-type5.json b/tests/testthat/geojson/property-mixed-type5.json new file mode 100644 index 0000000..c943d05 --- /dev/null +++ b/tests/testthat/geojson/property-mixed-type5.json @@ -0,0 +1 @@ +{"type": "Feature","properties":{"id":[1,2,3],"name":{"foo":"bar"}},"geometry":{"type":"LineString","coordinates":[[101.0,0.0],[102.0,1.0]]}} diff --git a/tests/testthat/geojson/property-mixed-type6.json b/tests/testthat/geojson/property-mixed-type6.json new file mode 100644 index 0000000..f81d343 --- /dev/null +++ b/tests/testthat/geojson/property-mixed-type6.json @@ -0,0 +1,2 @@ +[{"type" : "Feature","properties" : { "id" : 1 },"geometry" : { "type" : "Point", "coordinates" : [0,1] }}, + {"type" : "Feature","properties" : { "id" : {"a":"b"}},"geometry" : { "type" : "Point", "coordinates" : [0,0] }}] diff --git a/tests/testthat/geojson/property-null-value.json b/tests/testthat/geojson/property-null-value.json new file mode 100644 index 0000000..6013ab2 --- /dev/null +++ b/tests/testthat/geojson/property-null-value.json @@ -0,0 +1 @@ +{"type":"Feature","properties":{"id":null},"geometry":{"type":"Point","coordinates":[0,0]}} diff --git a/tests/testthat/geojson/property-null.json b/tests/testthat/geojson/property-null.json new file mode 100644 index 0000000..62983a5 --- /dev/null +++ b/tests/testthat/geojson/property-null.json @@ -0,0 +1 @@ +{"type":"Feature","properties":null,"geometry":{"type":"Point","coordinates":[0,0]}} diff --git a/tests/testthat/geojson/ref.rds b/tests/testthat/geojson/ref.rds new file mode 100644 index 0000000000000000000000000000000000000000..c0baf327be80a6233d8879d85edb7feec58cf171 GIT binary patch literal 46968 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 E$F#f6zIVEO`-daZo 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 g0N}Y literal 0 HcmV?d00001 diff --git a/tests/testthat/geojson/standard-example.json b/tests/testthat/geojson/standard-example.json new file mode 100644 index 0000000..04e817f --- /dev/null +++ b/tests/testthat/geojson/standard-example.json @@ -0,0 +1,35 @@ +{ "type": "FeatureCollection", + "features": [ + { "type": "Feature", + "geometry": {"type": "Point", "coordinates": [102.0, 0.5]}, + "properties": {"prop0": "value0"} + }, + { "type": "Feature", + "geometry": { + "type": "LineString", + "coordinates": [ + [102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0] + ] + }, + "properties": { + "prop0": "value0", + "prop1": 0.0 + } + }, + { "type": "Feature", + "geometry": { + "type": "Polygon", + "coordinates": [ + [ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0], + [100.0, 1.0], [100.0, 0.0] ] + ] + + }, + "properties": { + "prop0": "value0", + "prop1": {"this": "that"} + } + } + ] + } + diff --git a/tests/testthat/test-geojson-promotion-compat.R b/tests/testthat/test-geojson-promotion-compat.R new file mode 100644 index 0000000..1368a6e --- /dev/null +++ b/tests/testthat/test-geojson-promotion-compat.R @@ -0,0 +1,50 @@ + + +js <- r"( +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -80.870885, + 35.215151 + ] + }, + "properties": { + "value": 1.0 + } + }, + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + -80.837753, + 35.249801 + ] + }, + "properties": { + "value": "a" + } + } + ] +} +)" + + + +test_that("geojson property promotion works", { + + tst <- read_geojson_str(js) # geojson compat + expect_identical(tst$value, c("1.000000", "a")) + + tst <- read_geojson_str(js, property_promotion = 'string') # geojson compat + expect_identical(tst$value, c("1.000000", "a")) + + tst <- read_geojson_str(js, property_promotion = 'list') + expect_identical(tst$value, list(1.0, "a")) + +}) diff --git a/tests/testthat/test-geojson-read-write.R b/tests/testthat/test-geojson-read-write.R new file mode 100644 index 0000000..c1a785e --- /dev/null +++ b/tests/testthat/test-geojson-read-write.R @@ -0,0 +1,120 @@ + + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#' Set load path depending on whether debugging or testing within package +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +examples_dir <- testthat::test_path("geojson") + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#' Determine list of JSON files to test +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +json_files <- list.files(examples_dir, pattern = "json$", full.names = TRUE) + +json <- lapply(json_files, function(x) { + paste(readLines(x), collapse = "\n") +}) +names(json) <- basename(tools::file_path_sans_ext(json_files)) + + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#' Generate reference objects using {geojsonsf} +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +if (FALSE) { + # json_files <- list.files(examples_dir, pattern = "json$", full.names = TRUE) + # + # ref <- list(sf = list(), sfc = list()) + # + # prep <- function(json_file) { + # nm <- basename(json_file) + # ref$sf [[nm]] <<- geojsonsf::geojson_sf (json_file) + # ref$sfc[[nm]] <<- geojsonsf::geojson_sfc(json_file) + # } + # + # for (json_file in json_files) { + # prep(json_file) + # } + # + # saveRDS(ref, "tests/testthat/geojson/ref.rds", compress = 'xz') +} + + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#' Read reference objects created from GeoJSON with {geojsonsf} package +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +ref <- readRDS(file.path(examples_dir, "ref.rds")) + + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#' Trivial column sorting for data.frames +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +df_sort <- function(df) { + df[, sort(colnames(df)), drop = FALSE] +} + +expect_equal_when_colnames_sorted <- function(tst, ref, label = NULL) { + tst <- df_sort(tst) + ref <- df_sort(ref) + expect_equal(tst, ref, label = label) +} + + + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#' Check that {yyjsonr} parses GeoJSON in the same was as {geojsonsf} +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +test_that("Compare parsing of GeoJSON to {geojsonsf}", { + + for (json_file in json_files) { + + # Reference objects from {geojsonsf} are indexed by the + # basename() of the JSON file + nm <- basename(json_file) + + # Read as 'sf' data.frame object + sf <- read_geojson_file(json_file, type = 'sf') + if (nm == 'standard-example.json') { + # When geojsonsf promotos double 0.0 to string, it makes it '0' + # whereas yyjsonr makes it "0.000000" + sf$prop1 <- gsub("0.000000", "0", sf$prop1) + } + expect_equal_when_colnames_sorted(sf, ref$sf[[nm]], label = nm) + + # Read as 'sfc' list object of just geometry + sfc <- read_geojson_file(json_file, type = 'sfc') + expect_equal(sfc, ref$sfc[[nm]], label = nm) + } +}) + + + +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +#' Using 'yyjsonr', round-trip some JSON +#' - from geojson string to R 'sf' object +#' - from R 'sf' object to geojson string +#' - from geojson string to R 'sf' object +#' +#' Then assert that the two 'sf' objects are equal +#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +test_that("Basic writing works for lots of different geojson", { + + for (i in seq_along(json)) { + + # Take the JSON + js1 <- json[[i]] + + # Load it into R as 'sf' + geojson1 <- read_geojson_str(js1) + + # Write it out to JSON str + js2 <- write_geojson_str(geojson1) + + # Re-load it into R as 'sf' + geojson2 <- read_geojson_str(js2) + + # Test 'sf' representations are equal + expect_identical(geojson1, geojson2, label = names(json)[i]) + } +}) + + + diff --git a/tests/testthat/test-issue19-ndjson-long-lines.R b/tests/testthat/test-issue19-ndjson-long-lines.R new file mode 100644 index 0000000..0d045b1 --- /dev/null +++ b/tests/testthat/test-issue19-ndjson-long-lines.R @@ -0,0 +1,11 @@ + + + +test_that("multiplication works", { + + filename <- testthat::test_path("ndjson/ndjson-long-lines-10k-issue19.ndjson") + + expect_no_error( + read_ndjson_file(filename) + ) +})