www.ire.org

From HEADLINE HERE, in the May/June 2006 issue of Uplink. Chase Davis offers this bit of code used to plot your newly created polylines using Shp2XML. This easy-to-use Windows interface converts shapefiles into Google Maps-ready XML in about three clicks of the mouse.


function load() {

    var icon = new GIcon();
    icon.image = "http://labs.google.com/ridefinder/images/mm_20_red.png";
    icon.shadow = "http://labs.google.com/ridefinder/images/mm_20_shadow.png";
    icon.iconSize = new GSize(12, 20);
    icon.shadowSize = new GSize(22, 20);
    icon.iconAnchor = new GPoint(6, 20);
    icon.infoWindowAnchor = new GPoint(5, 1);


    function createMarker(point, tract_id) {
        var marker = new GMarker(point, icon);

        GEvent.addListener(marker, "click", function() {
            marker.openInfoWindowHtml("This is tract " + tract_id + "");
        });

        map.addOverlay(marker);
        return marker;
    }


    if (GBrowserIsCompatible()) {
        var map = new GMap2(document.getElementById("map"));
        map.addControl(new GSmallMapControl());
        map.addControl(new GMapTypeControl());
        map.setCenter(new GLatLng(38.981, -92.333), 9);

        GDownloadUrl("polyline.xml", function(data) {
            var xml = GXml.parse(data);
            var areas = xml.documentElement.getElementsByTagName("shape");
            for (var a = 0; a < areas.length; a++) {
                var color = areas[a].getAttribute("color");
                var markers = areas[a].getElementsByTagName("marker");
                var tract_id = areas[a].getAttribute("name");
                var points = [];
                var center_lat = 0.0;
                var center_lng = 0.0;
                for (var i = 0; i < markers.length; i++) {
                    center_lat += parseFloat(markers[i].getAttribute("lat"));
                    center_lng += parseFloat(markers[i].getAttribute("lng"));
                    points[i] = new GLatLng(parseFloat(markers[i].getAttribute("lat")), parseFloat(markers[i].getAttribute("lng")));      
                }
                map.addOverlay(new GPolyline(points, color, 3, 0.5));
            
                center_lat = center_lat / markers.length;
                center_lng = center_lng / markers.length;

                point = new GLatLng(center_lat,center_lng);
                createMarker(point, tract_id); 
            }
        });
    }
}