Minor geojson example edits

This commit is contained in:
mourner 2011-09-30 13:34:06 +03:00
parent 17ec851a02
commit b22102841d
2 changed files with 266 additions and 276 deletions

View File

@ -20,8 +20,7 @@
cloudmadeAttribution = 'Map data © 2011 OpenStreetMap contributors, Imagery © 2011 CloudMade',
cloudmade = new L.TileLayer(cloudmadeUrl, {maxZoom: 18, attribution: cloudmadeAttribution});
map.setView(new L.LatLng(39.74738794765598, -105.00002861022949), 14)
.addLayer(cloudmade);
map.setView(new L.LatLng(39.747, -105), 14).addLayer(cloudmade);
var BaseballIcon = L.Icon.extend({
iconUrl: 'baseball-marker.png',
@ -55,41 +54,41 @@
var lightRailGeojsonLayer = new L.GeoJSON();
geojsonLayer.on("featureparse", function(e){
geojsonLayer.on("featureparse", function (e) {
var popupContent = "<p>I started out as a GeoJSON " + e.geometryType + ", but now I'm a Leaflet vector!</p>";
if (e.geometryType == "Point"){
if (e.geometryType == "Point") {
popupContent += "<p>This GeoJSON Point has been transformed into a <a href='http://leaflet.cloudmade.com/reference.html#circlemarker'>CircleMarker</a> by passing a <code>pointToLayer</code> function in the <a href='http://leaflet.cloudmade.com/reference.html#geojson-options'>GeoJSON options</a> when instantiating the GeoJSON layer. View source for details.</p>";
}
if (e.properties && e.properties.popupContent){
if (e.properties && e.properties.popupContent) {
popupContent += e.properties.popupContent;
}
e.layer.bindPopup(popupContent);
if (e.properties && e.properties.style && e.layer.setStyle){
if (e.properties && e.properties.style && e.layer.setStyle) {
e.layer.setStyle(e.properties.style);
}
});
anotherGeojsonLayer.on("featureparse", function (e){
anotherGeojsonLayer.on("featureparse", function (e) {
var popupContent = "<p>I started out as a GeoJSON " + e.geometryType + ", but now I'm a Leaflet vector!</p>";
popupContent += "<p>This GeoJSON Point has been transformed into a custom Marker by passing a <code>pointToLayer</code> function in the <a href='http://leaflet.cloudmade.com/reference.html#geojson-options'>GeoJSON options</a> when instantiating the GeoJSON layer. View source for details.</p>";
if (e.properties && e.properties.popupContent){
if (e.properties && e.properties.popupContent) {
popupContent += e.properties.popupContent;
}
e.layer.bindPopup(popupContent);
});
lightRailGeojsonLayer.on("featureparse", function (e){
lightRailGeojsonLayer.on("featureparse", function (e) {
var popupContent = "<p>I started out as a GeoJSON " + e.geometryType + ", but now I'm a Leaflet vector!</p>";
popupContent += "<p>This is the default look of a GeoJSON Point.</p>";
if (e.properties && e.properties.popupContent){
if (e.properties && e.properties.popupContent) {
popupContent += e.properties.popupContent;
}
e.layer.bindPopup(popupContent);
});
map.addLayer(geojsonLayer)
.addLayer(anotherGeojsonLayer)
.addLayer(lightRailGeojsonLayer);
.addLayer(anotherGeojsonLayer)
.addLayer(lightRailGeojsonLayer);
geojsonLayer.addGeoJSON(freeBus);
geojsonLayer.addGeoJSON(bicycleRental);

View File

@ -42,7 +42,7 @@
<p><a href="../examples.html">&larr; Back to the list of examples</a></p>
<h3>Using GeoJSON with Leaflet</h3>
<p>In this example, you'll learn how to create and interact with map vectors created from <a href="http://geojson.org/">GeoJSON</a> objects.</p>
<p>GeoJSON is becoming a very popular data format among many GIS technologies and services — it's simple, lightweight, straightforward, and Leaflet is quite good at handling it. In this example, you'll learn how to create and interact with map vectors created from <a href="http://geojson.org/">GeoJSON</a> objects.</p>
<div id="map" style="height: 220px; margin-bottom: 18px"></div>
@ -117,7 +117,7 @@
</script>
<p><a target="_blank" href="geojson-example.html">View example &rarr;</a></p>
<p><a target="_blank" href="geojson-example.html">View example on a separate page &rarr;</a></p>
<h3>About GeoJSON</h3>
@ -154,20 +154,7 @@ geojsonLayer.addGeoJSON(geojsonFeature);</code></pre>
<p>We can also instantiate the GeoJSON layer with a GeoJSON object to show it immediately, without having to call <code>addGeoJSON</code>.</p>
<pre><code>var geojsonFeature = {
"type": "Feature",
"properties": {
"name": "Coors Field",
"amenity": "Baseball Stadium",
"popupContent": "This is where the Rockies play!"
},
"geometry": {
"type": "Point",
"coordinates": [-104.99404, 39.75621]
}
};
var geojsonLayer = new L.GeoJSON(geojsonFeature);
<pre><code>var geojsonLayer = new L.GeoJSON(geojsonFeature);
map.addLayer(geojsonLayer);</code></pre>
@ -175,15 +162,17 @@ map.addLayer(geojsonLayer);</code></pre>
<p>We can use popups to show information about these features when they are clicked. To accomplish this we'll listen to the <code>featureparse</code> event of the GeoJSON layer. Here we're checking to see if a feature has a property named "popupContent" and if so binding a popup to the feature so this text (or HTML) appears when clicked.</p>
<pre><code>geojsonLayer.on("featureparse", function (e){
<pre><code>geojsonLayer.on("featureparse", function (e) {
if (e.properties &amp;&amp; e.properties.popupContent){
e.layer.bindPopup(e.properties.popupContent);
}
});</code></pre>
<p>Make sure to do this <em>before</em> adding GeoJSON objects through the <code>addGeoJSON</code> method.</p>
<h3>Styling Features</h3>
<p>We can also listen to the <code>featureparse</code> event to style our LineString and Polygon features. As with our popup content, we can store our styling information in the properties of the GeoJSON object as well. These style properties should match those found in <a href="http://leaflet.cloudmade.com/reference.html#path-options">path options</a>. Our feature with styling information might look something like:</p>
<p>We can also listen to the <code>featureparse</code> event to style our Polyline and Polygon features. As with our popup content, we can store our styling information in the properties of the GeoJSON object as well. These style properties should match those found in <a href="http://leaflet.cloudmade.com/reference.html#path-options">path options</a>. Our feature with styling information might look something like:</p>
<pre><code>var freeBus = {
"type": "Feature",
@ -219,34 +208,36 @@ map.addLayer(geojsonLayer);</code></pre>
<h3>Styling Points</h3>
<p>Points are handled differently than LineStrings and Polygons. By default simple markers are drawn for GeoJSON Points. We can alter this by passing a <code>pointToLayer</code> function in a <a href="http://leaflet.cloudmade.com/reference.html#geojson-options">GeoJSON options</a> object when creating the GeoJSON layer. This function is passed a <a href="http://leaflet.cloudmade.com/reference.html#latlng">LatLng</a> and should return an instance of ILayer, in this case likely a <a href="http://leaflet.cloudmade.com/reference.html#marker">Marker</a> or <a href="http://leaflet.cloudmade.com/reference.html#circlemarker">CircleMarker</a>.</p>
<p>Points are handled differently than polylines and polygons. By default simple markers are drawn for GeoJSON Points. We can alter this by passing a <code>pointToLayer</code> function in a <a href="http://leaflet.cloudmade.com/reference.html#geojson-options">GeoJSON options</a> object when creating the GeoJSON layer. This function is passed a <a href="http://leaflet.cloudmade.com/reference.html#latlng">LatLng</a> and should return an instance of ILayer, in this case likely a <a href="http://leaflet.cloudmade.com/reference.html#marker">Marker</a> or <a href="http://leaflet.cloudmade.com/reference.html#circlemarker">CircleMarker</a>.</p>
<p>Here we're using a CircleMarker:</p>
<pre><code>var geojsonLayer = new L.GeoJSON(null, {
pointToLayer: function (latlng){
return new L.CircleMarker(latlng, {
radius: 8,
fillColor: "#ff7800",
color: "#000",
weight: 1,
opacity: 1,
fillOpacity: 0.8
});
<pre><code>var geojsonMarkerOptions = {
radius: 8,
fillColor: "#ff7800",
color: "#000",
weight: 1,
opacity: 1,
fillOpacity: 0.8
};
var geojsonLayer = new L.GeoJSON(someGeojsonFeature, {
pointToLayer: function (latlng) {
return new L.CircleMarker(latlng, geojsonMarkerOptions);
}
});</code></pre>
<p>And here's an example of using a custom Marker:</p>
<pre><code>var geojsonLayer = new L.GeoJSON(null, {
pointToLayer: function (latlng){
<pre><code>var geojsonLayer = new L.GeoJSON(someGeojsonFeature, {
pointToLayer: function (latlng) {
return new L.Marker(latlng, {
icon: new MyCustomIcon()
});
}
});</code></pre>
<p>View the <a href="geojson-example.html">example page</a> to view in detail what all is possible with the GeoJSON layer.</p>
<p>View the <a href="geojson-example.html">example page</a> to see in detail what is possible with the GeoJSON layer.</p>
<hr />