GeoServer 2.3 วิธีเปิดใช้งาน jsonp


15

ฉันต้องการเปิดใช้งาน jsonp บน GeoServer 2.3.0 เอกสารกล่าวว่าการตั้ง ENABLE_JSONP จริง

การตอบกลับจากรายการผู้ใช้ GeoServer แจ้งว่าจะแก้ไข web.xml (ตั้งค่าตัวแปรระบบ ENABLE_JSONP = true และ outFormat = text / javascript) แต่ฉันไม่รู้ว่าจะใช้แท็ก xml ใดและวางไว้ที่ไหน

นี่คือรุ่นที่ติดตั้ง: GeoServer 2.3.0 (Web Archive) ได้รับการติดตั้งบนโฮสต์ระยะไกลด้วย tomcat 7.0.39


คุณสามารถอัปเดตคำถามเพื่อให้ลิงก์ไปยัง "เอกสาร" ได้หรือไม่ คุณอาจต้องการอธิบายแหล่งที่มาเฉพาะของการติดตั้ง GeoServer ของคุณ (เช่นจากแหล่งที่มาแพ็คเกจ distro โปรแกรมติดตั้ง windows บางตัว ฯลฯ )
BradHards

มันไม่ได้ทำให้ชัดเจนในทรัพยากรออกมีที่ต้องทำ นี่คือ doco atm: docs.geoserver.org/latest/en/user/services/wfs/?hl=th
1567453

คำตอบ:


33

ฉันได้รับความช่วยเหลือในรายการผู้ใช้ GeoServer

เพิ่มลงในไฟล์นี้: /tomcat/webapps/geoserver/WEB-INF/web.xml

<context-param>
    <param-name>ENABLE_JSONP</param-name>
    <param-value>true</param-value>
</context-param>

และเริ่มบริการใหม่ จากนั้นในคำขอ json ของคุณให้ใช้รูปแบบ = text / javascript

นี่คือรหัสที่ฉันใช้เพื่อขอคุณสมบัติ WFS จาก GeoServer ฉันใช้ API ของ Leafletพร้อมกับ jQuery

var rootUrl = 'http://tomcat.capecodgis.com/geoserver/capecodgis/ows';

var defaultParameters = {
    service: 'WFS',
    version: '1.0.0',
    request: 'GetFeature',
    typeName: 'capecodgis:monitor_station',
    maxFeatures: 200,
    outputFormat: 'text/javascript',
    format_options: 'callback: getJson'

};

var parameters = L.Util.extend(defaultParameters);

$.ajax({
    url: rootUrl + L.Util.getParamString(parameters),
    dataType: 'jsonp',
    jsonpCallback: 'getJson',
    success: handleJson
});


function handleJson(data) {
    L.geoJson(data, {
        onEachFeature: onEachFeature,
        pointToLayer: function (feature, latlng) {
            return L.circleMarker(latlng, geojsonMarkerOptions);
            //return L.marker(latlng);
        }
    }).addTo(map);
}

หวังว่าสิ่งนี้จะช่วยให้คุณเริ่มต้นและรู้สึกอิสระที่จะขอข้อมูลเพิ่มเติม


ถ้าเป็น WMS เท่านั้น? ถ้าไม่คุณสามารถให้ปลายทางตัวอย่างได้หรือไม่? ฉันกำลังพยายามใช้ JSONP สำหรับบริการ WFS แต่ไม่สามารถใช้งานได้ (ล้มเหลวในการค้นหาการตอบสนองสำหรับรูปแบบเอาต์พุต jsonp): 127.0.0.1:8080/geoserver/ …
ca0v

1
@ ca0v ใช้งานได้กับ WFS เท่านั้น WMS ไม่ส่งคืน jsonp, AFAIK
Alex Leith

เห็นได้ชัดว่าตามosgeo-org.atlassian.net/browse/…การตั้งค่าพารามิเตอร์บริบทไม่ทำงานใน Geoserver 2.3.0 ฉันเสียเวลาครึ่งวันในการไล่ล่า ฉันจำเป็นต้องใช้ Geoserver ที่ทันสมัยเพื่อให้ทำงานได้จริง ๆ ...
Auspex

3

เพื่อปรับปรุงความสามารถในการอ่านคุณสามารถวางพารามิเตอร์ลงในการโทร AJAX ได้โดยตรง

ด้วยการโทร JSONP คุณไม่จำเป็นต้องใช้ format_options หรือพารามิเตอร์ความสำเร็จ ฟังก์ชั่นการโทรกลับจะถูกตั้งค่าด้วยพารามิเตอร์ jsonpCallback ในการโทร AJAX และ format_options จะถูกตั้งค่าด้วย jsonp: 'format_options'

    $.ajax('http://demo.opengeo.org/geoserver/wfs',{
        type: 'GET',
        data: {
            service: 'WFS',
            version: '1.0.0',
            request: 'GetFeature',
            typeName: 'capecodgis:monitor_station',
            maxFeatures: 200,
            outputFormat: 'text/javascript',
            request: 'GetFeature',
            srsname: 'EPSG:3857',
            bbox: extent.join(',') + ',EPSG:3857'
            },
        dataType: 'jsonp',
        jsonpCallback:'callback:handleJson',
        jsonp:'format_options'
        });
    },

ตัวอย่างที่ดี แต่ฉันไม่ได้หยิบมันมาทันที สถานะเอกสารที่คุณสามารถเปลี่ยนชื่อการโทรกลับผ่านสตริงการค้นหา "format_options" โดยใช้ตัวเลือก "การโทรกลับ" ตัวอย่างนี้เปลี่ยนการโทรกลับเริ่มต้นเป็น "การทดสอบ": [path_to_wfs_service]? format_options = การโทรกลับ: การทดสอบ
ca0v
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.