【发布时间】:2019-12-29 10:48:57
【问题描述】:
我必须制作一个国家的 2D 地图。 我读出了一个 GEOJson 文件,在该文件中我得到了转换为点的坐标,这些点创建了一个多边形。当我将省份分开显示时没有问题。当我尝试连接每个多边形(省)时,我得到了很多线。
我必须得到相同的绘图,没有线条。
使用的代码是这样的:
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]]]]}
}
(我删除了分配的坐标)
【问题讨论】: