OpenLayers使用Proj4JS进行地图投影

时间:2014-08-08 16:43:33

标签: javascript d3.js openlayers gis proj4js

我正在尝试通过OpenLayers地图覆盖有关切萨皮克湾流域的数据。问题是,无论我如何尝试投影数据,分水岭(用d3绘制)都不在正确的位置。我用来缩放到分水岭的代码在这里:

zoomToWatershed: function() {
  // Remove any svg currently on the map
  CP.MapFunctions.reset();
  // Fetch data from Flask
  CP.RequestHandler.get(
     "/get_data/watershed_topo", 
     function(json) {  
        ws = JSON.parse(json);
        watershed_coords = ws.features[0].geometry.coordinates[0];
        CP.map.setCenter(CP.cumberland, CP.watershed_zoom);
        watershed_coords.forEach(function(pair) {
           // Transform from NAD83 to Web Mercator
           var t = proj4(proj4.defs["EPSG:4269"], proj4.defs["SR-ORG:7483"], pair);
           // Get the pixel values
           px = CP.map.getViewPortPxFromLonLat(
              new OpenLayers.LonLat(t[0], t[1])
              );
           pair[0] = px.x;
           pair[1] = px.y;
        });
        // console.log(watershed_coords);
        CP.canvas.append("path")
           .datum(watershed_coords)
           .attr("d", d3.svg.line())
           .attr("class", "watershed");
     }
  );
}

我用于分水岭的形状文件没有.prj文件,但ftp服务器上的元数据表示使用的投影是NAD83(EPSG4269),因此转换。 SR-ORG:7483相当于EPSG:900913,或网络标准制图投影。

Proj4js部分在一个单独的js文件中定义,如下所示:

proj4.defs["EPSG:4269"] = "+proj=longlat +ellps=GRS80 +datum=NAD83 +no_defs"; 
proj4.defs["SR-ORG:6864"] = "+proj=merc +lon_0=0 +k=1 +x_0=0 +y_0=0 +a=637813 +b=6378137 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs";
proj4.defs["SR-ORG:7483"] = "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs";

我的问题是:我哪里错了?我测试了两个网络标准的制图预测(即EPSG:900913和EPSG:3857,我很确定它实际上是同一个东西),以及标准EPSG:4326。

0 个答案:

没有答案
相关问题