示例#1
0
        public ResponseModel GetCitysByType(string t = "CN")
        {
            if (_handle == null)
            {
                _handle = new MapHandle();
            }
            ResponseModel responseModel = new ResponseModel();

            try
            {
                responseModel.description = "请求数据成功!";
                responseModel.success     = true;
                DataTable dt = _handle.GetCitysByType(t);
                if (dt != null)
                {
                    List <CityModel> lsCity   = dt.DataTableToList <CityModel>();
                    FeatureModel     features = new FeatureModel();
                    features.displayFieldName = "city";
                    features.primaryFieldName = "code";
                    features.features         = JsonConvert.DeserializeObject(JsonConvert.SerializeObject(lsCity));//(Contact[])ls.ToArray();
                    responseModel.response    = features;
                }
            }
            catch (Exception ex)
            {
                responseModel.description = ex.Message.ToString();
                responseModel.success     = false;
                responseModel.response    = JsonConvert.DeserializeObject("{}");
            }
            return(responseModel);
        }
示例#2
0
 /// <summary>
 /// 构造函数并实例化操作对象
 /// </summary>
 public MapController()
 {
     if (_handle == null)
     {
         _handle = new MapHandle();
     }
 }
示例#3
0
 //单点-正投影
 public PointF GetXYFromLatLon(PointF pointOrg, MapHandle.config.ProjPara proj)
 {
     pointOrg.X = (float)(pointOrg.X * DEG2RAD);
     pointOrg.Y = (float)(pointOrg.Y * DEG2RAD);
     //投影参数初始化
     IntPtr pj = ProjWrapper.pj_init_plus(getSrcProj(proj));
     projUV temp = new projUV(pointOrg.X, pointOrg.Y);
     projUV coord = ProjWrapper.pj_fwd(temp, pj);
     PointF pointPrj = new PointF();
     pointPrj.X = (float)(coord.U);
     pointPrj.Y = (float)(coord.V);
     return pointPrj;
 }
示例#4
0
 //单点-反投影
 public PointF GetLatLonFromXY(PointF pointXY, MapHandle.config.ProjPara proj)
 {
     //投影参数初始化
     PointF result = new PointF();
     IntPtr pj = ProjWrapper.pj_init_plus(getSrcProj(proj));
     projUV temp = new projUV(pointXY.X, pointXY.Y);
     projUV coord = ProjWrapper.pj_inv(temp, pj);
     result.X = (float)(coord.U);
     result.Y = (float)(coord.V);
     result.X = (float)(result.X * RAD2DEG);
     result.Y = (float)(result.Y * RAD2DEG);
     return result;
 }
示例#5
0
        public VectorLayer getSHPLayer(string layername, string fullPath, Color color, int lineWidth, MapHandle.config.ProjPara pjPara)
        {
            VectorLayer vl = new VectorLayer(layername);
            vl.DataSource = new ShapeFile(fullPath);
            vl.Enabled = true;
            vl.Style.Fill = new SolidBrush(Color.Transparent);
            vl.Style.Outline = new Pen(color, 0.4f);
            vl.Style.Line.Width = lineWidth;
            vl.Style.Line.Color = color;

            vl.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
            vl.Style.EnableOutline = true;

            //设置投影参数
            vl.CoordinateTransformation = pj.getmapTransform(pjPara);
            //vl.Envelope.

            return vl;
        }
示例#6
0
        //从ProjPara参数中获取Proj4的投影参数
        string getSrcProj(MapHandle.config.ProjPara proj)
        {
            string srcproj = "";

            //获取投影方式对应的index
            int projType = getProjNum(proj.type);

            switch(projType)
            {
                case 1:   //等经纬
                    srcproj = ProjParam("latlong", ProjectionAPI.Setting.ProjParamSetting.Ellps.WGS84, ProjectionAPI.Setting.ProjParamSetting.Daunm.WGS84, proj.std_paralle1, proj.std_paralle2, proj.center_lon, proj.false_easting, proj.false_northing, ProjectionAPI.Setting.ProjParamSetting.Units.m, proj.scale_factor, "-1");
                    break;
                case 2:   //麦卡托
                    srcproj = ProjParam("merc", ProjectionAPI.Setting.ProjParamSetting.Ellps.WGS84, ProjectionAPI.Setting.ProjParamSetting.Daunm.WGS84, proj.std_paralle1, proj.std_paralle2, proj.center_lon, proj.false_easting, proj.false_northing, ProjectionAPI.Setting.ProjParamSetting.Units.m, proj.scale_factor, "-1");
                    break;
                case 3:   //lambert
                    srcproj = ProjParam("lcc", ProjectionAPI.Setting.ProjParamSetting.Ellps.WGS84, ProjectionAPI.Setting.ProjParamSetting.Daunm.WGS84, proj.std_paralle1, proj.std_paralle2, proj.center_lon, proj.false_easting, proj.false_northing, ProjectionAPI.Setting.ProjParamSetting.Units.m, proj.scale_factor, "-1");
                    //srcproj = "+proj=lcc +lat_1=25 +lat_2=47 +lat_0= 36 +lon_0=115 +x_0=0 +y_0=0 ";
                    break;
                case 4:   //stereographic
                    srcproj = ProjParam("stere", ProjectionAPI.Setting.ProjParamSetting.Ellps.WGS84,90.0f, proj.std_paralle1, proj.std_paralle2, proj.center_lon, proj.false_easting, proj.false_northing, ProjectionAPI.Setting.ProjParamSetting.Units.m, 1.0, "-1");
                    break;
                case 5:   //albers
                    srcproj = ProjParam("aea", ProjectionAPI.Setting.ProjParamSetting.Ellps.WGS84, ProjectionAPI.Setting.ProjParamSetting.Daunm.WGS84, proj.std_paralle1, proj.std_paralle2, proj.center_lon, proj.false_easting, proj.false_northing, ProjectionAPI.Setting.ProjParamSetting.Units.m, proj.scale_factor, "-1");
                    break;
                case 6:   //Gauss
                    srcproj = ProjParam("gstmerc", ProjectionAPI.Setting.ProjParamSetting.Ellps.WGS84, ProjectionAPI.Setting.ProjParamSetting.Daunm.WGS84, proj.std_paralle1, proj.std_paralle2, proj.center_lon, proj.false_easting, proj.false_northing, ProjectionAPI.Setting.ProjParamSetting.Units.m, proj.scale_factor, "-1");
                    break;
                case 7:   //utm
                    srcproj = ProjParam("utm", ProjectionAPI.Setting.ProjParamSetting.Ellps.WGS84, ProjectionAPI.Setting.ProjParamSetting.Daunm.WGS84, proj.std_paralle1, proj.std_paralle2, proj.center_lon, proj.false_easting, proj.false_northing, ProjectionAPI.Setting.ProjParamSetting.Units.m, proj.scale_factor, "-1");
                    break;
            }

            return srcproj;
        }
示例#7
0
        //从ProjPara参数中获取坐标系
        string getSrcCoordinate(MapHandle.config.ProjPara proj)
        {
            string srcproj="";
            //获取投影方式对应的index
            int projType = getProjNum(proj.type);

            if (projType == 1)
            {
                //等经纬投影
                srcproj = "GEOGCS[\"GCS_WGS_1984\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_84\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]]";
            }
            if (projType == 2)
            {
                //麦卡托投影
                string wktparam2 = "PROJCS[\"Mercator-projection\",GEOGCS[\"GCS_WGS_1984\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_84\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Mercator\"],PARAMETER[\"False_Easting\"," + proj.false_easting.ToString() + "],PARAMETER[\"False_Northing\"," + proj.false_northing.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"longitude_of_center\"," + proj.center_lon.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"latitude_of_center\"," + proj.center_lat.ToString() + "],PARAMETER[\"standard_parallel_1\"," + proj.std_paralle1.ToString() + "], PARAMETER[\"standard_parallel_2\", " + proj.std_paralle2.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"central_meridian\"," + proj.cen_meridian.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"latitude_of_origin\"," + proj.latitude_origin.ToString() + "], PARAMETER[\"scale_factor\", " + proj.scale_factor.ToString() + "], UNIT[\"Meter\", " + proj.unit.ToString() + "]]";
                srcproj += wktparam2;
            }
            else if (projType == 3)
            {
                //lambert投影
                string wktparam2 = "PROJCS[\"Lambert-projection\",GEOGCS[\"GCS_WGS_1984\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_84\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Lambert_Conformal_Conic_2SP\"],PARAMETER[\"False_Easting\"," + proj.false_easting.ToString() + "],PARAMETER[\"False_Northing\"," + proj.false_northing.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"longitude_of_center\"," + proj.center_lon.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"latitude_of_center\"," + proj.center_lat.ToString() + "],PARAMETER[\"standard_parallel_1\"," + proj.std_paralle1.ToString() + "], PARAMETER[\"standard_parallel_2\", " + proj.std_paralle2.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"central_meridian\"," + proj.cen_meridian.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"latitude_of_origin\", " + proj.latitude_origin.ToString() + "], PARAMETER[\"scale_factor\", " + proj.scale_factor.ToString() + "], UNIT[\"Meter\", " + proj.unit.ToString() + "]]";
                srcproj += wktparam2;

            }
            else if (projType == 5)
            {
                //Albers投影
                string wktparam2 = "PROJCS[\"Albers-projection\",GEOGCS[\"GCS_WGS_1984\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_84\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Albers\"],PARAMETER[\"False_Easting\"," + proj.false_easting.ToString() + "],PARAMETER[\"False_Northing\"," + proj.false_northing.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"longitude_of_center\"," + proj.center_lon.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"standard_parallel_1\"," + proj.std_paralle1.ToString() + "], PARAMETER[\"standard_parallel_2\", " + proj.std_paralle2.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"latitude_of_origin\", " + proj.latitude_origin.ToString() + "], PARAMETER[\"scale_factor\",  " + proj.scale_factor.ToString() + "], UNIT[\"Meter\", " + proj.unit.ToString() + "]]";
                srcproj += wktparam2;

            }
            else if (projType == 6) //未使用
            {
                //高斯投影
                string wktparam2 = "PROJCS[\"utm-projection\",GEOGCS[\"GCS_WGS_1984\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_84\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Transverse_Mercator\"],PARAMETER[\"False_Easting\"," + proj.false_easting.ToString() + "],PARAMETER[\"False_Northing\"," + proj.false_northing.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"longitude_of_center\"," + proj.center_lon.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"standard_parallel_1\"," + proj.std_paralle1.ToString() + "], PARAMETER[\"standard_parallel_2\",  " + proj.std_paralle2.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"central_meridian\"," + proj.cen_meridian.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"latitude_of_origin\",  " + proj.latitude_origin.ToString() + "], PARAMETER[\"scale_factor\",  " + proj.scale_factor.ToString() + "], UNIT[\"Meter\", " + proj.unit.ToString() + "]]";
                srcproj += wktparam2;

            }
            else if (projType == 7)//未使用
            {
                //UTM投影
                string wktparam2 = "PROJCS[\"World_Robinson\",GEOGCS[\"GCS_WGS_1984\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_84\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Robinson\"],PARAMETER[\"False_Easting\"," + proj.false_easting.ToString() + "],PARAMETER[\"False_Northing\"," + proj.false_northing.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"longitude_of_center\"," + proj.center_lon.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"standard_parallel_1\"," + proj.std_paralle1.ToString() + "], PARAMETER[\"standard_parallel_2\", " + proj.std_paralle2.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"central_meridian\"," + proj.cen_meridian.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"latitude_of_origin\", " + proj.latitude_origin.ToString() + "], PARAMETER[\"scale_factor\", " + proj.scale_factor.ToString() + "], UNIT[\"Meter\", " + proj.unit.ToString() + "]]";
                srcproj += wktparam2;

            }
            else if (projType == 4)
            {
                //极射赤面
                string wktparam2 = "PROJCS[\"Stereographic\",GEOGCS[\"GCS_WGS_1984\",DATUM[\"WGS_1984\",SPHEROID[\"WGS_84\",6378137.0,298.257223563]],PRIMEM[\"Greenwich\",0.0],UNIT[\"Degree\",0.0174532925199433]],PROJECTION[\"Stereographic\"],PARAMETER[\"False_Easting\"," + proj.false_easting.ToString() + "],PARAMETER[\"False_Northing\"," + proj.false_northing.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"longitude_of_center\"," + proj.center_lon.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ",PARAMETER[\"latitude_of_center\"," + proj.center_lat.ToString() + "]";
                srcproj += wktparam2;
                wktparam2 = ", PARAMETER[\"scale_factor\", " + proj.scale_factor.ToString() + "], UNIT[\"Meter\", " + proj.unit.ToString() + "]]";
                srcproj += wktparam2;

            }

            return srcproj;
        }
