首先,我会自由地承认,只不过是一个笨拙的文科家伙,他在这个脚本编写的东西中完全是自学成才.也就是说,我试图使用以下代码从USGS水资源服务获取价值:
def main(gaugeId):
# import modules
import urllib2, json
# create string
url = "http://waterservices.usgs.gov/nwis/iv/?format=json&sites=" + gaugeId + "¶meterCd=00060,00065"
# open connection to url
urlFile = urllib2.urlopen(url)
# load into local JSON list
jsonList = json.load(urlFile)
# extract and return
# how to get cfs, ft, and zulu time?
return [cfs, ft, time]
Run Code Online (Sandbox Code Playgroud)
虽然我找到了一些关于如何从JSON响应中提取所需值的教程,但大多数都非常简单.我遇到的困难是从这个服务正在返回的非常复杂的响应中提取.通过回答,我可以看到我想要的是两个不同部分的值和时间值.因此,我可以看看响应,看看我需要什么,我不能,为了我的生活,弄清楚如何提取这些值.
简而言之,我需要通过传单层控制来控制图层组,一次两到三个.在这个JSFiddle中,当更改底图时,水印覆盖需要持续保持在各种底图之上.
如果您运行并使用右上角的图层控件,您将注意到当您切换到图像时水力叠加将如何关闭,并且除非您切换到地形并返回到国家地理位置,否则将保持关闭状态.这是我能够可靠地重现的行为.如果你玩它,你可以看到一些非常奇怪的东西正在发生.
任何有关更好的方法来实现这一目标的意见或建议都是受欢 该解决方案确实需要使用图层控件来切换底图,同时保持水印覆盖在顶部.否则,我对替代解决方案完全开放.
如果你在跳转到JSFiddle之前很好奇,这里是JavaScript ......
// initialize map
var map = L.map('map', {
center: [45.7067, -121.5217], // Hood River, OR
zoom: 7
});
// hydrology overlay layer
var hydro = L.esri.tiledMapLayer('http://hydrology.esri.com/arcgis/rest/services/WorldHydroReferenceOverlay/MapServer');
// basemap layer groups so the hydro overlay always overlays the various basemaps
var nationalGeographic = L.layerGroup([
hydro,
L.esri.basemapLayer('NationalGeographic')
]),
esriTopo = L.layerGroup([
hydro,
L.esri.basemapLayer('Topographic')
]),
esriShadedRelief = L.layerGroup([
L.esri.tiledMapLayer('ShadedReliefLabels'),
hydro,
L.esri.basemapLayer('ShadedRelief')
]),
esriImagery = L.layerGroup([
hydro,
L.esri.basemapLayer('Imagery')
]);
// add default …Run Code Online (Sandbox Code Playgroud)