zoukankan      html  css  js  c++  java
  • Openlayer给定坐标进行绘制多边形

    今天在绘制平谷区域用给定的坐标,绘制图形的,怎么调试都不知道,最后才发现是参数传错了,没仔细看api文档,真的很恶心啊。废话不多说看代码:

    先放张图:
     

    一、坐标的转换

            //声明一个新的数组
            var coordinatesPolygon = new Array();
            //循环遍历将经纬度转到"EPSG:4326"投影坐标系下
            for (var i = 0; i < coordinates.length; i++) {
                var pointTransform = ol.proj.fromLonLat([coordinates[i][0], coordinates[i][1]], "EPSG:4326");
                coordinatesPolygon.push(pointTransform);
            }

    注意ol.proj.fromLonLat后面如果不填要转换的坐标系,默认为3857

    二、全部源代码

            //北京市平谷区的坐标
            var coordinates = [[117.39680614984, 40.233089086201], [117.3600565732, 40.242113456225], [117.34874458404, 40.250260274602],
                [117.34302344712, 40.283707567814], [117.30241786584, 40.284010303013], [117.30089945595, 40.298823482743],
                [117.29495791414, 40.307241631948], [117.28090327938, 40.31483263219], [117.27787165052, 40.331469477361],
                [117.28158063671, 40.338247525913], [117.26875571365, 40.343837920124], [117.24821332321, 40.376802733207],
                [117.23311626435, 40.375365915021], [117.23011329982, 40.381697774551], [117.22184575331, 40.383995827578],
                [117.21027968492, 40.379304161599], [117.18913489167, 40.383847635371], [117.16955596667, 40.377573094897],
                [117.16201098872, 40.379609944384], [117.15156389182, 40.374358469115], [117.1461431628, 40.367421131629],
                [117.12300485064, 40.359558075585], [117.11864440401, 40.358974561797], [117.11380102691, 40.364149005012],
                [117.10453631204, 40.365747471036], [117.07808699163, 40.347405333082], [117.06520517495, 40.342543682533],
                [117.05951109694, 40.349081054111], [117.04244565157, 40.35250818155], [117.0250699279, 40.340493098635],
                [117.02117101934, 40.333168625588], [117.01588753438, 40.331656255311], [117.01173132175, 40.32337571318],
                [117.01591420209, 40.312498282132], [117.00799784424, 40.305823430052], [117.00636157925, 40.296778788538],
                [116.9970503394, 40.296137984976], [116.99575758984, 40.292616557636], [116.97796493669, 40.288167135931],
                [116.97696786259, 40.282481020224], [116.97075825127, 40.28108093448], [116.95848391237, 40.267707809995],
                [116.95715258101, 40.263327709699], [116.98168044494, 40.25377572019], [116.96338018644, 40.238052279683],
                [116.95795687613, 40.242937187356], [116.94329751003, 40.238005833847], [116.93175719996, 40.233136537486],
                [116.92430219371, 40.224967956262], [116.93485016275, 40.210980369693], [116.94526901764, 40.19855812205],
                [116.94603449564, 40.19354561168], [116.94951752277, 40.188098708124], [116.95882736017, 40.177581436424],
                [116.97897749255, 40.176575285822], [116.97881329629, 40.154560252512], [116.97587001134, 40.146838503303],
                [116.98371154588, 40.133455992809], [116.97593603278, 40.124828346814], [116.98315680573, 40.100140533332],
                [116.97155622343, 40.086210562194], [116.99084261053, 40.081393909686], [116.98663839805, 40.06927009966],
                [116.96955722573, 40.068076860016], [116.96884211824, 40.057480462171], [116.97636631342, 40.054371684127],
                [116.9795686888, 40.047516077888], [116.98518115869, 40.044388313572], [116.99304702223, 40.045029326691],
                [117.00085160401, 40.042331508548], [117.00745407085, 40.038313328591], [117.03161208113, 40.040467631252],
                [117.04575150493, 40.055833869462], [117.06992028353, 40.067915618111], [117.08846730729, 40.070826442849],
                [117.09595404341, 40.076218017715], [117.11977736834, 40.07863161916], [117.1425959885, 40.070345862074],
                [117.16234951106, 40.075084806785], [117.16799658016, 40.082010788788], [117.18330740326, 40.078432633031],
                [117.19158959317, 40.091180779552], [117.21946331827, 40.102793872514], [117.23085386426, 40.100744473507],
                [117.2308084102, 40.104832177913], [117.2565631512, 40.125816298924], [117.26463610295, 40.118734529522],
                [117.2720390385, 40.117442160668], [117.28248965384, 40.119346336362], [117.29631227787, 40.128663778615],
                [117.30298578394, 40.127129306082], [117.31838231488, 40.145192295628], [117.35175120566, 40.14858516025],
                [117.3647252165, 40.166701558473], [117.36002676882, 40.179323942797], [117.37183376251, 40.184576516774],
                [117.39959624353, 40.184618207342], [117.41343867583, 40.191765541398], [117.41039919172, 40.194936098147],
                [117.39584874998, 40.193328689781], [117.3867886771, 40.198351231932], [117.38715826407, 40.205987067737],
                [117.39482310976, 40.20909112999], [117.39525305779, 40.212222926017], [117.38556017544, 40.214479099127],
                [117.38481402713, 40.223681632946], [117.3994912696, 40.227137227499], [117.39680614984, 40.233089086201]]
            //声明一个新的数组
            var coordinatesPolygon = new Array();
            //循环遍历将经纬度转到"EPSG:4326"投影坐标系下
            for (var i = 0; i < coordinates.length; i++) {
                var pointTransform = ol.proj.fromLonLat([coordinates[i][0], coordinates[i][1]], "EPSG:4326");
                coordinatesPolygon.push(pointTransform);
            }
            //瓦片图层
            var tileLayer = new ol.layer.Tile({
            source:new ol.source.OSM()
            });
            var source = new ol.source.Vector();
            //矢量图层
            var vector = new ol.layer.Vector({
                source: source,
                style: new ol.style.Style({
                    fill: new ol.style.Fill({
                        color: 'rgba(255, 255, 255, 0.1)'
                    }),
                    stroke: new ol.style.Stroke({
                        color: 'red',
                         2
                    }),
                    image: new ol.style.Circle({
                        radius: 10,
                        fill: new ol.style.Fill({
                            color: '#ffcc33'
                        })
                    })
                })
            });
            //多边形此处注意一定要是[坐标数组]
            var plygon = new ol.geom.Polygon([coordinatesPolygon])
            //多边形要素类
            var feature = new ol.Feature({
                geometry: plygon,
            });
            console.log(feature);
            source.addFeature(feature);
            console.log(vector.getSource().getFeatures().length);
            var view=new ol.View({
                center:[116.46,39.92],
                zoom: 10,
                projection: "EPSG:4326"
            });
            var map = new ol.Map({
                layers: [tileLayer, vector],
                
                view:view,
                target: "map"
            });

    三、总结

    代码简单。但是如果写错了可无语,他也不错,你根本不知道从哪找错误,一直都动态绘图,从来没用过给定的点进行绘图。关于那个坐标转换的问题也可以用下面的方式:

               var geom = new ol.geom.Polygon(coord);
                //将经纬度坐标转换为map对应的坐标
                geom = geom.transform("EPSG:4326", map.getView().getProjection());
  • 相关阅读:
    R语言用神经网络改进Nelson-Siegel模型拟合收益率曲线分析
    用R语言用Nelson Siegel和线性插值模型对债券价格和收益率建模
    R语言LME4混合效应模型研究教师的受欢迎程度
    R语言Black Scholes和Cox-Ross-Rubinstein期权定价模型案例
    R语言中的Nelson-Siegel模型在汇率预测的应用
    R语言中的block Gibbs吉布斯采样贝叶斯多元线性回归
    LNMP搭建
    php高性能开发阅读笔记
    php 关于经纬度距离计算方法
    在已经部署svn 服务器上,搭建svn项目 成功版
  • 原文地址:https://www.cnblogs.com/tuboshu/p/10752336.html
Copyright © 2011-2022 走看看