示例#8
0
        public short[] getSelectData(List<PointF> pts, int dataCount, MapHandle.config cfg, double pixelsize)
        {
            //pixelsize,每个像素的地理坐标宽度

            int num = 0;
            short[] selectData = new short[dataCount];

            //Initialization
            for (int i = 0; i < dataCount; i++)
            {
                selectData[i] = 0;
            }

            //Calculation
            for (int i = 0; i < pts.Count(); i++)
            {
                double step = pixelsize / cfg.resolution;
                double m = (cfg.maxY - pts[i].Y) / cfg.resolution;//行
                double n = (pts[i].X - cfg.minX) / cfg.resolution;//列

                //double m = (pts[i].X - p_0.X) * step;
                //double n = (pts[i].Y - p_0.Y) * step;

                //double m = (pts[i].X - p_0.X);
                //double n = (pts[i].Y - p_0.Y);

                for (int j = 0; j < step; j++)
                {
                    for (int k = 0; k < step; k++)
                    {
                        if ((m + j) >= 0 && (m + j) < cfg.height && (n + k) >= 0 && (n + k) < cfg.width)
                        {
                            //int index = (int)Math.Round((m + j) * cfg.width + (n + k));
                            int index = (int)(Math.Round(m + j) * cfg.width + Math.Round(n + k));
                            if (index >= 0 && index < dataCount)
                            {
                                selectData[index] = 1;
                                num++;
                            }
                        }
                    }
                }

                //int index = (int)(Math.Round(m) * cfg.width + Math.Round(n));

                //int index = (int)Math.Round(m * cfg.width + n);
                //if (index >= 0 && index < dataCount)
                //{
                //    selectData[index] = 1;
                //    num++;
                //}

                //int index = (int)Math.Round(pts[i].X * cfg.width + pts[i].Y);
                //if (index >= 0 && index < dataCount)
                //{
                //    selectData[index] = 1;
                //    num++;
                //}

            }

            return selectData;
        }
示例#9
0
        //add shp
        public void addSHPLayer(string layername, string fullPath, Color color, int width, MapHandle.config.ProjPara pjPara)
        {
            SHPLayer shplayer = new SHPLayer();
            //shplayer.getCFG(cfg);

            mapControl1.addSHP(shplayer.getSHPLayer(layername, fullPath,color, width, pjPara));
        }