Ich habe zwei Dateien (fileA.txt und fileB.txt), die ich verwenden muss, um Polygone auf einer Karte zu erstellen. FileA enthält die Liste der Referenznummern, die sich auf Datei B beziehen. Ich bin in der Lage, diese Liste von A zu bekommen und finde die entsprechende Datei in B mit streamreader. Was ich nicht erfassen kann, sind die Daten, die ich von dieser Datei benötige.Erstellen von Bing Maps V8-Polygon aus Lookup-Dateien
FileA wie folgt aussieht:
| ADV | 170613/0448 | 170613/0600 | KRIW || 0 | 1
WYZ023 Star_Valley WYZ013 500.130 Jackson_Hole
ich die Nummer in fett nehmen , 500230, und suchen Sie danach in fileB, das wie folgt aussieht:
| FIPS | 500230 |
59,094 59,091 -138,413 -138,425 59,091 -138,413 59,092 -138,425 59,094 -138,415 59,091 -138,413
59,101 59,099 -138,397 -138,413 59,099 -138,405 59,101 - 138.413 59.100 -138.397 59.099 -138.405
| FIPS | 500231 |
Jede Zeile beginnt mit 8 nach dem | FIPS | Linie ist ein Polygon. Die Zahl 8 repräsentiert die Anzahl der lat langen Paare NACH den fett gedruckten Zahlen. Diese 8 kann irgendwo zwischen 4 und 20 liegen. Ich kann auch irgendwo zwischen 1 und 20 dieser "Gruppen" lat langer Paare innerhalb jedes FIPS | haben.
Am Ende versuche ich eine Liste von lat langen Paaren für jedes | FIPS | zu bekommen das entspricht dem | FIPS | Das ist nachgeschlagen.
oder ein Array von Arrays. Irgendwelche Gedanken?
UPDATE: das ist, was ich kam, aber ich bin auf MainListLoop stecken. Der streamReader liest nur bis zum Ende der Zeile, aber ich muss ihn zum nächsten FIPS lesen. Irgendwelche Vorschläge?
[HttpGet]
public ActionResult GetWinterData()
{
var winterFilePaths = HostingEnvironment.MapPath(ConfigurationManager.AppSettings["WatchWarnFilePath"] + "/wstm.txt");
var stringData = new List<string>();
var mainList = new List<WinterModel>();
using (var reader = new StreamReader(winterFilePaths))
{
while (!reader.EndOfStream)
{
var data = reader.ReadLine().Trim();
if (!string.IsNullOrEmpty(data))
stringData.Add(data);
}
reader.Close();
}
WinterModel temp = null;
stringData.ForEach(line =>
{
if (line.StartsWith("|"))
{
if (temp != null)
{
mainList.Add(temp);
}
string[] rawData = line.Split('|');
temp = new WinterModel
{
Type = rawData[0],
PolyBorderColor = GetBorderColor(rawData[0], types.WINTER),
PolyBorderThickness = GetPolyBorderThickness(rawData[0], types.WINTER),
StartDateTime = rawData[1],
EndDateTime = rawData[2],
innerData = new List<tempInnerWinterModel>(),
InfoboxTitle = GetInfoboxTitle(rawData[0], types.WINTER)
};
}
else
{
string[] tempLine = line.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
temp.innerData.Add(new tempInnerWinterModel
{
param1 = tempLine[0],
FIPS = tempLine[1],
Location = tempLine[2],
latLongs = new List<lat_longPairs>()
});
}
});
mainList.Add(temp);
getWinterLatLongPairs2(mainList);
var tempJson = (from item in stringData
select item.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries)
into rawData
select new WatchPolygons
{
Type = rawData[0],
PolyBorderColor = GetBorderColor(rawData[0], types.WINTER),
StartDateTime = rawData[1],
EndDateTime = rawData[2],
//Lat_Long_Pairs = getWinterLatLongPairs2(rawData[5])
//Metadata = "Watch Type: " + rawData[0] + "< /br>" + "Watch Start: " + rawData[1] + ' ' + rawData[2]
// + "< /br>" + "Watch End: " + rawData[3] + ' ' + rawData[4]
});
return Json((from item in stringData
select item.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries)
into rawData
select new WatchPolygons
{
Type = rawData[0],
PolyBorderColor = GetBorderColor(rawData[0], types.WINTER),
StartDateTime = rawData[1],
EndDateTime = rawData[2],
//Lat_Long_Pairs = getWinterLatLongPairs2(rawData[5])
//Metadata = "Watch Type: " + rawData[0] + "< /br>" + "Watch Start: " + rawData[1] + ' ' + rawData[2]
// + "< /br>" + "Watch End: " + rawData[3] + ' ' + rawData[4]
}).ToList(), JsonRequestBehavior.AllowGet);
}
private static void getWinterLatLongPairs2(List<WinterModel> inputFips)
{
var searchFips = inputFips;
var fipFilePath = HostingEnvironment.MapPath(ConfigurationManager.AppSettings["WatchWarnFilePath"] + "/pfzbnds.tbl");
var stringInnerData = new List<string>();
using (var reader = new StreamReader(fipFilePath))
{
while (!reader.EndOfStream)
{
var line = reader.ReadLine().Trim();
if (!string.IsNullOrEmpty(line) && line.Contains("<FIPS>"))
{
MainListLoop(inputFips, line, reader);
if (inputFips.Last().innerData.Last().latLongs.Count > 0)
{
return;
}
}
}
reader.Close();
}
return;
}
private static void MainListLoop(List<WinterModel> inputFips, string line, StreamReader reader)
{
inputFips.ForEach(main =>
{
main.innerData.ForEach(fips =>
{
if (line.Contains(fips.FIPS))
{
var line2 = reader.ReadLine().Trim();
fips.param1 = "CHANGE";
string[] tempLine = line2.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
string numLatLongPairs = tempLine[0];
var latLonPairsWint = new List<lat_longPairs>();
int endIndex = ((Int16.Parse(numLatLongPairs) * 2) + 3 - 1);
//grab each pair of lat/longs starting at the 5th and add them to the array
for (int i = 5; i < endIndex; i += 2)
{
fips.latLongs.Add(new lat_longPairs { latitude = decimal.Parse(tempLine[i]), longitude = decimal.Parse(tempLine[i + 1]) });
}
return;
}
});
});
}
Danke. Siehe mein Update. Datei B wird sehr groß sein. Es ist 6MB mit 95.697 Linien – bradoxbl
6mb ist nicht groß. 60mb ist moderat. – rbrundritt