【问题标题】:How to draw multiple polygons and connect them?如何绘制多个多边形并将它们连接起来?
【发布时间】:2019-12-29 10:48:57
【问题描述】:

我必须制作一个国家的 2D 地图。 我读出了一个 GEOJson 文件,在该文件中我得到了转换为点的坐标,这些点创建了一个多边形。当我将省份分开显示时没有问题。当我尝试连接每个多边形(省)时,我得到了很多线。

drawing in xaml.

我必须得到相同的绘图,没有线条。

使用的代码是这样的:

public void makePolygon()
    {
        double x = 0;
        double y = 0;
        PointReduction pr = new PointReduction();
        string filepath = "C:/Users/tomcr/Onedrive/Bureaublad/AppliedProgram/Belgie.GEOJSON";
        using (StreamReader streamReader = new StreamReader(filepath))
        using (JsonTextReader reader = new JsonTextReader(streamReader))
        {
            reader.SupportMultipleContent = true;

            var serializer = new JsonSerializer();
            while (reader.Read())
            {
                if (reader.TokenType == JsonToken.StartObject)
                {
                    string jsonString = JObject.Load(reader).ToString();
                    JsonModel.Rootobject rootobject = JsonConvert.DeserializeObject<JsonModel.Rootobject>(jsonString);

                    PointCollection myPointCollection = new PointCollection();
                    List<Point> pointListOut = new List<Point>();
                    PointCollection PLO = new PointCollection();
                    Polygon myPolygon = new Polygon();

                    for (int i = 0; i < rootobject.features.Length; i++)
                    {
                        myPolygon = new Polygon();
                        string naam = rootobject.features[i].properties.localname;
                        JsonModel.Geometry geometrie = rootobject.features[i].geometry;

                        for (int p = 0; p < geometrie.coordinates.Length; p++)
                        {
                            for (int j = 0; j < geometrie.coordinates[p].Length; j++)
                            {
                                for (int z = 0; z < geometrie.coordinates[p][j].Length; z++)
                                {
                                    double lon = DegreeToRadian((geometrie.coordinates[p][j][z][0]));
                                    double lat = DegreeToRadian((geometrie.coordinates[p][j][z][1]));
                                    x = (1000 / (2 * Math.PI) * Math.Pow(2, 6) * (lon + Math.PI));
                                    y = (1000 / (2 * Math.PI) * Math.Pow(2, 6) * (Math.PI - Math.Log(Math.Tan(Math.PI / 4 + lat / 2))));
                                    myPointCollection.Add(new System.Windows.Point(x, y));
                                }
                            }
                        }

                        pr.RamerDouglasPeucker(myPointCollection, 1.0, pointListOut);
                        PLO = pr.Omvorm(pointListOut);
                        myPolygon.Points = PLO;
                        myPolygon.Stroke = Brushes.Black;
                        myPolygon.Stretch = Stretch.Fill;
                        myPolygon.StrokeThickness = 2;
                    }
                    myCanvas.Children.Add(myPolygon);
                }
            }
        }
    }

数据是这样使用的:

