<!--
  ~ Licensed to the Apache Software Foundation (ASF) under one
  ~ or more contributor license agreements. See the NOTICE file
  ~ distributed with this work for additional information
  ~ regarding copyright ownership. The ASF licenses this file
  ~ to you under the Apache License, Version 2.0 (the
  ~ "License"); you may not use this file except in compliance
  ~ with the License. You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing,
  ~ software distributed under the License is distributed on an
  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
  ~ KIND, either express or implied. See the License for the
  ~ specific language governing permissions and limitations
  ~ under the License.
  -->

<s:schema elementFormDefault="qualified"
          xmlns:s="http://www.w3.org/2001/XMLSchema"
          xmlns:tns="http://apache.org/axis2/schema/enumeration"
          targetNamespace="http://apache.org/axis2/schema/enumeration">
    <s:element name="CountPlacesInRect">
        <s:complexType>
            <s:sequence>
                <s:element minOccurs="1" maxOccurs="1" name="upperleft" type="s:string"/>
                <s:element minOccurs="1" maxOccurs="1" name="lowerright" type="s:string"/>
                <s:element minOccurs="1" maxOccurs="1" name="ptype" type="tns:PlaceType"/>
            </s:sequence>
        </s:complexType>
    </s:element>
    <s:simpleType name="PlaceType">
        <s:restriction base="s:string">
            <s:enumeration value="UnknownPlaceType"/>
            <s:enumeration value="AirRailStation"/>
            <s:enumeration value="BayGulf"/>
            <s:enumeration value="CapePeninsula"/>
            <s:enumeration value="CityTown"/>
            <s:enumeration value="HillMountain"/>
            <s:enumeration value="Island"/>
            <s:enumeration value="Lake"/>
            <s:enumeration value="OtherLandFeature"/>
            <s:enumeration value="OtherWaterFeature"/>
            <s:enumeration value="ParkBeach"/>
            <s:enumeration value="PointOfInterest"/>
            <s:enumeration value="River"/>
        </s:restriction>
    </s:simpleType>
</s:schema>
