1

按照这个例子:http : //andywoodruff.com/blog/simple-shapefile-drawing-in-actionscript-3/ 我正在尝试创建一个世界地图,类似于 jqvmap。6 这是我的结果: http: //www.prestitiprotestati.info/test/Test.html

现在我需要创建一个更逼真的地图,在这个平面世界地图上添加一些投影。

我正在学习来自http://vis4.net/blog/posts/rendering-world-maps-in-as3/的教程,但是当我尝试创建投影时出现一个奇怪的错误,我无法理解来自哪里.

这是我的尝试:

    private function onShapefile( event:Event ) : void
    {

        // use the ShpTools class to parse the shapefile into an array of records
        var records : Array = ShpTools.readRecords(event.target.data).records;

        // create a feature (point, polyline, or polygon) from each record
        /*for each( var record : ShpRecord in records ){
            var feature : ShpFeature = createFeature(record);
            if ( feature != null ) features.push( feature );
        }*/
        var record:ShpRecord, poly:ShpPolygon, coords:Array, pt:ShpPoint, o:Point;
        var polygons = [];
        var bounds = new Rectangle();

        for each (record in records) {
            if (record.shapeType == ShpType.SHAPE_POLYGON) {
                poly = record.shape as ShpPolygon;
                for each (coords in poly.rings) {
                    var out:PointSet = new PointSet;
                    for each (pt in coords){ 
                        trace("PT.X: "+ObjectUtil.toString(pt.x));
                        if (projection.testPointDeg(pt.x, pt.y)) {
                            o = projection.project(deg2rad(pt.x), deg2rad(pt.y), new Point());
                            o.y *= -1;
                            out.push(o);
                        }
                    }
                    var out_poly:Polygon = new Polygon(out);
                    polygons.push(out_poly);
                    bounds = bounds.union(out_poly.boundingBox);
                }
            }
        }

        shpLoaded = true;

        // draw the features
        drawMap();

        // to signal the completion of map loading/drawing
        dispatchEvent(new Event("map loaded",true));
    }
    public function deg2rad(deg:Number):Number
    {
        return deg * Math.PI / 180.0;
    }

我得到的错误来自这一行:

if (projection.testPointDeg(pt.x, pt.y))

错误是:

TypeError: Error #1009: Cannot access a property or method of a null object reference.
at com.cartogrammar.shp::ShpMap/onShapefile()
 [E:\FlashBuilder\Cartogrammar\src\com\cartogrammar\shp\ShpMap.as:96]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at flash.net::URLLoader/onComplete()

你可以帮帮我吗?

4

0 回答 0