0

気象データを取得するためにNDFDRESTサービスを調べ始めたところです。つまり、特定のパラメーターを戻りXMLのtime-layout要素にリンクする方法がわかりません。

呼び出し例:http://graphical.weather.gov/xml/sample_products/browser_interface/ndfdXMLclient.php?lat = 38.99&lon = -77.01&product = time-series&temp = temp&maxt = maxt&mint = mint

この呼び出しを使用して、最高気温(maxt)、最低気温(mint)、および3時間ごとの気温(temp)を探しています。

私が返すXMLは(関連性のために省略されています):

<?xml version="1.0"?>
<dwml version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://graphical.weather.gov/xml/DWMLgen/schema/DWML.xsd">
  <head>
    <product srsName="WGS 1984" concise-name="time-series" operational-mode="official">
      <title>NOAA's National Weather Service Forecast Data</title>
      <field>meteorological</field>
      <category>forecast</category>
      <creation-date refresh-frequency="PT1H">2012-12-26T20:03:47Z</creation-date>
    </product>
    <source>
      <more-information>http://graphical.weather.gov/xml/</more-information>
      <production-center>Meteorological Development Laboratory<sub-center>Product Generation Branch</sub-center></production-center>
      <disclaimer>http://www.nws.noaa.gov/disclaimer.html</disclaimer>
      <credit>http://www.weather.gov/</credit>
      <credit-logo>http://www.weather.gov/images/xml_logo.gif</credit-logo>
      <feedback>http://www.weather.gov/feedback.php</feedback>
    </source>
  </head>
  <data>
    <location>
      <location-key>point1</location-key>
      <point latitude="38.99" longitude="-77.01"/>
    </location>
    <moreWeatherInformation applicable-location="point1">http://forecast.weather.gov/MapClick.php?textField1=38.99&amp;textField2=-77.01</moreWeatherInformation>
    <time-layout time-coordinate="local" summarization="none">
      <layout-key>k-p24h-n7-1</layout-key>
      <start-valid-time>2012-12-26T07:00:00-05:00</start-valid-time>
      <end-valid-time>2012-12-26T19:00:00-05:00</end-valid-time>
    </time-layout>
    <time-layout time-coordinate="local" summarization="none">
      <layout-key>k-p24h-n6-2</layout-key>
      <start-valid-time>2012-12-26T19:00:00-05:00</start-valid-time>
      <end-valid-time>2012-12-27T08:00:00-05:00</end-valid-time>
    </time-layout>
    <time-layout time-coordinate="local" summarization="none">
      <layout-key>k-p3h-n34-3</layout-key>
      <start-valid-time>2012-12-26T16:00:00-05:00</start-valid-time>
      <start-valid-time>2012-12-26T19:00:00-05:00</start-valid-time>
      <start-valid-time>2012-12-26T22:00:00-05:00</start-valid-time>
      <start-valid-time>2012-12-27T01:00:00-05:00</start-valid-time>
    </time-layout>
    <parameters applicable-location="point1">
      <temperature type="maximum" units="Fahrenheit" time-layout="k-p24h-n7-1">
        <name>Daily Maximum Temperature</name>
        <value>34</value>
      </temperature>
      <temperature type="minimum" units="Fahrenheit" time-layout="k-p24h-n6-2">
        <name>Daily Minimum Temperature</name>
        <value>34</value>
      </temperature>
      <temperature type="hourly" units="Fahrenheit" time-layout="k-p3h-n34-3">
        <name>Temperature</name>
        <value>33</value>
        <value>34</value>
        <value>34</value>
        <value>34</value>
      </temperature>
    </parameters>
  </data>
</dwml>

ここで、time-layout要素と要素の子要素parametersをmaxt、mint、tempにリンクして、それに応じてモデルオブジェクトにデータを入力できるようにします。

誰かがこれに似た何かをしましたか?

現在、53のサービス呼び出し(maxt、mint、tempなどのパラメーターごとに1つ)を発行できると考えていますが、複数のlat / lonペアに対してはあまり拡張できません(たくさんあります)。

何か提案をいただければ幸いです。

4

3 に答える 3

1

各要素には、その時間レイアウトを示すために使用される名前を提供する layout-key 要素が含まれます。要素の各子要素には time-layout 属性があり、その属性の値によって、どの time-layout に合わせているかがわかります。

http://www.nws.noaa.gov/mdl/XML/Design/MDL_XML_Design.pdf_origのセクション 5.2 は読む価値があります。ここに名前の例があります: "k-p3h-n28-1" と 5.2 は、"k" は "キー" を表し、"p3h" は (少なくとも最初は) 3 時間の期間であり、n28 は 28 があることを意味します。値は提供し、最後に -1 はこれが一意のラベルになるようにするためです. 通常、これらのラベルを解析したくない場合は、 time-layout 要素に含まれる実際の時間のリストを使用してください。データを移動します。

同じスキームを使用して、場所をデータに関連付けています。要素には、「point1」のようなラベルを定義する location-key の子があり、要素には、それらをその場所に関連付けるための applied-location 属性があります。

于 2014-04-08T14:14:28.817 に答える
0

仕様は次のとおりです: http://www.nws.noaa.gov/mdl/XML/Design/MDL_XML_Design.pdfおそらく見たことがあるでしょう。一般的に、物事は一直線に並んでいるはずです。たとえば、スニペットには、4 つの温度に対応する 4 つの start-valid-time 要素があります。特に時間間隔の変更が近い場合、データが異なる時間に更新され、一部の要素が矛盾しているか、値が xsi:nil="true" になっている可能性があることに気付きました。

于 2013-02-25T17:33:47.043 に答える
0

これには 2 つのアプローチがあると思います。1) NDFD データの結果に適合するカスタム クラスを持つデシリアライザー。

https://msdn.microsoft.com/en-us/library/x6c1kb0s%28v=vs.110%29.aspxで XML スキーマ定義ツール (Xsd.exe) を試すことができます。

2) LINQ を使用して、(c#) などの XML ドキュメントを解析します。

System.Xml.Linq.XDocument xmlDoc = System.Xml.Linq.XDocument.Parse(xmlData);

var recordTime = from timevalue in xmlDoc.Descendants("time-layout").Elements("start-valid-time")
                         where timevalue.Parent.Element("layout-key").Value.Contains("k-p3h")
                         select (DateTime)timevalue;

var maxTemperature = from tempvalue in xmlDoc.Descendants("temperature").Elements("value")
                             where tempvalue.Parent.Attribute("type").Value == "maximum"
                          select (double)tempvalue;

var minTemperature = from tempvalue in xmlDoc.Descendants("temperature").Elements("value")
                             where tempvalue.Parent.Attribute("type").Value == "minimum"
                          select (double)tempvalue;

var temperature = from tempvalue in xmlDoc.Descendants("temperature").Elements("value")
                       where tempvalue.Parent.Attribute("type").Value == "hourly"
                       select (double)tempvalue;

var humidity = from humvalue in xmlDoc.Descendants("humidity").Elements("value")
                       where humvalue.Parent.Attribute("type").Value == "relative"
                       select (double)humvalue;
于 2015-03-27T13:51:29.693 に答える