2

我正在尝试从对 Google 地图的 API 调用中提取纬度/经度。我正在使用的代码如下:

var text gMaps = "https://maps.googleapis.com/maps/api/geocode/xml?address=" & URLEncode(SearchAndReplace([Related Staff - Address]," ","+")) & "&key=xxxxxxxxxxxxxxxxxxxx";

var text lat = URLRoot() & "db/" & Dbid() & "?act=API_EditRecord" & "&rid=" & [Record ID#] & "&apptoken=xxxxxxxxxxxxx" & "&_fid_113=";    

    "javascript: {" &
   
         "$.get('" & $gMaps & "',function(data,success) {" &
            "console.log(data);" &
            "var geo = data.getElementsByTagName('geometry')[0].getAttribute('lat');"  &
            "console.log(geo);" & 
            "$.get('" & $lat & "'+geo);" &
            "window.location.reload();" &
        "});" &
"}"

这是 Quickbase 中用于将信息放入 2 个字段的按钮。上面的例子现在只处理纬度。这段代码给了我一个空结果,我熟悉 javascript,但仍然需要大量学习。

这是我从中提取的 xml 响应。

XML

感谢您提供的任何帮助。

达纳

4

3 回答 3

0

您可以使用 Javascript 的DOMParserXPath功能从 XML 字符串中提取lat和:lng

let xmlString = `
    <GeocodeResponse>
     <status>OK</status>
     <result>
      <type>sample</type>
      <name>Sample XML</name>
      <location>
       <lat>37.4217550</lat>
       <lng>-122.0846330</lng>
      </location>
     </result>
     <result>
      <message>The secret message</message>
     </result>
    </GeocodeResponse>
`

var parser = new DOMParser();
var xmlDoc = parser.parseFromString(xmlString, "text/xml"); //important to use "text/xml"

var nsResolver = xmlDoc.createNSResolver( xmlDoc.ownerDocument == null ? xmlDoc.documentElement : xmlDoc.ownerDocument.documentElement);

var lat = xmlDoc.evaluate('//lat', xmlDoc, nsResolver, XPathResult.STRING_TYPE, null ).stringValue;
var lng = xmlDoc.evaluate('//lng', xmlDoc, nsResolver, XPathResult.STRING_TYPE, null ).stringValue;

console.log(lat, lng) // 37.4217550 -122.0846330

另见Parse XML file with JavaScript and plot on Google Maps

于 2020-08-17T20:41:53.467 回答
0

我建议在 Quick Base 中使用代码页而不是此解决方案的公式字段。使用代码页,您可以使用 XML 解析器库来处理响应,然后使用纬度和经度值对 Quick Base 进行下一次 API 调用。那将是最佳做法。

于 2020-08-19T12:11:25.350 回答
0

看起来您并没有完成您的 lat 查询字符串变量。您的变量最终是 "yourdomain.quickbase.com/db/yourdbid?act=API_EditRecord&apptoken=&rid=&_fid_113=" 因此 fid 113 从未真正分配过值。即使您在下面运行 JavaScript,也不会被告知将其分配给 fid 113。此外,JavaScript 注入很快将在 Quick Base 中成为过去,因此这可能是您想要的。改为放入代码页,这无论如何都会更容易,因为这样您就可以使用 Google Maps API 提供的地理编码器对象。

于 2020-08-17T20:56:56.883 回答