2017-08-25 1 views
0

zuweisbar. In d3.geo API 3 hat es die Funktion, die Geo-Koordinaten auf die Karte zu projizieren.GeoStream ist nicht dem Parameter vom Typ 'GeoRawProjection' in d3 API Version 4

zum Beispiel der Code in der Version 3 ist wie

var transform = d3.geo.transform({point: self.projectPoint}); 
      self._path = d3.geo.path().projection(transform); 

projectPoint: function(x, y) { 
     var point = MELBPARKING.Map.map.latLngToLayerPoint(new L.LatLng(y, x)); 
     this.stream.point(point.x, point.y); 
    } 

Jetzt habe ich den angular2 Rahmen verwenden die Broschüre Karte zu bauen, um die Koordinaten in D3.js zu projizieren, die D3.js ‚s API gebaut auf the version 4. Ich schaute in den D3.js ‚s-Bibliothek, die Geotransformation und geoProjection exportieren

export {default as geoTransform} from "./src/transform"; 
export {default as geoProjection, projectionMutator as geoProjectionMutator} from "./src/projection/index"; 

In meinem angular2 Projekt verwenden ich d3.js und leaflet.js eine Broschüre Kartenkomponente zu bauen, wie unten gezeigt

import * as L from 'leaflet'; 
import * as d3 from 'd3'; 
import {geoTransform,geoProjection} from "d3-geo"; 

export class MapsComponent implements OnInit { 
    map; 
    _path ; 

    ngOnInit(){ 
     console.log('init map'); 
     this.map = L.map('mapid', { 
     center: L.latLng(38, 15), 
     zoom: 5, 
     }); 
     this.map.setView(L.latLng(-37.81108500, 144.96269970), 18); 
     var self = this; 
     var transform = geoTransform({point: self.projectPoint}) 
     console.log(transform); 
     self._path = geoProjection(transform); 
    } 

    projectPoint(x, y) { 
     var point = this.map.latLngToLayerPoint(new L.LatLng(y,x)); 
     this.map.stream.point(point.x, point.y); 
    } 
} 

jedoch das Projekt

ERROR in /maps.component.ts (87,32): Argument of type '{ stream(s: 
GeoStream): { point: (x: any, y: any) => void; } & GeoStream; }' is not 
assignable to parameter of type 'GeoRawProjection'. 

    Type '{ stream(s: GeoStream): { point: (x: any, y: any) => void; } & 
GeoStream; }' provides no match for the signature '(lambda: number, phi: 
number): [number, number]'. 

was falsch ist

Antwort

0

pa einen Fehler wie unten erfüllt ss deine Transformation als erstes Argument zu d3.geoPath, nicht d3.geoProjection. Dieses Argument kann pro path.projection ein beliebiger Projektionsstrom sein (der für planare Transformationen wie Skalierung und Translation nützlich ist), nicht nur eine sphärische d3.geoProjection-Instanz.

Verwandte Themen