Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I create an array of values from a single GeoJSON property? [duplicate]

Note: it's been pointed out that some possible solutions were already proposed here. However, .map is exactly what I was looking for and doesn't appear in that otherwise-comprehensive post. Thomas's answer below covers my use case.

Using javascript, how can I make an array of values that represents an arbitrary property value for each feature in a GeoJSON file? I realize I'm failing JSON 101 here, but how can I create this:

['caiparinha','caucasian','margarita']

from this?

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "name": "brasil",
        "beverage": "caiparinha"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          -56.953125,
          -8.754794702435605
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {
        "name": "russia",
        "beverage": "caucasian"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          39.0234375,
          57.136239319177434
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {
        "name": "mexico",
        "beverage": "margarita"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          -105.1171875,
          25.165173368663954
        ]
      }
    }
  ]
}

If the source were a CSV, it would be as easy as selecting/parsing a single column from the attributes, but with GeoJSON the properties (i.e. columns) are so deeply-nested that I haven't had any luck with .map, and I'd like to avoid looping, but I'll take anything at this point.

Context is that I'd like to be able to extract distribution information from each "variable" attached to the features I'm mapping, for example.

like image 428
Bill Morris Avatar asked Jan 31 '26 06:01

Bill Morris


1 Answers

Try something like below

var geojson = {
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "properties": {
        "name": "brasil",
        "beverage": "caiparinha"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          -56.953125,
          -8.754794702435605
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {
        "name": "russia",
        "beverage": "caucasian"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          39.0234375,
          57.136239319177434
        ]
      }
    },
    {
      "type": "Feature",
      "properties": {
        "name": "mexico",
        "beverage": "margarita"
      },
      "geometry": {
        "type": "Point",
        "coordinates": [
          -105.1171875,
          25.165173368663954
        ]
      }
    }
  ]
};

var expected_result = geojson.features.map(function (el) {
  return el.properties.beverage;
});

console.log(expected_result);

If your GeoJSON is coming from an Ajax call, so it's a string in first, juste use JSON.parse(yourGeoJSON)

like image 100
Thomas Gratier Avatar answered Feb 02 '26 22:02

Thomas Gratier



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!