10

I have a Geojson file with some adjacent polygons and I want to merge them into one. I know it's a recurrent question but I can't find information for polygons with latitude and longitude coordinates like in this geojson :

{
"type": "FeatureCollection",
"features": [{
    "type": "Feature",
    "id": "16966",
    "properties": {
        "Name": "BEYNES"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.874862143378, 48.834371283832],
                [1.8656030688715, 48.831612507285],
                [1.8515105581603, 48.834338209867],
                [1.8466221791684, 48.828669687135],
                [1.8415374906793, 48.828818416443],
                [1.8392188748285, 48.830163082204],
                [1.8419058888315, 48.843509743804],
                [1.8472716401406, 48.849200964455],
                [1.8375210341485, 48.856814659389],
                [1.8383984699903, 48.87125874614],
                [1.8572939822902, 48.871944300476],
                [1.874663272221, 48.877028568925],
                [1.8831026195664, 48.874535338148],
                [1.9127169447188, 48.860849357594],
                [1.9030441003473, 48.846352529476],
                [1.8932786620468, 48.847377864779],
                [1.8885787644301, 48.846659731042],
                [1.8820915893247, 48.834609966105],
                [1.874862143378, 48.834371283832]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "19484",
    "properties": {
        "Name": "VILLIERS-LE-MAHIEU"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.7780400297013, 48.832305931728],
                [1.7734339848429, 48.83177307884],
                [1.7611156919393, 48.841036344684],
                [1.7664174460888, 48.850202460021],
                [1.7590182348483, 48.858733519882],
                [1.7586155859222, 48.868766940337],
                [1.7751309254077, 48.872615718624],
                [1.7866538204874, 48.862012015338],
                [1.7869427495986, 48.855458134055],
                [1.7916969548512, 48.854399942691],
                [1.7780400297013, 48.832305931728]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "19635",
    "properties": {
        "Name": "THOIRY"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.7916969548512, 48.854399942691],
                [1.7869427495986, 48.855458134055],
                [1.7866538204874, 48.862012015338],
                [1.7751309254077, 48.872615718624],
                [1.7890825137274, 48.88596098882],
                [1.809924587051, 48.885828200975],
                [1.8232153433812, 48.876452907166],
                [1.8120930366694, 48.869687419516],
                [1.8059996841005, 48.860128943481],
                [1.7916969548512, 48.854399942691]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "22025",
    "properties": {
        "Name": "SAINT-GERMAIN-DE-LA-GRANGE"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.9130661363292, 48.819937951319],
                [1.9012689316149, 48.821961792363],
                [1.8902265103296, 48.83135783825],
                [1.8813533302838, 48.831553995346],
                [1.8820915893247, 48.834609966105],
                [1.8885787644301, 48.846659731042],
                [1.8932786620468, 48.847377864779],
                [1.918172631346, 48.835751243515],
                [1.9217370910726, 48.82612360123],
                [1.9178385858043, 48.820341013587],
                [1.9130661363292, 48.819937951319]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "22141",
    "properties": {
        "Name": "MARCQ"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.8248465610939, 48.850691703059],
                [1.8126901224641, 48.853063092402],
                [1.8059996841005, 48.860128943481],
                [1.8120930366694, 48.869687419516],
                [1.8232153433812, 48.876452907166],
                [1.832123740674, 48.878689723796],
                [1.8383984699903, 48.87125874614],
                [1.8375210341485, 48.856814659389],
                [1.8246539514431, 48.853792824064],
                [1.8248465610939, 48.850691703059]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "23142",
    "properties": {
        "Name": "PLAISIR"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.9859353011511, 48.799648360798],
                [1.9700422200803, 48.799863243499],
                [1.9568703127355, 48.789270428369],
                [1.9412379043212, 48.791543482649],
                [1.9149109434793, 48.802631449948],
                [1.9130661363292, 48.819937951319],
                [1.9178385858043, 48.820341013587],
                [1.9217370910726, 48.82612360123],
                [1.9308900413011, 48.82617879826],
                [1.9432582596776, 48.836964867387],
                [1.9687926794162, 48.834831269347],
                [1.9700860589995, 48.83487839014],
                [1.9668984852354, 48.821791311587],
                [1.9864791162903, 48.799688951127],
                [1.9859353011511, 48.799648360798]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "25041",
    "properties": {
        "Name": "NEAUPHLE-LE-CHATEAU"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.9149109434793, 48.802631449948],
                [1.898492103809, 48.809622894015],
                [1.8936915762635, 48.808670122548],
                [1.8889579820032, 48.809057956502],
                [1.9012689316149, 48.821961792363],
                [1.9130661363292, 48.819937951319],
                [1.9149109434793, 48.802631449948]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "25042",
    "properties": {
        "Name": "VICQ"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.8479013041869, 48.812707864194],
                [1.8290034942099, 48.811265015475],
                [1.8111878056542, 48.814965840962],
                [1.8138162274863, 48.821557956532],
                [1.8061163949282, 48.830053068487],
                [1.8260692281346, 48.8296929387],
                [1.8327204785815, 48.833814514469],
                [1.8392188748285, 48.830163082204],
                [1.8415374906793, 48.828818416443],
                [1.8479013041869, 48.812707864194]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "28635",
    "properties": {
        "Name": "ANDELU"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.8232153433812, 48.876452907166],
                [1.809924587051, 48.885828200975],
                [1.7890825137274, 48.88596098882],
                [1.7831043145867, 48.891413707227],
                [1.8056581682382, 48.898808951748],
                [1.8355241961203, 48.88517153445],
                [1.832123740674, 48.878689723796],
                [1.8232153433812, 48.876452907166]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "29431",
    "properties": {
        "Name": "GOUPILLIERES"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.7586155859222, 48.868766940337],
                [1.7399133540032, 48.871449653856],
                [1.7412768098614, 48.874270196957],
                [1.7500295563815, 48.875450216663],
                [1.7522176666426, 48.87802738985],
                [1.7483369243043, 48.879497893862],
                [1.7704322974105, 48.896069058229],
                [1.7831043145867, 48.891413707227],
                [1.7890825137274, 48.88596098882],
                [1.7751309254077, 48.872615718624],
                [1.7586155859222, 48.868766940337]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "30394",
    "properties": {
        "Name": "SAULX-MARCHAIS"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.8392188748285, 48.830163082204],
                [1.8327204785815, 48.833814514469],
                [1.8339180317868, 48.843621026126],
                [1.8248465610939, 48.850691703059],
                [1.8246539514431, 48.853792824064],
                [1.8375210341485, 48.856814659389],
                [1.8472716401406, 48.849200964455],
                [1.8419058888315, 48.843509743804],
                [1.8392188748285, 48.830163082204]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "34743",
    "properties": {
        "Name": "OSMOY"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.7164466657999, 48.854920532859],
                [1.7052218923542, 48.860142271734],
                [1.7018533752573, 48.865673293225],
                [1.7198777076843, 48.872271383422],
                [1.7292022608762, 48.871219483604],
                [1.7274882838909, 48.859337782823],
                [1.7164466657999, 48.854920532859]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "35495",
    "properties": {
        "Name": "FLEXANVILLE"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.7400314884878, 48.837820948808],
                [1.7329083268502, 48.84610157804],
                [1.7189195066054, 48.848587971564],
                [1.7164466657999, 48.854920532859],
                [1.7274882838909, 48.859337782823],
                [1.7292022608762, 48.871219483604],
                [1.7314395279166, 48.873968471423],
                [1.7399133540032, 48.871449653856],
                [1.7586155859222, 48.868766940337],
                [1.7590182348483, 48.858733519882],
                [1.7664174460888, 48.850202460021],
                [1.7611156919393, 48.841036344684],
                [1.7400314884878, 48.837820948808]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "36858",
    "properties": {
        "Name": "THIVERVAL-GRIGNON"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.9687926794162, 48.834831269347],
                [1.9432582596776, 48.836964867387],
                [1.9308900413011, 48.82617879826],
                [1.9217370910726, 48.82612360123],
                [1.918172631346, 48.835751243515],
                [1.8932786620468, 48.847377864779],
                [1.9030441003473, 48.846352529476],
                [1.9127169447188, 48.860849357594],
                [1.9217113433858, 48.85832247492],
                [1.9613817024309, 48.851891899558],
                [1.970646933861, 48.840972240396],
                [1.9687926794162, 48.834831269347]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "37629",
    "properties": {
        "Name": "NEAUPHLE-LE-VIEUX"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.8726237069958, 48.798651240921],
                [1.8711691241023, 48.799177186792],
                [1.8417552547252, 48.800622726785],
                [1.8479013041869, 48.812707864194],
                [1.8415374906793, 48.828818416443],
                [1.8466221791684, 48.828669687135],
                [1.8515105581603, 48.834338209867],
                [1.8656030688715, 48.831612507285],
                [1.874862143378, 48.834371283832],
                [1.8658960165459, 48.822530967257],
                [1.8689494730467, 48.8130077893],
                [1.8850727051194, 48.805432976807],
                [1.8858999508989, 48.804316374995],
                [1.8758215111851, 48.805049510395],
                [1.8726237069958, 48.798651240921]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "38841",
    "properties": {
        "Name": "MONTAINVILLE"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.8383984699903, 48.87125874614],
                [1.832123740674, 48.878689723796],
                [1.8355241961203, 48.88517153445],
                [1.8585137392849, 48.890942160516],
                [1.8687589726649, 48.885193372296],
                [1.874663272221, 48.877028568925],
                [1.8572939822902, 48.871944300476],
                [1.8383984699903, 48.87125874614]
            ]
        ]
    }
}, {
    "type": "Feature",
    "id": "43121",
    "properties": {
        "Name": "VILLIERS-SAINT-FREDERIC"
    },
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [1.8850727051194, 48.805432976807],
                [1.8689494730467, 48.8130077893],
                [1.8658960165459, 48.822530967257],
                [1.874862143378, 48.834371283832],
                [1.8820915893247, 48.834609966105],
                [1.8813533302838, 48.831553995346],
                [1.8902265103296, 48.83135783825],
                [1.9012689316149, 48.821961792363],
                [1.8889579820032, 48.809057956502],
                [1.8936915762635, 48.808670122548],
                [1.8940011070565, 48.805632849681],
                [1.8850727051194, 48.805432976807]
            ]
        ]
    }
}]

}

