我正在尝试使用php和curl向Web服务器发送请求.我之前没有做过类似的事情,虽然网上有很多很好的例子,但我对理解一些curl命令有些困难.
这就是我想要做的:有一个已建立的Web服务(例如:Web地图服务),我希望我的php代码向此服务发送一个发布XML请求.作为回应,我想获得一个XML文件.
这就是我现在所拥有的:
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, '');
/*curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml'));*/
/* curl_setopt($ch, CURLOPT_HEADER, 0);*/
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
/*curl_setopt($ch, CURLOPT_REFERER, '');*/
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$ch_result = curl_exec($ch);
curl_close($ch);
echo $ch_result;
Run Code Online (Sandbox Code Playgroud)
正如我所说,我在php中也很新,也使用curl,我想我缺少一些概念.我的问题是:1)我必须放入的字符串(链接)是什么:
curl_setopt($ch, CURLOPT_URL, '');
Run Code Online (Sandbox Code Playgroud)
它是我要发送请求的服务的主机名吗?
2)在第6行中,变量$ xml包含我要作为请求发送的xml文件.它是正确的还是这个变量应该包含其他内容?
3)在哪些情况下我需要使用httpheader或header(row3和row4);
谢谢您的帮助.季米特里斯
我正在开发Android应用程序.我一直在Android监视器上得到它,而tileprovider在地图上平铺wms.
D/skia: --- SkAndroidCodec::NewFromStream returned null
D/skia: --- SkAndroidCodec::NewFromStream returned null
D/skia: --- SkAndroidCodec::NewFromStream returned null
D/skia: --- SkAndroidCodec::NewFromStream returned null
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
public class TileProviderFactory {
// return a geoserver wms tile layer
static TileProvider getTileProvider(final String url) {
TileProvider tileProvider = new WMSTileProvider(256,256) {
Bitmap image;
@Override
public synchronized URL getTileUrl(int x, int y, int zoom) {
double[] bbox = getBoundingBox(x, y, zoom);
String s;
if (zoom > 15) {
s = url + "%26bbox%3D" + String.valueOf(bbox[MINX]) + "%2C"+ …Run Code Online (Sandbox Code Playgroud) 我想用leaflet()in 实现一个特殊的WMS层R.但我对我喜欢使用的WMS层没有成功.
library("leaflet")
library("sp")
# this example from the tutorial works
leaflet() %>% addTiles() %>% setView(-93.65, 42.028, zoom = 4) %>%
addWMSTiles(
"http://mesonet.agron.iastate.edu/cgi-bin/wms/nexrad/n0r.cgi",
layers = "nexrad-n0r",
options = WMSTileOptions(format = "image/png", transparent = TRUE)
)
# but for my implementation it don't work
leaflet() %>% addTiles() %>% setView(lat = 53.8, lng = 12.6, zoom = 8) %>%
addWMSTiles("http://www.umweltkarten.mv-regierung.de/script/mv_a3_wasserschutz_wms.php?",
layers = "t2_bib_p",
options = WMSTileOptions(format = "image/png")
)
Run Code Online (Sandbox Code Playgroud)
我认为坐标参考系统存在问题.因为我喜欢使用的WMS层,没有标准的CRS.所以我尝试用这个来实验WMSTileOptions():
crs=CRS("+init=epsg:5650")
Run Code Online (Sandbox Code Playgroud)
我们的想法是使用WMS-Layers作为我的矢量数据的背景图像.矢量数据主要来自形状文件和GPS数据(文本文件).目的是创建我可以在报告中使用的地图.如果你知道leaflet在R中使用WMS的其他可能性,也欢迎吗?
我正在React Native中开发一个需要使用Web Map Services的移动应用程序。我尚未找到任何允许同时使用WMS并进行本机响应的库或框架。在React(Web)中,我找到了一个。我的问题是:
您是否知道是否存在允许我使用WMS和React Native的任何库或框架,或者是否有可能在React native中集成React(web)库?
谢谢!
我们刚刚开始在Android上使用Google地图,并设置了GeoServer来提供我们想要在地图上添加为叠加层的切片.到目前为止,我已经学习了一些教程和参考资料.
问题:虽然我在getTileUrl函数中生成的url TileProviderFactory确实在我设置断点并将url复制并粘贴到浏览器时返回png图像,但它不会作为Android设备上的叠加层加载到地图上.有没有错误,从我所看到和阅读后,被抛出这个我不知道是否会有任何因为他们已经表示,正在静音的错误.
我想知道的是,如果您可以在我的代码中看到任何直接问题,或者有任何调试建议我将能够判断应用程序是否实际与我的GeoServer通信以检索图像.我查看了GeoServer上的日志,似乎只有我的浏览器请求正在通过,而且它没有收到来自Android的任何请求(这有点难以分辨,因为我们还有其他应用程序使用服务器).Android手机通过wifi和手机连接,并启用了GPS.作为最后的手段,我尝试更改瓷砖覆盖zIndex并将其设置为可见,但这似乎没有任何区别.
编辑:此时Android设备肯定不与GeoServer通信.
编辑2:能够从网站(如此)加载静态图像作为叠加层,并发现我在测试出形成的URL的HTTP请求时遇到以下异常:
W/System.err(10601): java.net.SocketException: The operation timed out
W/System.err(10601): at org.apache.harmony.luni.platform.OSNetworkSystem
.connectStreamWithTimeoutSocketImpl(Native Method)
W/System.err(10601): at org.apache.harmony.luni.net.PlainSocketImpl
.connect(PlainSocketImpl.java:244)
W/System.err(10601): at org.apache.harmony.luni.net.PlainSocketImpl
.connect(PlainSocketImpl.java:533)
W/System.err(10601): at java.net.Socket
.connect(Socket.java:1074)
W/System.err(10601): at org.apache.http.conn.scheme.PlainSocketFactory
.connectSocket(PlainSocketFactory.java:119)
Run Code Online (Sandbox Code Playgroud)
谢谢.
public class MapTestActivity extends FragmentActivity
implements LocationListener, LocationSource{
private GoogleMap mMap;
private OnLocationChangedListener mListener;
private LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map_test);
setupLocationManager();
setupMapIfNeeded();
}
private void setupLocationManager() {
this.locationManager …Run Code Online (Sandbox Code Playgroud) 我正在尝试向我的Geoserver请求检索地图上用户点击附近的功能.

地图占据了所有空间.因此我用这种方式计算了BBOX:
region = mMap.getProjection().getVisibleRegion().latLngBounds;
double left = region.southwest.longitude;
double top = region.northeast.latitude;
double right = region.northeast.longitude;
double bottom = region.southwest.latitude;
Run Code Online (Sandbox Code Playgroud)
宽度和高度如下:
mMapFragment.getView().getWidth();
mMapFragment.getView().getHeight();
Run Code Online (Sandbox Code Playgroud)
而X和Y参数按以下方式计算:
Point click = mMap.getProjection().toScreenLocation(latLng);
Run Code Online (Sandbox Code Playgroud)
其中latLng是来自事件onMapClick(LatLng)的点(参考此处:https://developers.google.com/android/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener).
我获得的结果是:
http://localhost/geoserver/sindot/wms?service=WMS&request=GetFeatureInfo&info_format=application%2Fjson&version=1.1.1&srs=EPSG%3A3857&bbox=1222173.74033,5056403.44084,1222174.11356,5056403.7028&query_layers=sindot:verticale&layers=sindot:verticale&feature_count=3&styles=tabletb3lab&width=2048&height=1262&x=1441&y=503
Run Code Online (Sandbox Code Playgroud)
问题是服务器总是返回一个空响应,即使我知道那里有功能,因为我可以看到地图上的斑点.会是什么呢?
提前致谢.
我是一个"自己动手"的那种人,但是我想确保我不会因为尝试咬掉比我能咀嚼更多的东西.
我正在编写一个基于浏览器的地图应用程序,需要在最终用户的计算机上运行独立(无互联网连接).也就是说,应用程序是某种服务器,在许多情况下,它将安装在最终用户的计算机上,浏览器将指向某个localhost URL来访问它.
我将在客户端使用MapLayers,服务器端将有一堆特定于应用程序的自定义逻辑,例如以某些自定义方式处理地图上的点击事件,在特定时间在地图上创建各种自定义对象,等等.
对于服务器的"业务逻辑"部分,我很高兴使用带有python的paste/webob.这是一个简单的基础架构,可以让我轻松地放入所有这些自定义逻辑.
我一直在想客户端会与两台服务器进行通信:这个粘贴/ webob业务逻辑服务器,以及一台服务于WMS和WFS地图元素的服务器.所以我看着MapServer和GeoServer处理地图部分......我不高兴.
我不高兴,因为我不想在客户端机器上安装和担心"野兽".对于MapServer,我真的不想安装像Apache这样的成熟的Web服务器,并且必须处理CGI,PHP和MapScript.对于GeoServer,可能(可能)安装Java,并处理GeoServer设置和管理的各种复杂性.
部分原因只是学习曲线问题.如果我可以避免它,我对学习MapServer或GeoServer的复杂性并不是特别感兴趣.我安装了GeoServer,将其指向我的一些数据,并且能够使用GeoServer良好的Web管理员内置的MapLayers预览来查看我的数据.但当我尝试使用我自己的GeoServer指向的MapLayers网页提供真实的数据时,我崩溃了GeoServer.我可能会崩溃服务器只是从客户端发送一些可能是格式错误的请求对我来说是非常令人惊讶的.我可以深入研究GeoServer日志,试图弄清楚我做错了什么,但是......我真的不想花很多时间在那上面.
所以,我正在考虑使用我已经拥有的粘贴/ webob服务器自己实现WMS和WFS接口的部分.事实上,我可能只需要WMS,因为我可以通过一个简单的自定义协议来处理矢量对象,我将这些协议传递给客户端,然后客户端可以使用OpenLayers直接创建和操作对象.
我查看了WMS的规范和示例消息(在WFS上稍微少一点).我自己实现这个协议似乎并不那么困难,特别是因为在这种情况下我完全控制了客户端 - 这不像我需要能够充当通用的WMS或WFS服务器; 我只需要让我自己的OpenLayers客户满意.
我需要WMS服务器的两个主要功能是:
从我提前创建的预渲染瓷砖商店中提供瓷砖(我将使用OpenStreetMap数据预渲染瓷砖,使用mapnik作为渲染引擎;我将使用普通的Google Maps样式瓷砖命名方案存储和访问它们那个OpenLayers预计)
能够服务器修改这些瓦片的版本,其中我在本地存储的某些数据被绘制在瓦片之上.例如,我可能在一个"图层"上有10000个点,在另一个图层上有10000个多边形,当用户激活这些图层时,我将提供相同的基础图块,但是当我提供这些图块时,我将呈现这些附加功能在它们之上,可能我将实现一个简单的缓存方案,以保持这些过度渲染的磁贴一段时间.
所以我的问题是:尽管我知道现有的工具可以做这些事情(MapServer,GeoServer,TileCache等),但实际上我觉得仅仅回应一些简单的WMS消息对我来说就不那么重要了,在python中自己对我的瓷砖进行额外的过度绘图,确保所有内容都能正确投影等.我不需要为这些过度图层绘制花哨的宽街道或任何东西,只需简单的线条,图标和标签.拥有一个只有python的解决方案听起来很简单.
我想如果我需要扩展到支持更多的WMS/WFS协议,或者进行更高级的透支,我可以在那时插入MapServer/GeoServer.
这里有陷阱我不考虑吗?
我正在寻找Android MapView的替代品,因为我需要在地图视图中添加WMS服务,并且使用本机视图效果很差.
我尝试过使用Osmdroid API,但仍然没有成功.这需要将几个java类修改为XYTileSource和BitmapTileSourceBase.而且我不确定我能不能工作,因为我还没有找到有关它的信息.
例如:https://groups.google.com/forum/?fromgroups#!topic/osmdroid/IUcc4Q0DmOE
Android Market中的应用程序可以使其完美地与OruxMaps一起工作,但没有用于开发的API.:(
任何人都知道如何以编程方式在另一个地图视图中使用WMS服务.
有谁知道QGIS中是否支持WMS-T?
通过应用程序,我可以添加WMS图层,但我不能使用WMS-T(没有地方设置时间参数).
我一直在浏览Python插件,虽然有一些与时间有关(时间管理器,多时间和多变量数据可视化),但它们不支持WMS协议(它们直接与数据库一起工作).
问候
注意 - 我正在使用GeoServer
当我尝试导出使用 OpenLayer 创建的多层地图时遇到问题。
这是我的JS代码:
map.once('postcompose', function(event) {
var img = new Image,
canvas = event.context.canvas;
img.crossOrigin = "anonymous";
img.src = canvas.toDataURL('image/png');
});
Run Code Online (Sandbox Code Playgroud)
其中map是我的 OpenLayers 地图的 JavaScript 变量。
当地图由多个级别组成时,我收到此类错误:
未捕获的安全错误:无法在“HTMLCanvasElement”上执行“toDataURL”:受污染的画布可能无法导出
如果尝试在不向地图添加级别的情况下执行相同的操作(仅使用默认的 OpenLayer 地图),我可以生成数据 URL 并以 png 格式下载地图。
这似乎是 CrossOrigin 问题,但应该在我的服务器上启用 COR。
有什么帮助吗?谢谢!
编辑
这里是 JS 代码示例,我将图层添加到导致此问题的地图。
var layer = new ol.layer.Image({
source: new ol.source.ImageWMS({
url: 'http://pubblicazioni.provincia.fi.it/geoserver/wms',
params: {
'LAYERS': 'layer_name',
'FORMAT': 'image/png',
'TRANSPARENT': 'true'
},
crossOrigin: null
})
});
map.addLayer(layer);
Run Code Online (Sandbox Code Playgroud) wms ×10
android ×4
geoserver ×3
canvas ×1
curl ×1
dictionary ×1
epsg ×1
geolocation ×1
geospatial ×1
google-maps ×1
java ×1
javascript ×1
mapserver ×1
openlayers-3 ×1
osmdroid ×1
overlay ×1
paste ×1
php ×1
qgis ×1
r ×1
react-native ×1
reactjs ×1
tile ×1
webob ×1