{
  "type" : "FeatureCollection",
  "features" : [{
     "type":"Feature",
        "properties" : {
           "srid"          : "4326",
           "id"            : "54094",
           "name"          : "Brussels-Capital",
           "localname"     : "Région de Bruxelles-Capitale - Brussels Hoofdstedelijk Gewest",
           "official_name" : "",
           "boundary"      : "administrative",
           "admin_level"   : "4",
           "note"          : "",
           "wikidata"      : "Q240",
           "wikipedia"     : "fr:Région de Bruxelles-Capitale",
           "timestamp"     : "2019-12-11 22:37:02",
           "rpath"         : "54094,52411,0",
           "alltags"       : {
              "name:ar" : "بروكسل العاصمة",
              "name:ca" : "Brussel·les-Capital",
              "name:en" : "Brussels-Capital",
              "name:fr" : "Bruxelles-Capitale",
              "name:nl" : "Brussels Hoofdstedelijk Gewest",
              "name:ru" : "Брюссельский столичный регион",
              "name:sk" : "Bruselský región",
              "name:wa" : "Brussele-Capitåle",
              "ref:INS" : "04000",
              "website" : "http://www.bruxelles.irisnet.be/",
              "name:vls" : "Haaptstad Bréissel",
              "nat_name" : "Région de Bruxelles-Capitale - Brussels Hoofdstedelijk Gewest",
              "wikidata" : "Q240",
              "ISO3166-2" : "BE-BRU",
              "wikipedia" : "fr:Région de Bruxelles-Capitale",
              "nat_name:ar" : "إقليم بروكسل العاصمة",
              "nat_name:ca" : "Regió de Brussel·les-Capital",
              "nat_name:de" : "Region Brüssel-Hauptstadt",
              "nat_name:en" : "Brussels-Capital Region",
              "nat_name:fr" : "Région de Bruxelles-Capitale",
              "nat_name:lb" : "Haaptstadregioun Bréissel",
              "nat_name:li" : "Brussels Hoofsjtaejelik Gewes",
              "nat_name:nl" : "Brussels Hoofdstedelijk Gewest",
              "nat_name:wa" : "Redjon d'Brussele-Capitåle",
              "nat_name:vls" : "Brussels Oofdstedelik Gewest",
              "default_language" : "fr - nl"}
           },
           "bbox"    : [4.2437658, 50.763683, 4.4822712, 50.913906],
           "geometry": {"type":"MultiPolygon","coordinates":[[[[4.2437658,50.8195819],[4.2443812,50.8195414],[4.2444378,50.8193993],[4.2446464,50.8188349],[4.25431,50.8262863],[4.2539027,50.8258845],[4.2531563,50.8251469],[4.2511811,50.8242196],[4.2508417,50.8243805],[4.2497516,50.8235688],[4.2479386,50.8221951],[4.2476042,50.8219406],[4.2470097,50.8215331],[4.2453656,50.8205113],[4.244301,50.8198943],[4.2437658,50.8195819]]]]}
        },{
     "type":"Feature",
        "properties" : {
           "srid"          : "4326",
           "id"            : "53114",
           "name"          : "Antwerp",
           "localname"     : "Antwerpen",
           "official_name" : "Provincie Antwerpen",
           "boundary"      : "administrative",
           "admin_level"   : "6",
           "note"          : "",
           "wikidata"      : "Q1116",
           "wikipedia"     : "nl:Antwerpen (provincie)",
           "timestamp"     : "2019-12-20 22:59:01",
           "rpath"         : "53114,53134,52411,0",
           "alltags"       : {
              "name:ca" : "Província d'Anvers",
              "name:en" : "Antwerp",
              "name:es" : "Amberes",
              "name:fr" : "Anvers",
              "name:lt" : "Antverpenas",
              "name:mk" : "Антверпен",
              "name:nl" : "Antwerpen",
              "name:pl" : "Antwerpia",
              "name:ru" : "Антверпен",
              "name:sk" : "Antverpy",
              "ref:INS" : "10000",
              "website" : "http://www.provant.be/",
              "name:tzl" : "Anviarça",
              "wikidata" : "Q1116",
              "ISO3166-2" : "BE-VAN",
              "wikipedia" : "nl:Antwerpen (provincie)",
              "population" : "1802719",
              "alt_name:mk" : "Антверп",
              "border_type" : "province",
              "wikipedia:fr" : "Province d'Anvers",
              "official_name" : "Provincie Antwerpen",
              "population:date" : "2014-01-01",
              "official_name:nl" : "Provincie Antwerpen"}
           },
           "bbox"    : [4.1719656, 50.990143, 5.2622542, 51.505116],
           "geometry": {"type":"MultiPolygon","coordinates":[[[[4.9399714,51.4361185],[4.9394687,51.4371095],[4.9457065,51.4447059],[4.9458012,51.4439747],[4.9439971,51.443798],[4.9439697,51.4437954],[4.9439041,51.4437889]]],[[[4.948755,51.4549908],[4.9490227,51.4537654],[4.949351,51.4537897],[4.9492362,51.4542513],[4.9497913,51.4543045],[4.9495907,51.4551116],[4.9490426,51.4550324],[4.948755,51.4549908]]]]}
        }

(我删除了分配的坐标)

【问题讨论】:

    标签: c# wpf 2d polygon geojson


    【解决方案1】:

    如果不查看数据本身就无法确定地回答这个问题,但乍一看,我可以看到您并没有为您创建的每个 Polygon 对象创建一个新的 PLO PointCollection

    我怀疑您可能还需要从 Polygon 切换到 Polyline,但同样,这取决于您数据的性质。

    【讨论】:

    • 我将数据添加到问题中。每次我想创建一个新的点集时,多边形都会相互重叠。谢谢你的回答。
    【解决方案2】:

    问题解决了,我为每个普罗旺斯制作了一个多边形,我不得不删除 "myPolygon.Stretch = Stretch.Fill;"

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      • 1970-01-01
      • 2020-02-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多