123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- // import AMapLoader from "@amap/amap-jsapi-loader";
- import { Input } from "ant-design-vue";
- import { defineComponent, onMounted, reactive, ref } from "vue";
- declare const AMap: any;
- export default defineComponent({
- emits: ["change"],
- setup(props, { emit }) {
- // const AMap = ref(AMap);
- const map = ref();
- const marker = ref();
- const geocoder = ref();
- const autoComplete = ref();
- const state = reactive({
- address: "天安门",
- lnglat: [116.397428, 39.90923],
- });
- function clickMap(e: any) {
- state.lnglat = [e.lnglat.getLng(), e.lnglat.getLat()];
- updateMarker();
- regeoCode();
- }
- function updateMarker() {
- marker.value.setPosition(state.lnglat);
- map.value.add(marker.value);
- map.value.setFitView(marker.value);
- }
- function geoCode() {
- geocoder.value.getLocation(
- state.address,
- (status: string, result: any) => {
- if (status === "complete" && result.geocodes.length) {
- const lnglat = result.geocodes[0].location;
- state.lnglat = lnglat;
- updateMarker();
- } else {
- console.error("根据地址查询位置失败");
- }
- }
- );
- }
- function regeoCode() {
- geocoder.value.getAddress(
- state.lnglat,
- function (status: any, result: any) {
- if (status === "complete" && result.regeocode) {
- const address = result.regeocode.formattedAddress;
- state.address = address;
- } else {
- console.error("根据经纬度查询地址失败");
- }
- }
- );
- }
- const searchAddress = () => {
- autoComplete.value.search(
- state.address,
- function (status: any, result: any) {
- console.error("result: ", result);
- // 搜索成功时,result即是对应的匹配数据
- }
- );
- };
- const initMap = () => {
- map.value = new AMap.Map("container", {
- //设置地图容器id
- viewMode: "3D", //是否为3D地图模式
- zoom: 11, //初始化地图级别
- center: state.lnglat, //初始化地图中心点位置
- });
- // AMapLoader.load({
- // key: "e8d3513c8551b20ec90b991249fa59a1", // 申请好的Web端开发者Key,首次调用 load 时必填
- // version: "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
- // plugins: ["AMap.Scale", "AMap.ToolBar", "AMap.MouseTool"], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
- // Loca: {
- // version: "2.0.0",
- // },
- // })
- // .then((res) => {
- // AMap.plugin(["AMap.Geocoder", "AMap.AutoComplete"], () => {
- // 使用geocoder做地理/逆地理编码
- geocoder.value = new AMap.Geocoder();
- autoComplete.value = new AMap.AutoComplete({ city: "全国" });
- // });
- marker.value = new AMap.Marker({
- position: state.lnglat, //位置
- });
- map.value.add(marker.value); //添加到地图
- map.value.on("click", clickMap);
- // })
- // .catch((e) => {
- // console.log("error", e);
- // });
- };
- onMounted(() => {
- initMap();
- });
- return () => {
- return (
- <div class="w-1/1">
- <Input.Search
- value={state.address}
- onChange={(e) => (state.address = e.target.value || "")}
- placeholder="请输入地名"
- class="w-1/1"
- onSearch={searchAddress}
- />
- <div id="container" class="w-1/1 h-200px mt-10px"></div>
- </div>
- );
- };
- },
- });
|