raw polygons

Is there a way to build a master polygon with the external form of all polygons?

3 Answers 3

13

You can use Mapshaper for this, and then dissolve from the command line:

mapshaper --dissolve -i your_data.geojson
2
  • 4
    Great tool. If you get syntax errors, try it like mapshaper -i your_data.geojson --dissolve May 17, 2016 at 23:54
  • Great tip @KyleHotchkiss, thanks May 11, 2020 at 17:31
4

It's easy to do with QGis.

  1. Open QGis
  2. Drag&Drop the geojson file to qgis
  3. use the "dissolve" tool in the vector menu (it's inside a submenu). use the "dissolve all" option from the dropdown
  4. this will create a shapefile (check the box to output to the map)
  5. which you can then again save as a geojson file by right-clicking it in the layer pane and choosing "save as" and then geojson as format

"Dissolve" is the name of the operation you want. This might alsio give you further hints for googling.

4
  • 1
    thanks til_b for your proposition, I use the jayarem one but yours look nice too but less scalable
    – henri_1310
    Oct 14, 2014 at 15:36
  • Yes it is less scalable. Didn't know about mapshaper before - so i learned new stuff also!
    – til_b
    Oct 14, 2014 at 15:47
  • Thanks for pointing me to the dissolve tool. I followed your steps and almost got what I wanted, except for the error below. It outputed the layer I wanted, except feature 44 was cut out. Any suggestion on how to find out what exactly was invalid? The error message: Feature (44) has invalid geometry and has been skipped. Please fix the geometry or change the Processing setting to the "Ignore invalid input features" option.
    – carpiediem
    May 25, 2018 at 6:24
  • 1
    Got it. Toolbox > Vector Geometry > Fix geometries
    – carpiediem
    May 25, 2018 at 6:30
2

In case one wants to do algorithmically, here is a python snippet:

#!/usr/bin/env python

from json import load, JSONEncoder
from argparse import ArgumentParser, FileType
from re import compile
import sys

from shapely.geometry import Polygon, mapping
from shapely.ops import cascaded_union


parser = ArgumentParser(description="Group (merge) the GeoJSON geometries of same vehicles with different day index.")

defaults = dict(outfile=sys.stdout)

parser.set_defaults(**defaults)

parser.add_argument('infile', type=FileType('r'), help='GeoJSON file whose vehicles will be merged')

parser.add_argument('-o', '--outfile', dest='outfile', type=FileType('wb', 0), help='Outfile')


if __name__ == '__main__':
    args = parser.parse_args()
    infile = args.infile
    outfile = args.outfile

    file = load(infile)

    polygons = []

    for feat in file['features']:
        polygon = Polygon([ (coor[0], coor[1]) for coor in  feat['geometry']['coordinates'][0] ])
        polygons.append(polygon)

    new_geometry = mapping(cascaded_union(polygons)) # This line merges the polygones

    new_feature = dict(type='Feature', id="", properties=dict(Name=""),geometry=dict(type=new_geometry['type'], coordinates=new_geometry['coordinates']))

    outjson = dict(type='FeatureCollection', features=[new_feature])

    encoder = JSONEncoder(separators=(',', ':'))
    encoded = encoder.iterencode(outjson)

    output = outfile

    for token in encoded:
        output.write(token)

which returns the following output for the above input

image

{
  "type": "FeatureCollection",
  "features": [
    {
      "type": "Feature",
      "id": "",
      "properties": {
        "Name": ""
      },
      "geometry": {
        "type": "Polygon",
        "coordinates": [
          [
            [
              1.7780400297013,
              48.832305931728
            ],
            [
              1.7734339848429,
              48.83177307884
            ],
            [
              1.7611156919393,
              48.841036344684
            ],
            [
              1.7400314884878,
              48.837820948808
            ],
            [
              1.7329083268502,
              48.84610157804
            ],
            [
              1.7189195066054,
              48.848587971564
            ],
            [
              1.7164466657999,
              48.854920532859
            ],
            [
              1.7052218923542,
              48.860142271734
            ],
            [
              1.7018533752573,
              48.865673293225
            ],
            [
              1.7198777076843,
              48.872271383422
            ],
            [
              1.7292022608762,
              48.871219483604
            ],
            [
              1.7314395279166,
              48.873968471423
            ],
            [
              1.7399133540032,
              48.871449653856
            ],
            [
              1.7412768098614,
              48.874270196957
            ],
            [
              1.7500295563815,
              48.875450216663
            ],
            [
              1.7522176666426,
              48.87802738985
            ],
            [
              1.7483369243043,
              48.879497893862
            ],
            [
              1.7704322974105,
              48.896069058229
            ],
            [
              1.7831043145867,
              48.891413707227
            ],
            [
              1.8056581682382,
              48.898808951748
            ],
            [
              1.8355241961203,
              48.88517153445
            ],
            [
              1.8585137392849,
              48.890942160516
            ],
            [
              1.8687589726649,
              48.885193372296
            ],
            [
              1.874663272221,
              48.877028568925
            ],
            [
              1.8831026195664,
              48.874535338148
            ],
            [
              1.9127169447188,
              48.860849357594
            ],
            [
              1.9217113433858,
              48.85832247492
            ],
            [
              1.9613817024309,
              48.851891899558
            ],
            [
              1.970646933861,
              48.840972240396
            ],
            [
              1.9687926794162,
              48.834831269347
            ],
            [
              1.9700860589995,
              48.83487839014
            ],
            [
              1.9668984852354,
              48.821791311587
            ],
            [
              1.9864791162903,
              48.799688951127
            ],
            [
              1.9859353011511,
              48.799648360798
            ],
            [
              1.9700422200803,
              48.799863243499
            ],
            [
              1.9568703127355,
              48.789270428369
            ],
            [
              1.9412379043212,
              48.791543482649
            ],
            [
              1.9149109434793,
              48.802631449948
            ],
            [
              1.898492103809,
              48.809622894015
            ],
            [
              1.8936915762635,
              48.808670122548
            ],
            [
              1.8940011070565,
              48.805632849681
            ],
            [
              1.8850727051194,
              48.805432976807
            ],
            [
              1.8858999508989,
              48.804316374995
            ],
            [
              1.8758215111851,
              48.805049510395
            ],
            [
              1.8726237069958,
              48.798651240921
            ],
            [
              1.8711691241023,
              48.799177186792
            ],
            [
              1.8417552547252,
              48.800622726785
            ],
            [
              1.8479013041869,
              48.812707864194
            ],
            [
              1.8290034942099,
              48.811265015475
            ],
            [
              1.8111878056542,
              48.814965840962
            ],
            [
              1.8138162274863,
              48.821557956532
            ],
            [
              1.8061163949282,
              48.830053068487
            ],
            [
              1.8260692281346,
              48.8296929387
            ],
            [
              1.8327204785815,
              48.833814514469
            ],
            [
              1.8339180317868,
              48.843621026126
            ],
            [
              1.8248465610939,
              48.850691703059
            ],
            [
              1.8126901224641,
              48.853063092402
            ],
            [
              1.8059996841005,
              48.860128943481
            ],
            [
              1.7916969548512,
              48.854399942691
            ],
            [
              1.7780400297013,
              48.832305931728
            ]
          ]
        ]
      }
    }
  ]
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.