This just loads an external javascript file which sets our GeoJSON data to a variable.
This just loads an external javascript file which sets our GeoJSON data to a variable. Here's what the beginning of it looks like:
```javascript
```javascript
var map_json = {
var map_json = {
@ -150,6 +151,8 @@ var map_json = {
Note that the `map_json` variable is just a JavaScript object that adheres to the GeoJSON structure (it adds an `id` property which is optional). This is very important. If the object didn't adhere to the GeoJSON structure, D3 would not work as it should.
Note that the `map_json` variable is just a JavaScript object that adheres to the GeoJSON structure (it adds an `id` property which is optional). This is very important. If the object didn't adhere to the GeoJSON structure, D3 would not work as it should.
In production, you would probably make an AJAX call to get this data, or at the very least, create your own geoJSON file similar to the one being hosted on rawgit.com. The setup above was created to make learning easier by decreasing the complexity associated with AJAX.
## Use a projection
## Use a projection
Now let's start our `app.js` file:
Now let's start our `app.js` file:
@ -169,13 +172,13 @@ At the bottom of `app.js` let's add:
var worldProjection = d3.geoEquirectangular();
var worldProjection = d3.geoEquirectangular();
```
```
This generates a projection, which governs how we're going to display a round world on a flat page. There's lots of different types of projections we can use: https://github.com/d3/d3-geo/blob/master/README.md#azimuthal-projections
This generates a projection, which governs how we're going to display a round world on a flat screen. There's lots of different types of projections we can use: https://github.com/d3/d3-geo/blob/master/README.md#azimuthal-projections
The line above tells D3 to create an equirectangular projection (https://github.com/d3/d3-geo/blob/master/README.md#geoEquirectangular)
The line above tells D3 to create an equirectangular projection (https://github.com/d3/d3-geo/blob/master/README.md#geoEquirectangular)
## Generate a `<path>` using a projection and the GeoJSON data
## Generate a `<path>` using a projection and the GeoJSON data
Now that we have our projection, we're going to generate `<path>` elements for each element in the array set to the `features` property of `map_json`
Now that we have our projection, we're going to generate `<path>` elements for each data element in the `map_json.features` array. Then we set the fill of each element to `#099`. Add this at the end of app.js:
Writing the kind of code described in the comment above would be very difficult. Luckily, D3 can generate that entire function for us. All we need to do is specify the kind of projection we want to use. At the bottom of `app.js` add the following:
Writing the kind of code described in the comment above would be very difficult. Luckily, D3 can generate that entire function for us. All we need to do is specify the projection that we created earlier. At the bottom of `app.js` add the following: